Koneksi jaringan ganda

9

Saya memiliki modem seluler usb dan koneksi Home LAN di kotak Ubuntu 10.10 saya.

Keduanya bekerja secara mandiri.

Saya ingin tahu cara menghubungkan keduanya secara bersamaan, dan dapat menentukan aplikasi mana yang menggunakan perangkat mana yang terhubung ke internet.

Adakah yang tahu bagaimana melakukan ini?

Justin Alexander
sumber

Jawaban:

11

Ada beberapa kemungkinan, tergantung pada bagaimana Anda ingin memutuskan paket mana yang digunakan. Sebagian besar dari mereka akan membutuhkan pemahaman tentang cara kerja jaringan TCP / IP di Linux. Alat utama yang harus Anda ketahui untuk melakukan hal-hal kompleks adalah iptables(Ubuntu: iptables Instal iptables ) dan iproute2 ( ipperintah) (Ubuntu: iproute Instal iproute , iproute-doc Instal iproute-doc ).

Jika Anda dapat melakukan diskriminasi sepenuhnya berdasarkan alamat IP target, itu sederhana: rutekan alamat IP sesuai keinginan Anda. Sebagai contoh, perintah berikut akan menyebabkan semua paket untuk 1.2.3. x dan 1.2.4.2 untuk dikirimkan ppp0, dan paket lain untuk dikirim 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

Untuk persyaratan yang lebih kompleks, Anda harus mulai menggunakan iptablesdan ip route. Sebagai contoh, perintah-perintah berikut mengatur tabel routing khusus sehingga semua paket yang ditandai 1 keluar melalui eth0dan semua paket yang ditandai 2 keluar melalui ppp0(kecuali bahwa paket-paket yang ditujukan untuk localhostmenempel pada antarmuka loopback).

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

Sekarang Anda dapat menggunakan iptablesuntuk "memotong-motong" paket keluar, menambahkan tanda yang akan memutuskan rute apa yang mereka ambil. Misalnya, berikut cara mengirim semua lalu lintas SMTP keluar (port 25) melalui eth0, dan semua lalu lintas berasal dari aplikasi yang berjalan sebagai pengguna proxyvia 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

Lihat juga 2 antarmuka jaringan yang terhubung ke internet. Pilih yang akan digunakan sesuai dengan nama domain dan ikat perangkat lunak ke antarmuka jaringan yang berbeda .


Anda harus mengatur agar perintah ini dijalankan ketika kedua antarmuka terhubung. Saya sarankan Anda menulis skrip bernama /etc/network/if-up.d/0justin-routesyang menjalankan perintah yang Anda inginkan. Script ini akan dieksekusi setiap kali antarmuka jaringan ditampilkan; karena namanya dimulai dengan 0itu akan berjalan lebih awal dalam proses itu, sebelum setup khusus aplikasi yang mungkin mengharapkan rute berada di tempat. Ada simetris /etc/network/if-down.d/jika Anda juga ingin melakukan hal-hal ketika salah satu antarmuka turun. (Semua rute yang terkait secara otomatis akan dihapus, yang mungkin meninggalkan beberapa paket terlantar saat Anda ingin mereka kembali ke antarmuka lain.)

Script ifup didokumentasikan dalam interfaces(5) man page. Hal utama yang perlu diketahui adalah bahwa nama antarmuka yang dinaikkan atau turun ada dalam variabel lingkungan IFACE. Anda dapat mengetahui apakah antarmuka lain sudah aktif if ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then ….

Gilles 'SANGAT berhenti menjadi jahat'
sumber
@Justin: Ini bukan hal-hal yang saya punya banyak pengalaman, jadi tolong beri umpan balik tentang apa yang berhasil, apa yang tidak berhasil, apa yang tidak Anda mengerti, dll.
Gilles 'SO- berhenti menjadi jahat'
1
Saya punya dua tambahan untuk dibuat: Pertama, ini mengirimkan lalu lintas di ppp0 dengan alamat sumber dari eth0. Anda dapat mengubah ini menggunakan :, di iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source ppp_ipmana ppp_ipalamat ip adaptor itu. Kedua, Anda akan perlu mematikan yang ketat rp_filterdi /proc/sys/net/ipv4/config/ppp0/rp_filter. Ini berfungsi ketika diatur ke mode santai, yaitu 2.
Karalga