У мене є з'єднання 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?