ฉันมีการเชื่อมต่อ openvpn และฉันต้องการใช้งานได้กับแอปพลิเคชั่นเดียวเท่านั้นแอปนี้ใช้พอร์ตในเครื่องที่เฉพาะเจาะจง ฉันใช้ เส้นทาง 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 ปกติของฉัน, อันที่สองคือการเชื่อมต่อ 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
แต่ฉันได้รับ ip0 eth0 ปกติของฉันไม่ใช่ 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 เป็นอินเตอร์เฟสอินเตอร์เฟส tun0 ของฉัน (หนึ่ง openvpn ใช้) จากนั้นคำสั่ง curl หมดเวลา
ฉันจะสร้างทราฟฟิกทั้งหมดที่มาจากพอร์ตท้องถิ่น 1033 ผ่านอินเตอร์เฟส tun0 ได้อย่างไร