ตอนนี้ฉันได้ติดตั้ง PPTP VPN ไว้ใน ubuntu VPS ระยะไกลแล้ว ฉันต้องการให้แอพพลิเคชั่นบางตัวใช้ VPN เพื่อเข้าถึงอินเทอร์เน็ต (rtorrent, irssi และอื่น ๆ ) ปัจจุบันมีการตั้งค่าดังนี้:
eth0 การเชื่อมโยง encap: อีเธอร์เน็ต HWaddr 00: 16: 3e: 94: 38: ce inet addr: 66.xxx.xxx.xxx Bcast: 66.xxx.xxx.xxx รูปแบบ: 255.255.255.0
eth1 ลิงก์ encap: อีเทอร์เน็ต HWaddr 00: 16: 3e: d7: 58: a1 inet addr: 10.2.0.111 Bcast: 10.255.255.255 Mask: 255.0.0.0
lo Link encap: Local Loopback inet addr: 127.0.0.1 รูปแบบ: 255.0.0.0
ppp0 Link encap: โปรโตคอลแบบจุดต่อจุด inet addr: 192.168.10.244 P-t-P: 192.168.9.1 รูปแบบ: 255.255.255.255
โดยพื้นฐานแล้ววิธีการที่ฉันเห็นปัญหานี้เป็นแบบนี้
เมื่อฉันวิ่ง
curl --interface eth0 checkip.dyndns.com
ฉันเข้าใจ
<html><head><title>Current IP Check</title></head><body>Current IP Address: 66.xxx.xxx.xxx</body></html>
และเมื่อฉันวิ่ง
curl --interface ppp0 checkip.dyndns.com
ฉันเข้าใจ
<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>
ซึ่งถูกต้อง
อย่างไรก็ตามเมื่อฉันวิ่ง
curl --interface 192.168.10.244 checkip.dyndns.com
มันหมดเวลาแล้วและฉันก็ไม่ได้อะไรเลย ซึ่งดูเหมือนจะไม่สมเหตุสมผลใด ๆ เนื่องจาก 192.168.10.244 เป็นที่อยู่ IP ของ ppp0 และดูเหมือนว่าฉันไม่ควรแตกต่างจากคำสั่งด้านบน ฉันพลาดอะไรไปรึเปล่า? ถ้าฉันสามารถทำให้มันทำงานเป็นม้วนได้ฉันจะสามารถทำให้มันทำงานใน rtorrent และ irssi ได้ตามที่ฉันต้องการ curl นั้นง่ายกว่าที่จะทดสอบสิ่งนี้ มีจุดเริ่มต้นที่ดีสำหรับการแก้ปัญหานี้หรือไม่?
แก้ไข: ซ่อมมัน! นี่คือวิธีที่ฉันทำ
ก่อนอื่นฉันสร้างตารางเส้นทางใหม่:
# echo "200 vpn" >> /etc/iproute2/rt_tables
จากนั้นฉันสร้างกฎสำหรับคำขอที่มาจากที่อยู่ IP ppp0 ของฉันเพื่อค้นหาจากตารางใหม่นั้น
# ip rule add from 192.168.10.244 table 200
จากนั้นฉันสร้างกฎในตารางนั้นเพื่อใช้ ppp0
# ip route add default dev ppp0 table 200
มันทำงานได้อย่างสมบูรณ์แบบ! ตอนนี้เมื่อฉันพยายามคำสั่ง curl ที่ล้มเหลวก่อนหน้านี้:
# curl --interface 192.168.10.244 checkip.dyndns.com
<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>