Я попытался запустить OpenVPN в качестве клиента на моем VPS, но, поскольку трафик маршрутизируется, я больше не могу подключиться к VPS через SSH. Я попробовал следующий подход, но он не сработал

ip rule add table 128 from 50.1.2.3
ip route add table 128 to 50.1.2.0/24 dev tun0
ip route add table 128 default via 10.10.10.5

Я получил шлюз по умолчанию от

root@server:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.10.10.1      10.10.10.5      255.255.255.255 UGH   0      0        0 tun0
10.10.10.5      0.0.0.0         255.255.255.255 UH    0      0        0 tun0
0.0.0.0         10.10.10.5      128.0.0.0       UG    0      0        0 tun0
128.0.0.0       10.10.10.5      128.0.0.0       UG    0      0        0 tun0
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0

Какую часть я делаю не так?

1 ответ1

1

Проблема заключается в том, что шлюз по умолчанию изменяется OpenVPN, и это нарушает ваше текущее соединение SSH, если вы не настроили соответствующие маршруты перед запуском OpenVPN.

Для решения, которое использует iptables и ip (iproute2), предполагается, что интерфейсом шлюза по умолчанию перед запуском OpenVPN является "eth0". Идея состоит в том, чтобы при установлении соединения с eth0, даже если eth0 больше не является интерфейсом шлюза по умолчанию, ответные пакеты для соединения снова возвращаются на eth0.

Для ясности используйте ниже различные числа, хотя одно и то же число можно использовать для всех:

# set "connection" mark of connection from eth0 when first packet of connection arrives
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
sudo ip rule add fwmark 4321 table 3412

В некоторых версиях Linux необходимо добавить "через" к записи таблицы маршрутизации:

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 via 12.345.67.89 table 3412

где "12.345.67.89" - это оригинальный шлюз без VPN.

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