ฉันมีโมเด็มมือถือ usb และการเชื่อมต่อ Home LAN บนกล่อง Ubuntu 10.10 ของฉัน
ทั้งทำงานอย่างอิสระ
ฉันต้องการทราบวิธีการเชื่อมต่อทั้งสองในเวลาเดียวกันและสามารถระบุแอปพลิเคชันที่ใช้อุปกรณ์ใดในการเชื่อมต่ออินเทอร์เน็ต
ไม่มีใครรู้วิธีการทำเช่นนี้?
ฉันมีโมเด็มมือถือ usb และการเชื่อมต่อ Home LAN บนกล่อง Ubuntu 10.10 ของฉัน
ทั้งทำงานอย่างอิสระ
ฉันต้องการทราบวิธีการเชื่อมต่อทั้งสองในเวลาเดียวกันและสามารถระบุแอปพลิเคชันที่ใช้อุปกรณ์ใดในการเชื่อมต่ออินเทอร์เน็ต
ไม่มีใครรู้วิธีการทำเช่นนี้?
คำตอบ:
มีความเป็นไปได้หลายอย่างขึ้นอยู่กับวิธีที่คุณต้องการตัดสินใจว่าแพ็กเก็ตไปที่ใด ส่วนใหญ่จะต้องมีความเข้าใจในการทำงานของเครือข่าย TCP / IP ใน Linux เครื่องมือหลักที่คุณต้องรู้ในการทำสิ่งที่ซับซ้อนคือiptables
(Ubuntu: iptables ) และiproute2 ( ip
คำสั่ง) (Ubuntu: iproute , iproute-doc )
หากคุณสามารถจำแนกได้อย่างสมบูรณ์ตามที่อยู่ IP เป้าหมายมันง่าย: กำหนดเส้นทางที่อยู่ IP ตามความต้องการของคุณ ตัวอย่างเช่นคำสั่งต่อไปนี้จะทำให้แพ็กเก็ตทั้งหมดเป็น 1.2.3 xและ 1.2.4.2 ไปผ่านppp0
และแพ็คเก็ตอื่น ๆ eth0
ที่จะไปผ่าน
route add -net 1.2.3.4/24 ppp0
route add -host 1.2.4.2 ppp0
route add -net 0.0.0.0/0 eth0
สำหรับความต้องการที่ซับซ้อนมากขึ้นคุณจะต้องเริ่มใช้และiptables
ip route
ตัวอย่างเช่นคำสั่งต่อไปนี้ตั้งค่าตารางการเราต์พิเศษเพื่อให้แพ็คเก็ตทั้งหมดที่ทำเครื่องหมาย 1 ออกไปeth0
และแพ็คเก็ตทั้งหมดที่ทำเครื่องหมาย 2 ออกไปทางppp0
(ยกเว้นแพ็คเก็ตนั้นมีไว้สำหรับlocalhost
ติดกับอินเตอร์เฟซย้อนกลับ)
ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth0
ip rule add fwmark 2 table 2
ip route add 127.0.0.0/8 table 2 dev lo
ip route add 0.0.0.0/0 table 2 dev ppp0
ตอนนี้คุณสามารถใช้iptables
เพื่อ "ตัด" แพ็กเก็ตขาออกเพิ่มเครื่องหมายที่จะตัดสินใจเส้นทางที่พวกเขาใช้ ยกตัวอย่างเช่นที่นี่เป็นวิธีที่จะส่งการจราจรขาออก SMTP (พอร์ต 25) ผ่านทางeth0
และการจราจรทั้งหมดเกิดขึ้นโดยโปรแกรมประยุกต์ที่ทำงานเป็นผู้ใช้ผ่านทางproxy
ppp0
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -m owner --uid-owner proxy -j MARK --set-mark 2
ดูเพิ่มเติม2 อินเตอร์เฟสเครือข่ายที่เชื่อมต่อกับอินเทอร์เน็ต เลือกหนึ่งที่จะใช้ตามชื่อโดเมนและซอฟต์แวร์ที่ผูกไว้กับการเชื่อมต่อเครือข่ายที่แตกต่างกัน
คุณจะต้องจัดการให้คำสั่งเหล่านี้ทำงานเมื่อเชื่อมต่อทั้งสองอินเตอร์เฟส ฉันแนะนำให้คุณเขียนสคริปต์ที่เรียก/etc/network/if-up.d/0justin-routes
ใช้คำสั่งที่คุณต้องการ สคริปต์นี้จะถูกเรียกใช้งานเมื่อใดก็ตามที่มีการเชื่อมต่อเครือข่าย เมื่อชื่อเริ่มต้นด้วยชื่อ0
จะรัน แต่เนิ่นๆในกระบวนการนั้นก่อนการตั้งค่าเฉพาะแอปพลิเคชันที่อาจคาดว่าเส้นทางจะเข้าที่ มีความสมมาตร/etc/network/if-down.d/
ในกรณีที่คุณต้องการทำสิ่งต่าง ๆ เมื่ออินเทอร์เฟซตัวใดตัวหนึ่งลงมา (เส้นทางที่เกี่ยวข้องทั้งหมดจะถูกลบโดยอัตโนมัติซึ่งอาจทำให้บางแพ็กเก็ตติดค้างเมื่อคุณต้องการที่จะถอยกลับไปที่อินเทอร์เฟซอื่น ๆ )
สคริปต์ ifup interfaces(5) man page
จะถูกบันทึกไว้ใน IFACE
สิ่งสำคัญที่ต้องรู้คือว่าชื่อของอินเตอร์เฟซจะถูกนำขึ้นหรือลงในตัวแปร environement คุณจะพบว่าไม่ว่าจะเป็นอินเตอร์เฟซที่อื่น ๆ if ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then …
ที่มีอยู่แล้วขึ้นมาด้วย
iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source ppp_ip
, ที่ppp_ip
อยู่ IP ของอะแดปเตอร์นั้นอยู่ที่ไหน ประการที่สองคุณจะต้องปิดที่เข้มงวดที่rp_filter
/proc/sys/net/ipv4/config/ppp0/rp_filter
มันจะทำงานเมื่อตั้งโหมดผ่อนคลายซึ่งเป็น 2