ทำให้แอปพลิเคชันใช้อินเทอร์เฟซเครือข่ายเฉพาะ


2

ฉันมีการเชื่อมต่อ 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 ได้อย่างไร


คุณช่วยให้ชัดเจนว่าแอปพลิเคชันของคุณคืออะไรและมันทำอะไรกับพอร์ต 1033 มีการฟังอยู่หรือไม่ (เช่นเป็นเซิร์ฟเวอร์) หรือเชื่อมต่อกับพอร์ตนั้นในบางสถานที่ห่างไกล (เป็นลูกค้า)
André Fernandes

คำตอบ:


1

คุณสามารถใช้เนมสเปซเครือข่าย linux สำหรับสิ่งนั้นได้ ฉันคิดว่าคุณสามารถเพิ่ม tun interface เข้ากับเนมสเปซอื่นและรันแอพของคุณในเนมสเปซนั้น นี่คือบางส่วน ตัวอย่าง วิธีใช้สิ่งนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.