หลังจากทำการตั้งค่าปกติเพียงแค่ eth0 ฉันกลับมาแล้วเพิ่มการตั้งค่าสำหรับ eth1 เมื่อเพิ่ม eth0 ขึ้นตารางเส้นทางคือ:
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
แต่เมื่อฉันนำ eth1 ขึ้นมาคำสั่งของข้อความสั่งเส้นทางเริ่มต้นจะถูกกำหนดว่าจะใช้อินเตอร์เฟสใด ดังที่แสดงด้านล่างมันเกิดขึ้นกับการเลือกเส้นทาง eth1 ไปยังเกตเวย์ 192.168.1.65
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100
หนึ่งคำสั่งเกตเวย์
ปัญหาแรกอาจเป็นเส้นทางเริ่มต้นพิเศษ 'ผ่าน 192.168.1.65' จะปรากฏขึ้นหากคำจำกัดความของ eth1 ใน / etc / network / interfaces มีคำสั่ง "เกตเวย์ 192.168.1.65" ดังนั้นให้ลบคำสั่งเกตเวย์พิเศษใด ๆ และเด้งกลับอินเตอร์เฟส:
# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
ตั้งค่าตารางเส้นทางใหม่
สร้างตารางเส้นทางใหม่แยกต่างหากที่มีเส้นทางเริ่มต้นที่เหมาะสมสำหรับการรับส่งข้อมูลทั้งหมดที่ไหลออกมาจาก eth1 หมายเลขโต๊ะที่นี่ไม่สำคัญ 101 ไม่ใช่ตารางเส้นทางหลัก ทำสิ่งนี้ด้วยคำสั่ง 'post-up' บนการกำหนดค่า eth1 ใน / etc / network / interfaces เพิ่มเพียงหนึ่งโพสต์ขึ้นบน eth1; ห้ามเพิ่มลงในส่วนใด ๆ ของ eth1: sub-interfaces
post-up ip route add default via 192.168.1.65 dev eth1 table 101
ตีกลับ eth1 ตารางเส้นทางหลักไม่มีการเปลี่ยนแปลงและตาราง 101 จะมีเส้นทางเริ่มต้นผ่าน 192.168.1.65 หาก eth1 ขึ้น
# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101 (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101
default via 192.168.1.65 dev eth1
กฎการกำหนดเส้นทางใหม่
เพิ่มกฎการเราต์เพื่อใช้ตาราง 101 เพื่อเลือกเส้นทางเริ่มต้นสำหรับแพ็กเก็ตซึ่งควรออกไป eth1
# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0: from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default
เพิ่มกฎลงใน/etc/network/interfaces
ไฟล์เช่นกัน:
post-up ip rule add from 192.168.1.64/27 lookup 101
ตอนนี้ให้แน่ใจว่าจะเพิ่มการล้างข้อมูลเพื่อลบเส้นทางและกฎเมื่ออินเทอร์เฟซลง:
post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101
[แก้ไขสำหรับอูบุนตู 16.04+] เช่นเดียวกับที่ระบุที่นี่และจากการทดสอบที่ฉันทำจากความช่วยเหลือนี้ ip route2 ได้เปลี่ยนโครงสร้างของคำสั่ง สำหรับการทำงานของคุณจะมีการปรับเพียงเล็กน้อยที่ต้องทำในการสั่งซื้อวิธีการจุดman ip
up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65
หรือคุณจะจบลงด้วยคำสั่ง ifdown - ifup พร้อมกับข้อความแสดงข้อผิดพลาดคำสั่ง @ifdown (ข้อความมาตรฐานเพื่อบอกว่าอุปกรณ์ต่อพ่วงไม่ได้รับการกำหนดค่าอย่างถูกต้อง) และ @ifup การขาดเส้นทางในตาราง 101