เปลี่ยนเส้นทางเริ่มต้นโดยไม่มีผลต่อการเชื่อมต่อ TCP ที่มีอยู่


3

สมมติว่าฉันมีที่อยู่เครือข่ายสาธารณะสองแห่งบนเซิร์ฟเวอร์ของฉัน: หนึ่ง NAT ผ่าน ISP (192.168.99.0/24) และ VPN ผ่าน ISP อื่น (192.168.1.0/24) ที่แตกต่างกันกำหนดค่าเส้นทางเส้นทางต่อโฮสต์ไป เซิร์ฟเวอร์ VPN ผ่าน ISP ของฉัน

นี่คือตารางเส้นทางเริ่มต้นของฉัน ฉันกำลังกำหนดเส้นทางผ่าน ISP ของฉันในซับเน็ต 192.168.99.0/24

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.99.1    0.0.0.0         UG    0      0        0 eth1
55.66.77.88     192.168.99.1    255.255.255.255 UGH   0      0        0 eth1
192.168.99.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 tap0

ตอนนี้ฉันต้องการเชื่อมต่อ TCP ใหม่เพื่อเปลี่ยนเป็น 192.168.1.0/24 ของฉันดังนั้นฉันพิมพ์ต่อไปนี้:

$ route add -net 0.0.0.0 gw 192.168.1.1 dev tap0

เมื่อฉันทำเช่นนี้จะทำให้การเชื่อมต่อ TCP ที่ยาวนานมานานบางอย่างค้าง มีวิธีให้ฉันเปลี่ยนอินเทอร์เฟซเริ่มต้นอย่างปลอดภัยสำหรับการเชื่อมต่อใหม่หรือไม่ขณะที่อนุญาตให้การเชื่อมต่อ TCP ที่มีอยู่ใช้เส้นทางเก่า

ฉันโอเคกับโซลูชันที่ใช้งานได้เฉพาะกับการเชื่อมต่อ TCP ที่กำหนดไว้เท่านั้นและฉันไม่สนใจว่ามันจะเป็นอย่างไร ตัวอย่างเช่นหากมีวิธีการเพิ่มกฎ iptables ชั่วคราวสำหรับการเชื่อมต่อที่มีอยู่เพื่อบังคับให้พวกเขาผ่านเส้นทางเก่า แต่จะต้องมี บาง วิธีทำสิ่งนี้

แก้ไข: เพียงแค่ทราบเกี่ยวกับ "เส้นทางเพิ่ม - โฮสต์ ... " ง่าย ๆ สำหรับการเชื่อมต่อที่มีอยู่: วิธีการแก้ปัญหานี้จะทำงานถ้าฉันสบายดีกับออกจากเซ็ตย่อยของ IP บนอินเทอร์เฟซเก่า อย่างไรก็ตามในแอปพลิเคชันของฉันสิ่งนี้ไม่ได้แก้ปัญหาของฉันเพราะฉันต้องการอนุญาตให้การเชื่อมต่อใหม่เข้ามาในอินเทอร์เฟซใหม่แม้ว่าพวกเขาจะมีแหล่ง IP เดียวกัน ตอนนี้ฉันกำลังมองหาโดยใช้คำสั่ง "เส้นทาง IP" เพื่อตั้งค่ากฎการกำหนดเส้นทางตามแหล่งที่มา


คุณควรแก้ไขอย่างถูกต้องตลอดไปและใช้การกำหนดเส้นทางตามนโยบาย (source)
David Schwartz

@DavidSchwartz ยอดเยี่ยม! นี่คือคำตอบที่ฉันต้องการ ฉันไม่ทราบด้วยซ้ำว่ามีแนวคิดเช่นนี้จริง ๆ แล้วฉันควรมองไปที่ "เส้นทาง ip" มากกว่า "เส้นทางธรรมดา" - ฉันลืมเรื่องนี้ไปโดยสิ้นเชิง หากคุณตอบคำถามอย่างเป็นทางการด้วยวิธีการเปิดใช้งานการกำหนดเส้นทางตามแหล่งที่มาหรือเฉพาะเจาะจงมากขึ้นในประเภทของคำสั่ง ip ที่สามารถสร้างตารางเส้นทางตามแหล่งที่มาง่ายฉันยินดีที่จะตอบ
Patrick Horn

คำตอบ:


1

คำสั่งต่อไปนี้จะตรวจสอบการเชื่อมต่อ tcp ที่เปิดอยู่และแสดงรายการปลายทางที่อยู่นอกเครือข่ายท้องถิ่น:

$ netstat -4ntu | tail -n +3 | cut -c45-65 | cut -d: -f1 | grep -v '192.168.99' | grep -v '192.168.1'
214.236.220.101
63.171.235.16
174.63.61.132
159.47.216.178
62.59.197.29
139.47.218.150
56.4.17.22
204.63.49.5
155.9.79.196
144.31.207.66

ดังนั้นเราแค่ต้องวนซ้ำในรายการนี้และใส่เส้นทางเฉพาะไปยังเราเตอร์หลักก่อนที่จะเปลี่ยนเส้นทางเริ่มต้น:

for i in $(netstat -4nt | tail -n +3 | cut -c45-65 | cut -d: -f1 |grep -v '192\.168\.99' | grep -v '192\.168\.1') ; do echo route add -host $i gw 192.168.1.99; done

(ฉันได้ทิ้งคำสั่ง "echo" ไว้ที่นั่นเพื่อที่คุณจะได้เห็นว่ามันทำอะไรคุณสามารถลบมันออกเมื่อคุณต้องการทำมันจริงๆ

จากนั้นเปลี่ยนเส้นทางเริ่มต้นของคุณ:

$ route add -net 0.0.0.0 gw 192.168.1.1 dev tap0

เนื่องจากเส้นทางที่เพิ่มนั้นมีความเฉพาะเจาะจงมากกว่าเส้นทางเหล่านั้นจึงจะถูกเลือกใช้เป็นเส้นทางเริ่มต้น เห็นได้ชัดว่าคุณสามารถใส่สิ่งนี้ไว้ในสคริปต์เพื่อให้ง่ายขึ้น


โซลูชันตารางเส้นทาง คงจะ ทำงานได้ถ้าฉันสบายดีโดยปล่อยให้ส่วนย่อยของ IP บนอินเทอร์เฟซเก่า อย่างไรก็ตามในแอปพลิเคชันของฉันสิ่งนี้ไม่ได้แก้ปัญหาของฉันเพราะฉันต้องการอนุญาตให้การเชื่อมต่อใหม่เข้ามาในอินเทอร์เฟซใหม่แม้ว่าพวกเขาจะมีแหล่ง IP เดียวกันนอกจากนี้ฉันถามคำถามนี้บางส่วนเพราะฉันหวังว่า ของวิธีการน้ำมันดิบน้อย
Patrick Horn

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