Зробіть програму використовувати специфічний мережевий інтерфейс


2

У мене є з'єднання openvpn, і мені потрібно, щоб він працював лише для однієї програми, цей додаток використовує певний локальний порт. Я використовував route-nopull у своєму конфігураційному файлі openvpn, а потім:

ip route add default via {P-t-P-IP} dev tun0 table 10;
ip rule add from {tun0-inet addres} table 10;

Використовуючи curl для тестування, я спробував.

curl http://icanhazip.com;
curl --interface tun0 http://icanhazip.com;

Перший дає мій звичайний ip, другий - ip-з'єднання openvpn, так що, здається, працює добре.

Тепер у мене виникають проблеми з використанням конкретного додатка для використання інтерфейсу tun0. Додаток використовує локальний порт 1033 для здійснення деяких веб-запитів. Я спробував ці правила iptables (по черзі), і я виявив googling:

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1033 -j DROP
iptables -A OUTPUT -o tun0 -p tcp -m tcp --sport 1033 -j ACCEPT

iptables -A PREROUTING -p tcp --sport 1033 -i tun0

iptables -A PREROUTING -i tun0 -p tcp -m tcp --sport 1033

iptables -A PREROUTING -i tun0 -t mangle -p tcp --sport 1033 -j MARK --set-mark 1

Потім я пройшов цей тест:

curl --local-port 1033 http://icanhazip.com

Але я отримую нормальний eth0 ip, а не openvpn з'єднання ip.

Якщо я спробую ці правила (я також встановив ipv4_forward до 1):

iptables -t nat -A POSTROUTING -p tcp --sport 1033 -j SNAT --to-source 10.10.10.2;
iptables -t nat -A POSTROUTING -p udp --sport 1033 -j SNAT --to-source 10.10.10.2;

10.10.10.2 - мій інтерфейс tun0 ip (той, який використовується openvpn), тоді команда curl відключається.

Як я можу змусити весь трафік, який з локального порту 1033 проходить через інтерфейс tun0?


Чи можете ви уточнити, що таке ваша програма та що вона робить з портом 1033? Це слухання на ньому (тобто це сервер) або підключення до цього порту в якомусь віддаленому місці (як клієнт)?
Андре Фернандес

Відповіді:


1

Ви можете використовувати простір імен мережі Linux для цього, я думаю, ви можете додати інтерфейс tun до іншого простору імен і запустити свою програму в цьому просторі імен. ось деякий приклад, як це використовувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.