ฉันสมมติว่าคุณกำลังใช้งาน Linux และยิ่งไปกว่านั้นคุณกำลังใช้การกระจายแบบ RedHat / CentOS Unix อื่น ๆ และดิสทริบิวชันจะต้องใช้ขั้นตอนที่คล้ายกัน - แต่รายละเอียดจะแตกต่างกัน
เริ่มต้นด้วยการทดสอบ (โปรดทราบว่านี่คล้ายกับคำตอบของ @ Peter มากฉันถือว่าต่อไปนี้:
- eno0 คือ isp0 และมีเกตเวย์เริ่มต้นโดยรวม
- eno1 คือ isp1 และมี IP / พิสัย 192.168.1.2/24 พร้อมเกตเวย์ 192.168.1.1
คำสั่งมีดังนี้:
$ echo 200 isp1 >> /etc/iproute2/rt_tables
$ ip rule add from eno1 table isp1
$ ip route add default via 192.168.1.1 dev eno1 table isp1
ไฟร์วอลล์ไม่ได้มีส่วนเกี่ยวข้อง แต่อย่างใด แพ็คเก็ตตอบกลับจะถูกส่งจาก IP ที่ถูกต้องเสมอ - แต่ก่อนหน้านี้มีการส่งผ่านทางอินเตอร์เฟซที่ไม่ถูกต้อง ตอนนี้แพ็กเก็ตเหล่านี้จาก IP ที่ถูกต้องจะถูกส่งผ่านอินเตอร์เฟซที่ถูกต้อง
สมมติว่าคุณทำงานด้านบนได้ในขณะนี้คุณสามารถเปลี่ยนแปลงกฎและเส้นทางได้อย่างถาวร ขึ้นอยู่กับว่าคุณใช้ Unix เวอร์ชั่นใด ก่อนหน้านี้ฉันสมมติว่ามีการกระจาย Linux ที่ใช้ RH / CentOS
$ echo "from eno1 table isp1" > /etc/sysconfig/network-scripts/rule-eno1
$ echo "default via 192.168.1.1 dev eno1 table isp1" > /etc/sysconfig/network-scripts/route-eno1
ทดสอบว่าการเปลี่ยนแปลงเครือข่ายเป็นสิ่งที่ถาวร:
$ ifdown eno1 ; ifup eno1
หากวิธีนี้ใช้ไม่ได้ผลใน RH / CentOS เวอร์ชันใหม่กว่าคุณต้องเลือกหนึ่งในสองตัวเลือก:
- อย่าใช้ค่าเริ่มต้นNetworkManager.service ; ใช้network.serviceแทน ฉันไม่ได้สำรวจขั้นตอนที่แน่นอนที่จำเป็นสำหรับสิ่งนี้ ฉันคิดว่ามันเกี่ยวข้องกับคำสั่งchkconfigหรือsystemctlมาตรฐานเพื่อเปิด / ปิดการใช้งานบริการ
- ติดตั้งแพคเกจ NetworkManager-dispatcher-routing-rules
โดยส่วนตัวฉันชอบติดตั้งกฎเกณฑ์มากขึ้นเพราะเป็นวิธีที่ง่ายกว่าที่สนับสนุนมากขึ้น:
$ yum install NetworkManager-dispatcher-routing-rules
ข้อเสนอแนะที่แข็งแกร่งอีกประการหนึ่งคือการเปิดใช้งานการกรอง arp เพื่อป้องกันปัญหาอื่น ๆ ที่เกี่ยวข้องกับการกำหนดค่าเครือข่ายคู่ ด้วย RH / CentOS ให้เพิ่มเนื้อหาต่อไปนี้ในไฟล์ /etc/sysctl.conf:
net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1