openvpn 연결이 있고 하나의 응용 프로그램에서만 작동하려면이 응용 프로그램이 특정 로컬 포트를 사용합니다. openvpn 구성 파일에서 route-nopull 을 사용한 다음 :
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를 제공하고 두 번째는 openvpn 연결 ip를 제공하므로 제대로 작동하는 것 같습니다.
이제 특정 앱에서 tun0 인터페이스를 사용하는 데 문제가 있습니다. 앱은 로컬 포트 1033을 사용하여 일부 웹 요청을합니다. 나는이 iptables 규칙 (한 번에 하나씩)을 시도하여 인터넷 검색을 찾았습니다.
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
그러나 openvpn 연결 ip가 아닌 정상적인 eth0 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을 사용하여 무엇을하고 있는지 명확히 할 수 있습니까? 서버에서 수신 대기 중이거나 원격 위치 (클라이언트로서)의 해당 포트에 연결되어 있습니까?
—
André Fernandes