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 (по одному за раз), я нашел Google:

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, а не IP-соединение openvpn.

Если я попробую эти правила (также установите 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 - это мой ip интерфейса tun0 (который использует openvpn), затем команда curl истекает.

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

1 ответ1

1

Вы можете использовать сетевое пространство имен linux, для этого, я думаю, вы можете добавить интерфейс tun в другое пространство имен и запустить свое приложение в этом пространстве имен. Вот несколько примеров, как это использовать.

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