Saya memiliki dua koneksi internet dari dua ISP yang berbeda dan saya perlu menyeimbangkan lalu lintas yang berasal dari dan dari jaringan saya antara dua ISP tersebut. Saya menggunakan Debian GNU / Linux.
Pengaturan saya seperti ini -
eth0
(192.168.0.0/24) - Jaringan lokal
eth1
(192.168.1.0/24) - ISP # 1
eth2
(192.168.2.0/24) - ISP # 2
Jaringan lokal saya terhubung ke server ini melalui eth0 dan kotaknya adalah DHCP server sekaligus Gateway untuk semua mesin di LAN.
Server perlu melakukan load-balancing antara dua ISP dan juga perlu melakukan NAT-ing.
Saya telah mengikuti instruksi perutean di lartc.org tetapi saya masih membutuhkan instruksi untuk melakukan NAT-ing dengan benar.
Bantuan apa pun akan dihargai.
PS - Saya tahu tentang pFsense tapi saya harus menggunakan Linux.
sumber
Jawaban:
Saya telah melakukan load balancing menggunakan metode lartc.org dan iptables , dan saya menemukan bahwa metode iptables lebih mudah dipahami dan diimplementasikan. Satu-satunya downside adalah bahwa Anda memerlukan versi iptables yang cukup baru untuk dapat menggunakan modul statistik
Mari kita anggap beberapa hal:
LAN: eth0: 192.168.0.1/24
ISP1: eth1: 192.168.1.1/24, gateway: 192.168.1.2/24
ISP2: eth2: 192.168.2.1/24, gateway: 192.168.2.2/24
Jadi, inilah yang akan saya lakukan dengan menggunakan metode iptables:
Tabel rute
Pertama-tama edit / etc / iproute2 / rt_tables untuk menambahkan peta antara nomor tabel rute dan nama ISP
Jadi tabel 10 dan 20 masing-masing untuk ISP1 dan ISP2. Saya perlu mengisi tabel ini dengan rute dari tabel utama dengan potongan kode ini (yang saya ambil dari hxxp: //linux-ip.net/html/adv-multi-internet.html)
Dan tambahkan gateway default ke ISP1 melalui gateway ISP1 itu:
Lakukan hal yang sama untuk ISP2
Jadi sekarang saya memiliki 2 tabel rute, 1 untuk setiap ISP.
Iptables
OK sekarang saya menggunakan iptables untuk mendistribusikan paket secara merata ke setiap tabel rute. Info lebih lanjut tentang cara kerja ini dapat ditemukan di sini ( http://www.diegolima.org/wordpress/?p=36 ) dan di sini ( http://home.regit.org/?page_id=7 )
NAT
Nah NAT itu mudah:
sumber
jawaban mefat banyak membantu saya tetapi alih-alih salinan satu dari semua aturan tabel utama ke dalam dua tabel ISP pendekatan yang lebih baik mungkin dengan menggunakan aturan prio untuk menambahkan aturan default setelah tabel utama.
Atur / etc / iproute2 / rt_tables seperti biasa:
Catat itu
Memperlihatkan aturan 0-> lokal, 32766-> utama dan 32767-> default. Lihat
man ip
untuk lebih jelasnya.Yang terpenting, proses perutean akan bekerja dari aturan prio rendah ke prio tinggi ... tetapi 32767 bukan aturan tertinggi #. Jadi jika tabel routing utama tidak memiliki rute default (tetapi mungkin berisi semua jenis rute yang berubah secara dinamis untuk vpns dll) maka jika pertandingan tidak dibuat, itu jatuh ke default (biasanya kosong) dan kemudian mencari aturan prio yang lebih tinggi.
Lihat bagian 'lempar' di sini: http://linux-ip.net/html/routing-tables.html
Jadi sekarang setup
dan untuk memastikan mereka melihat setelah tabel utama:
Menggunakan
lagi untuk memverifikasi bahwa aturan ini lebih tinggi daripada utama
Kemudian gunakan CONNMARK mangling seperti yang dikatakan mefat:
Hal yang perlu diperhatikan: kebutuhan pppd
nodefaultroute
jika tidak diatur di utama; ketika perangkat me-restart tabel ISP1 / ISP2 dibersihkan sehingga perlu dikembalikan menggunakan skrip.Saya menggunakan skrip di /etc/ppp/ip-{up,down}.d/dual-routing
Ini adalah load-balancing berbasis koneksi jadi saya akan melihat menggunakan load untuk memantau dan mengganti aturan statistik:
iptables -t mangle -R PREROUTING <n>
dari userspace. Jadi jika ada unduhan yang berjalan lama pada satu koneksi dan koneksi lainnya dimuat dengan ringan, kita harus memilih koneksi yang dimuat dengan ringan.sumber