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

Маршрутизация через VPN-туннель с машинами Linux

У меня есть две машины Linux, подключенные к VPN-туннелю:

VPN Client <-------> VPN Server
10.74.1.10/24         10.74.1.1/24 

У каждого есть сетевые адаптеры для подключения к собственной сети:

---------> VPN Client <-------------------> VPN Server <------
10.37.0.205/24   10.74.1.10/24      10.74.1.1/24    10.74.0.1/24

И, конечно же, в каждой сети у меня разные компьютеры Linux (Linux A, Linux B и т. Д.):

Linux A  <----> VPN Client <-----> VPN Server <----> Linux B

Из VPN Client, Я могу пинговать VPN Server и компьютеры как Linux B.

Хотя из Linux A, Я могу пинговать оба VPN Client машинные интерфейсы (10.32.0.205 и 10.74.1.10), оказывается Я не могу пинговать VPN Server с адресом 10.74.1.1 или к любому компьютеру в сети B.

Я пытался добавить новый маршрут на Linux A, но я получаю это:

$ sudo ip route add 10.74.1.1 via 10.74.1.10 dev eth0
RTNETLINK answers: Network is unreachable

$ sudo ip route add 10.74.1.1 via 10.37.0.205 dev eth0
RTNETLINK answers: Network is unreachable

Как я могу заставить это работать? Может что-то настроить на VPN Client?

РЕДАКТИРОВАТЬ:

Таблица маршрутов на VPN Client это:

default via 10.37.0.1 dev eth0 
10.37.0.0/24 dev eth0  proto kernel  scope link  src 10.37.0.205 
10.74.0.0/16 via 10.74.1.9 dev tun0 
10.74.1.0/24 via 10.74.1.9 dev tun0 
10.74.1.9 dev tun0  proto kernel  scope link  src 10.74.1.10 
128.0.0.0/1 via 10.74.1.9 dev tun0 

Таблица маршрутов на Linux A:

default via 10.37.1.1 dev eth0 
10.37.1.0/24 dev eth0  proto kernel  scope link  src 10.37.1.217 

Также я активировал переадресацию IP на VPN Client

$ sudo sysctl -w net.ipv4.conf.all.forwarding=1

РЕДАКТИРОВАТЬ 2:

Пакетная фильтрация включена VPN Client:

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

Какой тип VPN вы используете?

Похоже на ваш VPN Client должен ли трафик NAT от Linux A на ваш VPN Server & Linux B. И / или: ваш Linux B нет пути обратно к вашему VPN Client.

Если вы добавляете маршрут, то следующий переход должен быть локальным для ссылки. Linux A может напрямую подключаться только к адресам 10.37.1.0/24. Но

ip route add 10.74.1.1 via 10.74.1.10 dev eth0

говорит: отправить пакет на 10.74.1.1 на локальный хост 10.74.1.10. Поскольку 10.74.1.10 не является локальным для ссылки (или: не настроен как таковой), вы получаете сообщение об ошибке Network is unreachable.

Следующим шагом должен быть локальный адрес VPN Client:

ip route add 10.74.1.1 via 10.37.0.205 dev eth0

Я изо всех сил пытался найти простое решение проблемы, похожей на эту, и обнаружил, что sshuttle является самым простым, по крайней мере, временным решением, как это было для меня.

Одна машина linux имеет доступ к VPN, а с sshuttle, запущенным на другой машине, я получил доступ к этой VPN.

Кроме того, маршрутизацию можно легко отфильтровать, используя блок cidr в качестве последнего параметра. Это повысило удобство использования второй машины, поскольку не все вызовы поступают на машину с поддержкой VPN.

sshuttle --dns -r user@192.168.86.100 10.208.0.0/16

Ссылка на сайт: https://github.com/sshuttle/sshuttle

Установка необходима только на клиенте. SSH-доступ к машине с поддержкой VPN - это все, что для этого требуется.