Linux sebagai router: Saya memiliki 3 penyedia Internet, masing-masing dengan modem sendiri.
Provider1 , yang merupakan alamat gateway 192.168.1.1
Terhubung ke router linux eth1 /192.168.1.2
Provider2 , alamat gateway 192.168.2.1
Terhubung ke router linux eth2 /192.168.2.2
Provider3 , alamat gateway 192.168.3.1
Terhubung ke router linux eth3 /192.168.3.2
________
+------------+ /
| | |
+----------------------+ Provider 1 +--------|
__ |192.168.1.2 |192.168.1.1 | /
___/ \_ +------+-------+ +------------+ |
_/ \__ | eth1 | +------------+ /
/ \ eth0| |192.168.2.2 | | |
|Client network -----+ ROUTER eth2|--------------+ Provider 2 +------| Internet
\10.0.0.0/24 __/ | | |192.168.2.1 | |
\__ __/ | eth3 | +------------+ \
\___/ +------+-------+ +------------+ |
|192.168.3.2 | | \
+----------------------+ Provider 3 +-------|
|192.168.3.1 | |
+------------+ \________
Saya ingin merutekan klien di jaringan 10.0.0.0/24 dengan IP sumber ke gateway yang berbeda.
Antarmuka ke jaringan klien adalah eth0 /10.0.0.1, yang merupakan gateway default untuk semua klien.
Misalnya:
10.0.0.11 harus dialihkan ke Provider1 @ eth1
10.0.0.12 harus dialihkan ke Provider2 @ eth2
... dan seterusnya ...
Saya pikir saya perlu menggunakan ip route
dan iptables
untuk SNAT, tapi saya belum tahu persis bagaimana caranya.
Ini skrip yang saya miliki sejauh ini.
penerusan ipv4 diaktifkan.
#!/bin/bash
# flush tables
ip route flush table connection1
ip route flush table connection2
ip route flush table connection3
# add the default gateways for each table
ip route add table connection1 default via 192.168.1.1
ip route add table connection2 default via 192.168.2.1
ip route add table connection3 default via 192.168.3.1
# add some IP addresses for marking
iptables -t mangle -A PREROUTING -s 10.0.0.11 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -s 10.0.0.12 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -s 10.0.0.13 -j MARK --set-mark 3
# add the source nat rules for each outgoing interface
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.2
iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 192.168.2.2
iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 192.168.3.2
# link routing tables to connections (?)
ip rule add fwmark 1 table connection1
ip rule add fwmark 2 table connection2
ip rule add fwmark 3 table connection3
#default route for anything not configured above should be eth2
Jawaban:
Berikut ini adalah pengaturan serupa dari salah satu router kami (dengan beberapa hal yang tidak relevan terpotong). Perhatikan bahwa ini juga menangani koneksi yang masuk .
Catat penggunaan variabel, bukan angka mark yang dikodekan. Jauh lebih mudah untuk dirawat! Mereka disimpan dalam naskah yang terpisah, dan bersumber di. Nama tabel dikonfigurasi di
/etc/iproute2/rt_tables
. Nama antarmuka diatur/etc/udev/rules.d/70-persistent-net.rules
.Dan aturannya:
Tabel perutean diatur
/etc/network/interfaces
, sehingga menghapus antarmuka membuatnya beralih menggunakan yang lain:Catatan: Jika Anda juga melakukan pemfilteran (yang kemungkinan besar adalah Anda), Anda juga perlu menambahkan aturan yang sesuai
FORWARD
keACCEPT
lalu lintas. Khusus untuk setiap traffic yang masuk.sumber
ip rule add from 10.0.0.0/24 pref 1400 lookup eth2
dan membuat pengecualian setelahnya.