Linux作为路由器:我有3个Internet提供商,每个提供商都有自己的调制解调器。
Provider1,网关地址为192.168.1.1,
已连接到Linux路由器eth1 / 192.168.1.2
Provider2,网关地址192.168.2.1
已连接到Linux路由器eth2 / 192.168.2.2
Provider3,网关地址192.168.3.1
已连接到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 | |
+------------+ \________
我想通过源IP将网络10.0.0.0/24中的客户端路由到不同的网关。
客户端网络的接口是eth0 /10.0.0.1,这是所有客户端的默认网关。
例如:
10.0.0.11应该路由到Provider1 @ eth1
10.0.0.12应该路由到Provider2 @ eth2
...依此类推...
我认为我需要使用SNAT ip route
和iptables
SNAT,但是我还没有确切地知道如何使用。
这是我到目前为止的脚本。
ipv4转发已启用。
#!/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
您需要在CONNMARK补充,我认为,保存/恢复的标志,因此它可以被应用到数据包第2..N(这将是NAT'd通过连接跟踪)
—
derobert
我添加了一个答案,摘录来自我们在此处使用的配置。我将尝试在周末检查一下以澄清所有问题……
—
derobert