В последнее время я борюсь с проблемой, которая сначала казалась довольно тривиальной. Вот моя топология сети
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
Что я делаю не так? Сначала я думал, что это будет так же просто, как добавить статический маршрут, но оказалось, что это большая головная боль.