แก้ไขได้ด้วยตัวเอง ดูเหมือนว่ามีข้อมูลน้อยมากเกี่ยวกับสิ่งที่เกี่ยวกับระบบเครือข่ายที่คุณสามารถทำกับ Linux ได้ดังนั้นฉันจึงตัดสินใจจัดทำเอกสารและอธิบายวิธีแก้ไขปัญหาโดยละเอียด นี่คือการตั้งค่าสุดท้ายของฉัน:
- 3 NICs: eth0 (สาย), wlan0 (wifi ในตัว, อ่อนแอ), wlan1 (อะแดปเตอร์ไร้สาย usb usb, สัญญาณแรงกว่า wlan0)
- พวกเขาทั้งหมดในซับเน็ตเดียวแต่ละคนมีที่อยู่ IP ของตัวเอง
- ควรใช้ eth0 สำหรับการรับส่งข้อมูลทั้งขาเข้าและขาออก
- หาก eth0 ล้มเหลวควรใช้ wlan1
- หาก wlan1 ล้มเหลวควรใช้ wlan0
ขั้นตอนแรก : /etc/iproute2/rt_tables
สร้างตารางเส้นทางใหม่สำหรับทุกคนในอินเตอร์เฟซ ลองเรียกพวกมันว่า rt1, rt2 และ rt3
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt1
2 rt2
3 rt3
ขั้นตอนที่สอง : /etc/network/interfaces
การกำหนดค่าเครือข่ายใน นี่คือส่วนหลักและฉันจะพยายามอธิบายให้มากที่สุด:
auto eth0 wlan0
allow-hotplug wlan1
iface lo inet loopback
iface eth0 inet static
address 192.168.178.99
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.99 table rt1
post-up ip route add default via 192.168.178.1 dev eth0 table rt1
post-up ip rule add from 192.168.178.99/32 table rt1
post-up ip rule add to 192.168.178.99/32 table rt1
post-up ip route add default via 192.168.178.1 metric 100 dev eth0
post-down ip rule del from 0/0 to 0/0 table rt1
post-down ip rule del from 0/0 to 0/0 table rt1
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.97
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.97 table rt2
post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
post-up ip rule add from 192.168.178.97/32 table rt2
post-up ip rule add to 192.168.178.97/32 table rt2
post-up ip route add default via 192.168.178.1 metric 102 dev wlan0
post-down ip rule del from 0/0 to 0/0 table rt2
post-down ip rule del from 0/0 to 0/0 table rt2
iface wlan1 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.98
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan1 src 192.168.178.98 table rt3
post-up ip route add default via 192.168.178.1 dev wlan1 table rt3
post-up ip rule add from 192.168.178.98/32 table rt3
post-up ip rule add to 192.168.178.98/32 table rt3
post-up ip route add default via 192.168.178.1 metric 101 dev wlan1
post-down ip rule del from 0/0 to 0/0 table rt3
post-down ip rule del from 0/0 to 0/0 table rt3
หากคุณพิมพ์ip rule show
คุณควรเห็นสิ่งต่อไปนี้:
0: from all lookup local
32756: from all to 192.168.178.98 lookup rt3
32757: from 192.168.178.98 lookup rt3
32758: from all to 192.168.178.99 lookup rt1
32759: from 192.168.178.99 lookup rt1
32762: from all to 192.168.178.97 lookup rt2
32763: from 192.168.178.97 lookup rt2
32766: from all lookup main
32767: from all lookup default
สิ่งนี้บอกเราว่าการรับส่งข้อมูลขาเข้าหรือขาออกจากที่อยู่ IP "192.168.178.99" จะใช้ตารางเส้นทาง rt1 จนถึงตอนนี้ดีมาก แต่การรับส่งข้อมูลที่สร้างขึ้นในเครื่อง (ตัวอย่างเช่นคุณต้องการ ping หรือ ssh จากเครื่องไปยังที่อื่น) ต้องได้รับการดูแลเป็นพิเศษ (ดูเครื่องหมายคำพูดใหญ่ในคำถาม)
บรรทัดการโพสต์สี่บรรทัดแรก/etc/network/interfaces
นั้นตรงไปตรงมาและสามารถพบคำอธิบายได้ทางอินเทอร์เน็ตบรรทัดที่ห้าและโพสต์ล่าสุดเป็นสิ่งที่ทำให้เกิดเวทมนตร์:
post-up ip r add default via 192.168.178.1 metric 100 dev eth0
สังเกตว่าเรายังไม่ได้ระบุตารางเส้นทางสำหรับสายการโพสต์อัพนี้ หากคุณไม่ได้ระบุตารางเส้นทางข้อมูลจะถูกบันทึกไว้ในตารางเส้นทางที่เราเห็นในmain
ip rule show
บรรทัดการโพสต์นี้วางเส้นทางเริ่มต้นในตารางเส้นทาง "หลัก" ที่ใช้สำหรับการรับส่งข้อมูลที่สร้างขึ้นภายในเครื่องซึ่งไม่ตอบสนองต่อการรับส่งข้อมูลขาเข้า (ตัวอย่างเช่น MTA บนเซิร์ฟเวอร์ของคุณพยายามส่งอีเมล)
อินเทอร์เฟซสามทั้งหมดใส่เส้นทางเริ่มต้นในตารางเส้นทางหลักแม้ว่าจะมีตัวชี้วัดที่แตกต่างกัน ลองดูmain
ตารางเส้นทางด้วยip route show
:
default via 192.168.178.1 dev eth0 metric 100
default via 192.168.178.1 dev wlan1 metric 101
default via 192.168.178.1 dev wlan0 metric 102
192.168.178.0/24 dev wlan0 proto kernel scope link src 192.168.178.97
192.168.178.0/24 dev eth0 proto kernel scope link src 192.168.178.99
192.168.178.0/24 dev wlan1 proto kernel scope link src 192.168.178.98
เราจะเห็นว่าตารางเส้นทางหลักมีเส้นทางเริ่มต้นสามเส้นทางแม้ว่าจะมีเมตริกที่แตกต่างกัน ลำดับความสำคัญสูงสุดคือ eth0 จากนั้น wlan1 และ wlan0 เพราะตัวเลขเมตริกที่ต่ำกว่าแสดงว่ามีลำดับความสำคัญสูงกว่า เนื่องจากeth0
มีตัวชี้วัดที่ต่ำที่สุดนี่คือเส้นทางเริ่มต้นที่จะถูกใช้เป็นระยะเวลานานeth0
ขึ้น ถ้าไปลงการจราจรขาออกจะเปลี่ยนไปeth0
wlan1
ด้วยการตั้งค่านี้เราสามารถพิมพ์ping 8.8.8.8
ในเครื่องหนึ่งและifdown eth0
อีกเครื่องหนึ่ง ping
จะยังคงทำงานเพราะเนื่องจากifdown eth0
จะลบเส้นทางเริ่มต้นที่เกี่ยวข้องกับการจราจรขาออกจะเปลี่ยนไปeth0
wlan1
เส้นหลังลงให้แน่ใจว่าตารางเส้นทางที่เกี่ยวข้องถูกลบออกจากฐานข้อมูลนโยบายการกำหนดเส้นทาง ( ip rule show
) เมื่ออินเตอร์เฟสหยุดทำงานเพื่อรักษาความเรียบร้อยทุกอย่าง
ปัญหาที่เหลือคือเมื่อคุณดึงปลั๊กจากeth0
เส้นทางเริ่มต้นสำหรับeth0
ยังคงมีและการรับส่งข้อมูลขาออกล้มเหลว เราต้องการบางสิ่งบางอย่างเพื่อตรวจสอบอินเทอร์เฟซของเราและดำเนินการifdown eth0
หากมีปัญหากับอินเทอร์เฟซ (เช่น NIC ล้มเหลวหรือมีคนดึงปลั๊ก)
ขั้นตอนสุดท้าย : ifplugd
ใส่ นั่นคือภูตที่เฝ้าดูอินเตอร์เฟสและดำเนินการifup/ifdown
ถ้าคุณดึงปลั๊กหรือหากมีปัญหากับการเชื่อมต่อ wifi /etc/default/ifplugd
:
INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"
ขณะนี้คุณสามารถดึงปลั๊กในeth0
การจราจรขาออกจะเปลี่ยนไปและถ้าคุณใส่ด้านหลังเสียบจราจรขาออกจะสลับกลับไปwlan1
เซิร์ฟเวอร์ของคุณจะออนไลน์อยู่ตราบใดที่อินเทอร์เฟซสามตัวนั้นทำงาน สำหรับการเชื่อมต่อกับเซิร์ฟเวอร์ของคุณคุณสามารถใช้ที่อยู่ ip ของ eth0 และหากล้มเหลวนั้นที่อยู่ ip ของ wlan1 หรือ wlan0eth0