У меня есть соединение 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?