ผูกซอฟต์แวร์เข้ากับอินเทอร์เฟซเครือข่ายต่าง ๆ


37

ฉันมีอินเตอร์เฟซเครือข่ายที่แตกต่างกันสองตัวเชื่อมต่อกับ 2 เครือข่าย หนึ่งคือ eth0 และอีกอันหนึ่งเป็น wlan0 ฉันจะบอกให้ซอฟต์แวร์ใช้เฉพาะส่วนต่อประสานที่เฉพาะเจาะจงได้อย่างไร

โดยทั่วไปฉันต้องการให้ Firefox ใช้ eth0 เพราะเป็นเครือข่าย LAN ของมหาวิทยาลัยและฉันต้องไปที่ไซต์อินทราเน็ตส่วนอีกอันคือเครือข่าย wifi ที่เปิดไปยังอินเทอร์เน็ตและฉันต้องการผูกไว้กับ Chrome

ฉันทำงานและต้องใช้อินทราเน็ต ดังนั้น eth0 เป็นตัวเลือกของฉัน แต่ eth0 เป็นอินทราเน็ตที่ไม่ต้องเชื่อมต่ออินเทอร์เน็ต (ชัด ๆ ) เนื่องจากฉันต้องการเชื่อมต่ออินเทอร์เน็ตฉันเชื่อมต่อกับ wlan0 (มหาวิทยาลัย wifi สำหรับนักเรียน)

ปัญหาคือถ้าฉันทั้งสองเชื่อมต่อบางครั้งเบราว์เซอร์มองหา www.stackoverflow.com โดยใช้ eth0 ดังนั้นฉันต้องการมอบหมายให้เบราว์เซอร์ใช้เฉพาะส่วนต่อประสานที่เฉพาะเจาะจง


การกำหนดเส้นทางไม่ใช่ทางออกที่ดีกว่าสำหรับปัญหาของคุณใช่ไหม ฉันหมายถึงว่าการเชื่อมต่อกับ ubuntu.stackexchange.com ควรใช้อินเทอร์เฟซเดียวกันจากโปรแกรมใด ๆ
Javier Rivera

คำตอบ:


23

คุณไม่สามารถผูกซอฟต์แวร์ไคลเอ็นต์กับอินเทอร์เฟซเครือข่ายที่เฉพาะเจาะจง แต่คุณสามารถบอกเคอร์เนลว่าคุณต้องการใช้เพียงหนึ่งเครือข่ายอินเทอร์เฟซสำหรับบางที่อยู่ IP และอีกหนึ่งสำหรับทุกสิ่งอื่น นี้เรียกว่า "เส้นทาง" และสามารถกำหนดค่าการใช้คำสั่ง และ/sbin/route/sbin/ip

ถ้าผมอ่านคำถามของคุณอย่างถูกต้องคุณต้องการที่จะเชื่อมต่อไปยังที่อยู่ IP อินทราเน็ตใช้อินเตอร์เฟซและต่ออินเทอร์เน็ตโดยใช้อินเตอร์เฟซeth0 wlan0

หากคุณเรียกใช้คำสั่งip route listคุณควรเห็นผลลัพธ์เช่นต่อไปนี้ (ตัวเลขจะแตกต่างกันและคุณสามารถมีบรรทัดเพิ่มเติมได้):

$ ip route list
10.60.44.0/25 dev eth0  proto kernel  scope link  src 10.60.44.39  metric 1 
192.168.80.0/21 dev wlan0  proto kernel  scope link  src 192.168.84.122  metric 2 
[...]
default via 10.60.44.1 dev eth0  proto static 

สองบรรทัดแรกบอกคุณเกี่ยวกับเครือข่ายที่เชื่อมต่อกับอินเทอร์เฟซeth0และwlan0: การรับส่งข้อมูลเครือข่ายที่ส่งตรงไปยังคอมพิวเตอร์บนเครือข่ายเหล่านั้นจะถูกส่งโดยตรงไปยังพวกเขาผ่านอินเทอร์เฟซที่เกี่ยวข้อง

บรรทัดสุดท้ายจะบอกคุณว่า "เส้นทางเริ่มต้น" คืออะไร: หากคอมพิวเตอร์ของคุณต้องการพูดคุยกับคอมพิวเตอร์บนเครือข่ายที่ไม่ได้เชื่อมต่อกับ (เช่นเซิร์ฟเวอร์ stackoverflow.com) มันจะกำหนดเส้นทางการรับส่งข้อมูลeth0ผ่านโฮสต์10.60.44.1( เรียกว่า "เกตเวย์เริ่มต้น")

ดังนั้นในการกำหนดเส้นทางทราฟฟิกผ่านอินเทอร์เน็ตwlan0คุณควรตรวจสอบให้แน่ใจว่าบรรทัดสุดท้ายในip route listเอาต์พุตอ่านดังนี้:

default via A.B.C.D dev wlan0 proto static

ที่A.B.C.Dอยู่ IP ของเกตเวย์บน LAN ไร้สายอยู่ที่ไหน หากเอาต์พุตไม่มี "dev wlan0" คุณสามารถเปลี่ยนได้ด้วยคำสั่ง:

sudo ip route change to default dev wlan0 via A.B.C.D

คุณสามารถหาข้อมูลที่ถูกต้องA.B.C.Dสำหรับwlan0ในสองวิธี

  1. ค้นหาในไดเรกทอรี/var/lib/dhcp3/: คุณควรค้นหาdhclient-...-wlan0.leaseไฟล์บาง ไฟล์ เปิดรายการล่าสุดและค้นหาบรรทัดที่มีสตริงoption routerอยู่: ส่วนที่เหลือของบรรทัดจะบอกที่อยู่ IP ให้คุณA.B.C.Dทราบ

  2. สอบถามผู้ดูแลเครือข่ายท้องถิ่นของคุณ (อาจเป็นสิ่งที่ดีที่สุดที่ควรทำ)

ด้วยการกำหนดค่านี้คุณควรจะสามารถ:

  • ท่องอินเทอร์เน็ตผ่าน wlan0
  • ดูอินทราเน็ตของคุณผ่านeth0, ที่จัดไว้ให้มันอยู่ในเครือข่ายเดียว

หากอินทราเน็ตของคุณครอบคลุมหลายเครือข่ายคุณจะต้องเพิ่มเส้นทางสำหรับพวกเขา - และนี่เป็นสิ่งที่คุณต้องมีปฏิสัมพันธ์กับผู้ดูแลระบบเครือข่ายท้องถิ่น :-)


เพิ่งอยากรู้อยากเห็น: ถ้าฉันต้องการผูก DNS (เพื่อรวมโดเมนย่อย) มากกว่าที่อยู่ IP?
dierre

1
@dierre ในระยะสั้น: คุณทำไม่ได้การกำหนดเส้นทางจะขึ้นอยู่กับที่อยู่ IP เรื่องราวที่ยาวนานเริ่มต้นด้วยการบอกว่าการกำหนดเส้นทางเป็นเลเยอร์เครือข่าย 3 สิ่งดังนั้นจึงไม่แม้แต่จะรู้เกี่ยวกับชื่อ DNS ที่มีความละเอียดเกิดขึ้นต่อไปในโปรโตคอลเครือข่ายสแต็ค ...
Riccardo Murri

ใช่ฉันไม่ได้หมายถึงการกำหนดเส้นทาง โดยทั่วไปฉันหมายถึง มันสามารถทำได้? ผูก DNS เข้ากับอินเตอร์เฟสเครือข่ายหรือไม่
dierre

@dierre คุณต้องการทำอะไรอย่างแน่นอน การทำให้เซิร์ฟเวอร์ DNS ตอบเฉพาะในอินเทอร์เฟซเครือข่ายเฉพาะเท่านั้น หรือมีไคลเอนต์ DNS (เช่นการแก้ไข DNS) ใช้อินเทอร์เฟซที่เลือกเท่านั้น
Riccardo Murri


2

"ip netns" สร้างเนมสเปซเครือข่าย จากนั้นคุณสามารถสร้างอินเทอร์เฟซเสมือน (เชื่อมโยง ip เพิ่ม ... veth) และเชื่อมโยงกับเนมสเปซ

เนมสเปซสามารถกำหนดค่าให้ใช้เส้นทางที่แตกต่างกันได้ (เช่นใช้อินเตอร์เฟสที่ต่างกัน)

จากนั้นคุณสามารถเรียกใช้คำสั่งในเนมสเปซนั้นได้ซึ่งจะใช้เนมสเปซที่สร้างขึ้น .. "ip netns exec NAME cmd ... "

ที่มา: http://manpages.ubuntu.com/manpages/saucy/en/man8/ip-netns.8.html

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