У меня есть компьютер Debian в моей домашней сети. Я использую службу динамического DNS, чтобы я мог подключиться к ПК через Интернет из других источников. Я также использую переадресацию портов на маршрутизаторе, поэтому я сопоставляю (скажем) 2222 по динамическому адресу с 22 на ПК.

Это все работает нормально, пока я не запустил клиент openvpn на ПК. Тогда я не могу установить соединение SSH.

Тем не менее, я могу установить SSH-соединение с любого другого ПК в домашней сети напрямую на ПК с Debian. Это просто порт роутера, который не работает.

Почему компьютер видит соединение, идущее от маршрутизатора к порту 22, иначе, чем при попытке прямого подключения к порту 22? И почему не работает связь? Идеи приветствуются!

1 ответ1

1

Маршруты

Большая часть программного обеспечения VPN достаточно умна, чтобы настраивать маршруты, которые игнорируют трафик локальной сети (LAN), поэтому SSH работает с других компьютеров вашей домашней сети.

Однако весь интернет-трафик по-прежнему направляется через интерфейс VPN по умолчанию. Это включает в себя соединения через переадресацию портов. Таким образом, трафик SSH поступает через ваш маршрутизатор, но затем получает ответ через VPN (что портит его, поскольку сервер VPN имеет другой IP-адрес).

Один из способов решить эту проблему - настроить некоторые правила брандмауэра iptables на вашем компьютере с Debian для отправки трафика SSH через обычный сетевой интерфейс, а не через интерфейс VPN.


пример

Я попытался адаптировать этот ответ к этой ситуации (предполагая, что ваш домашний маршрутизатор - 192.168.0.1, а ваш компьютер Debian - 192.168.0.20):

Отредактируйте /etc/iproute2/rt_tables и добавьте новую таблицу, добавив следующую строку:

200 eth-route

Затем вам нужно настроить новую таблицу маршрутизации с именем eth-route на шлюз по умолчанию и создать правила для условной отправки трафика в эту таблицу.

# Populate secondary routing table
ip route add default via 192.168.0.1 dev eth0 table eth-route
# Anything with this fwmark will use the secondary routing table
ip rule add fwmark 0x1 table eth-route
# Mark these packets so that iproute can route it through eth-route
iptables -A OUTPUT -t mangle -o tun0 -p tcp --dport 22 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o eth0 -p tcp --dport 22 -j SNAT --to 192.168.0.20

Чтобы сделать это автоматическим, нужно либо добавить эти команды в конец /etc/rc.local либо заставить openvpn делать это при запуске.

Скрестить пальцы...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .