Linux là bộ định tuyến: Tôi có 3 nhà cung cấp Internet, mỗi nhà cung cấp có modem riêng.
Nhà cung cấp1 , là địa chỉ cổng 192.168.1.1 Đã
kết nối với bộ định tuyến linux eth1 /192.168.1.2
Nhà cung cấp2 , địa chỉ cổng 192.168.2.1 Đã
kết nối với bộ định tuyến linux eth2 /192.168.2.2
Nhà cung cấp3 , địa chỉ cổng 192.168.3.1 Đã
kết nối với bộ định tuyến 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 | |
+------------+ \________
Tôi muốn định tuyến các máy khách trong mạng 10.0.0.0/24 bằng IP nguồn tới các cổng khác nhau.
Giao diện cho mạng máy khách là eth0 /10.0.0.1, là cổng mặc định cho tất cả các máy khách.
Ví dụ:
10.0.0.11 nên được định tuyến đến Nhà cung cấp1 @ eth1
10.0.0.12 nên được định tuyến đến Nhà cung cấp2 @ eth2
... và cứ thế ...
Tôi nghĩ rằng tôi cần phải sử dụng ip route
và iptables
cho SNAT, nhưng tôi chưa tìm ra chính xác làm thế nào.
Đây là kịch bản tôi có cho đến nay.
chuyển tiếp ipv4 được kích hoạt.
#!/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