Можно ли направить все сообщения на один порт, на другой сетевой интерфейс?

Коротко: Интересно, можно ли маршрутизировать (с помощью iptables), чтобы все сообщения, направленные на / из порта 192.168.1.10 (eth0) 40000, отправлялись на tun0? (VPN)

Дольше: Когда я подключаюсь к своему VPN-серверу, все данные маршрутизируются через сеть tun0, за исключением этого приложения (которое никуда не денется), которое полностью отказывается понимать (плохое программирование). Это приводит к тому, что приложение бьется головой о систему, не выходя из нее ..

Можно ли принудительно направить все данные, которые идут на 192.168.1.10:40000, на tun0 (сетевой интерфейс VPN) и маршрутизировать все входящие данные из tun0: 40000 будут перенаправлены обратно на 192.168.1.10

Обновление: Это результат маршрута IP -4:

*0.0.0.0/1 via 10.128.0.1 dev tun0 
default via 192.168.1.1 dev enp0s3 proto dhcp metric 20100 
10.128.0.0/22 dev tun0 proto kernel scope link src 10.128.2.129 
128.0.0.0/1 via 10.128.0.1 dev tun0 
169.254.0.0/16 dev tun0 scope link metric 1000 
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.173 metric 100 
217.64.xxx.xx via 192.168.1.1 dev enp0s3* 
0
задан 14 December 2019 в 17:51
1 ответ

, Когда я соединяюсь со своим сервером VPN, все данные направляются через tun0 сеть, кроме этого приложения, которое полностью отказывается понимать (плохо программирующий).

Сетевое программирование имеет разделенная на уровни модель , это означает, что автор приложения просто говорит системе соединяться с определенным IP-адресом на определенном порте, он не должен беспокоиться об остальных, с тех пор как достигнуть, тот сокет TCP/IP до операционной системы.

Вы проблема вызывается плохой настройкой маршрутизации. Давайте проводить несколько строк как это:

1.2.3.0/29 dev tun0
1.2.0.0/22 dev tun0 via 1.2.3.4 

первые средства: если крайние левые 29 битов адреса назначения идентичны тем 1.2.3.0 (т.е. от 1.2.3.0 до 1.2.3.7) отправляют пакет непосредственно на tun0. Вторая строка означает, что адреса от 1.2.0.0 до 1.2.3.255, которые не находятся в /29 строка, должны быть отправлены в [1 111]. Ядро знает, как найти 1.2.3.4 от первой строки.

таблицы маршрутизации Windows почти идентичны (они первоначально взяли стек TCP/IP от BSD).

Теперь к Вашей ситуации. У Вас есть две записи маршрутизации:

0.0.0.0/1 via 10.128.0.1 dev tun0 
default via 192.168.1.1 dev enp0s3

, где default ярлык для [1 114] (все адреса). Так: если адрес назначения запускается с [1 115] [до 1 116], он отправляется до [1 117], иначе он отправляется до [1 118].

, Если Вы хотите направить почти весь трафик до [1 119], сначала найдите адрес другой конечной точки туннеля VPN (вероятно ip link, может помочь, но Вы не сказали, что является Вами использующий для Вашего туннеля). Скажем, это 5.5.5.5. tun0 виртуальный интерфейс, который шифрует пакеты, отправленные через него, и отправляет их в другую конечную точку через физический интерфейс. Таким образом, мы должны добавить маршрут, таким образом, пакеты к [1 123] отправляются до [1 124]:

ip route add 5.5.5.5 via 192.168.1.1 dev enp0s3

(Редактирование: после чтения снова Вашей таблицы маршрутизации, это на самом деле уже там в последней строке)

Затем, можно направить оставшийся трафик до [1 125]:

ip route del default
ip route add default via 10.128.0.1 dev tun0

В зависимости от пути Вы устанавливаете свои интерфейсы (и туннель), можно сделать те вещи автоматически, когда интерфейсы повышаются.

TL; DR Просто заменяет 0.0.0.0/1 [1 127], везде, куда Вы помещаете его.

0
ответ дан 6 January 2020 в 09:02

Теги

Похожие вопросы