Назад | Перейти на главную страницу

Маршрутизация трафика в локальную сеть с помощью клиента openvpn

В последнее время я борюсь с проблемой, которая сначала казалась довольно тривиальной. Вот моя топология сети

HOST-A (сервер Openvpn) tun0: 10.12.0.1

HOST-B (Openvpn Client - IP-переадресация включена) tun0: 10.12.0.12 eth0: 172.16.201.159

ВЕДУЩИЙ C: eth0: 172.16.201.160

Хост B и хост C являются частью одной локальной сети. Хост A - это сервер openvpn, работающий на AWS.

Чего я хочу добиться?

Изнутри хоста A я хочу пропинговать хост C -> ping 172.16.200.160

Что я делал до сих пор?

Моя первая цель - получить трафик на хост B и подтвердить то же самое через tcpdump. Как только трафик достигает хоста B, я могу использовать iptables, чтобы сделать все остальное.

Хост A (Openvpn Server)

# Added a static route so as to send all traffic for 172.16.201.0/24 subnet via the openvpn client B 
sudo ip route add 172.16.201.0/24 via 10.12.0.12

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.20.1       0.0.0.0         UG    100    0        0 eth0
10.0.20.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.12.0.0       0.0.0.0         255.255.0.0     U     0      0        0 tun0
172.16.201.0    10.12.0.12      255.255.255.0   UG    0      0        0 tun0

Попытка проверить связь с хостом B на его IP-адресе eth0

viky@azure-puppet-server ~ ❯❯❯ ping 172.16.201.159                 ✘ 1 
PING 172.16.201.159 (172.16.201.159) 56(84) bytes of data.

Я могу подтвердить, что пакет отправляется по интерфейсу tun0

viky@azure-puppet-server ~ ❯❯❯ sudo tcpdump -i tun0 icmp -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
10:21:16.363878 IP 10.12.0.1 > 172.16.201.159: ICMP echo request, id 8624, seq 4, length 64
10:21:17.387925 IP 10.12.0.1 > 172.16.201.159: ICMP echo request, id 8624, seq 5, length 64
10:21:18.411906 IP 10.12.0.1 > 172.16.201.159: ICMP echo request, id 8624, seq 6, length 64
10:21:19.435864 IP 10.12.0.1 > 172.16.201.159: ICMP echo request, id 8624, seq 7, length 64

Но я ничего не вижу на хосте B

genuser@ess-monitor-1:~$ sudo tcpdump -i any icmp -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

Но я могу пинговать хост B с хоста A с помощью интерфейса tun0

viky@azure-puppet-server ~ ❯❯❯ ping 10.12.0.12                     ✘ 1 
PING 10.12.0.12 (10.12.0.12) 56(84) bytes of data.
64 bytes from 10.12.0.12: icmp_seq=1 ttl=64 time=43.8 ms
^C
--- 10.12.0.12 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 43.856/43.856/43.856/0.000 ms

Что я делаю не так? Сначала я думал, что это будет так же просто, как добавить статический маршрут, но оказалось, что это большая головная боль.