Хорошо, у меня есть сервер OpenVPN A, на котором размещается диапазон 10.8.0.0/24, и сервер OpenVPN B, на котором размещается 10.7.0.0/24. Сервер A также является клиентом сервера B.
Это конфигурация адаптеров tun обоих серверов.
OpenVPN Сервер A
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
inet 10.7.0.6 peer 10.7.0.5/32 scope global tun1
Сервер OpenVPN B
inet 10.7.0.1 peer 10.7.0.2/32 scope global tun0
Клиенты OpenVPN A направляют весь свой трафик через Сервер A и выводят через его интерфейс WAN. Однако один диапазон IP-адресов 192.168.0.0/24 может быть достигнут только через VPN сервера B. Я настроил маршрут, который передает все адреса 192.168.0.0/24 через интерфейс tun, который соединяет сервер A с сервером B.
ip route add 192.168.0.0/24 dev tun1
Я могу пинговать 192.168.0.0/24 нормально на сервере A НО Я не могу пинговать или достичь этого диапазона, когда я нахожусь на клиенте OpenVPN сервера A. Я могу пинговать IP-адрес tun 10.7.0.6, но не 192.168.0.0/24. Может ли кто-нибудь пролить свет на то, почему это происходит?
Я построил виртуальную сеть и серию виртуальных машин, показанных на этом изображении, чтобы упростить визуализацию этой проблемы.
В каждой системе, которая должна пересылать пакеты, должна быть включена пересылка ipv4:
# sysctl net.ipv4.ip_forward=1
Конфигурация openvpn в моей тестовой сети упрощена. Я использую openvpn без аутентификации / шифрования, запускаю его из командной строки, чтобы обеспечить простой туннель между машинами «openvpn-a» и «openvpn-b».
openvpn-a:
root@openvpn-a# openvpn --remote openvpn-b --dev tun1
openvpn-b:
root@openvpn-b# openvpn --remote openvpn-a --dev tun1
Я столкнулся с той же проблемой, которую вы описываете, пытаясь пропинговать openvpn-b (192.168.20.1) с client-a (192.168.10.10).
Это произошло из-за того, что пакет был перенаправлен openvpn-a и прибыл на openvpn-b с исходным адресом, для которого openvpn-b не имел маршрута.
К решению этой проблемы можно подойти несколькими способами ... один - добавить маршрут к стороне a сети на openvpn-b через туннельное устройство openvpn-a:
openvpn-b:
root@openvpn-b# ip route add 192.168.10.0/24 via 10.8.0.1
Другой - настроить маршрут по умолчанию openvpn-b через туннельное устройство openvpn-a:
openvpnb-b:
root@openvpn-b# ip route add default via 10.8.0.1
И еще один - настроить NAT на туннельном устройстве на openvpn-a:
openvpn-a:
root@openvpn-a# iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
Wireshark и / или tcpdump могут быть очень полезны при диагностике этой проблемы. Как можно увидеть на туннельном устройстве openvpn-b, когда приходит пакет и нет маршрута к сети адресов источника:
root@openvpn-b# tcpdump -n -i tun1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun1, link-type RAW (Raw IP), capture size 65535 bytes
15:45:10.973251 IP 192.168.10.10 > 192.168.20.1: ICMP echo request, id 2550, seq 1, length 64
^C
1 packet captured
1 packet received by filter
0 packets dropped by kernel