Это очень простая вещь для работы в сети. :Если вы хотите соединить разные сегменты локальной сети, вам понадобится маршрутизатор . Вам не нужен NAT, вам не нужен iptables
, вы просто маршрутизируете, просто и понятно.
По какой-то причине люди думают, что для маршрутизации нужен как минимум NAT или iptables
, и в Интернете полно советов на этот счет. Это на самом деле не нужно, и моя любимая мозоль.
Все, что вам нужно сделать, это
1 )Включить переадресацию на сервер #2. Это уже было описано (добавить файл в /etc/sysctl.d/
, перезагрузиться и посмотреть, отображается ли cat /proc/sys/net/ipv4/ip_forward
1
, или включить его напрямую с помощью echo 1 > /proc/sys/net/ipv4/ip_forward
).
2)Установите маршрут для всех хостов, которые хотят использовать шлюз . Это то, что большинство людей забывают. Итак, на сервере #1,вам нужно что-то вроде
ip route add 10.8.0.0/24 dev enp0s17 via 192.168.56.120
ip route add 10.0.4.0/24 dev enp0s17 via 192.168.56.120
и то же самое на всех других хостах в LAN A и B, которые хотят получить доступ к LAN C и D. На сервере #3 (и всех других хостах, к которым он относится ), вам нужно
ip route add 192.168.56.0/24 dev tun0 via 10.8.0.1
Это говорит каждому хосту, что когда он хочет получить доступ к удаленной локальной сети, он должен пройти через сервер #2 с соответствующим IP-адресом сервера #2 в локальной локальной сети.
Вы можете проверить, что маршрутизация работает с ip route get a.b.c.d
на сервере #1 и сервере #3. Теперь проверьте с помощью ping
. Если что-то по-прежнему не так, выполните отладку с помощью tcpdump
. Если на пути стоит брандмауэр, отключите его при необходимости.
Когда все заработает, используйте какой-либо способ сделать маршруты постоянными, например, распределите их по DHCP или добавьте в подходящий файл конфигурации.