我必须配置 NAT 并在连接到 Linux 机器的两个网关之间手动分割互联网流量。
如果每个网关都有特定的 IP 地址,则没有问题。我可以通过以下方式做到这一点iproute2
:
ip route add default via 192.168.1.1 dev eth1
ip route add 2.3.4.5 via 192.168.0.1 dev eth0
ip route add 8.9.4.5 via 192.168.0.1 dev eth0
但我的问题就是这么简单!我无权更改网关地址和网络 ID。我只需要在 Linux 机器上使用两个具有相同地址的互联网网关,内核版本为 3.2.0 及以上。
+-----------+
| Gateway A |
+-----------------------+ |192.168.0.1|
| eth0+---->+-----------+
+--------------+eth2 Linux Box |
| | eth1+---->+-----------+
| +-----------------------+ | Gateway A |
| |192.168.0.1|
| +-----------+
+--------+-----------+
| Private Network |--------> Workstation A
| |
| 10.0.0.0/24 |--------> Workstation B
+--------------------+
如何使用 Linux 令人惊叹的网络工具( 或其他工具)解决这个mangling
问题snat
?
答案1
最后我得到了它。经过一番尝试,我发现linux内核在这种情况下没有任何问题。它的工作方式很迷人!通过这个 iproute2 规则和路由:
eth0: 192.168.0.231/24 --> 网关 A: dwl2100ap
eth1: 192.168.0.230/24 --> 网关 B: dwlg132
配置接口:
ip addr add 192.168.0.231/24 dev eth0
ip addr add 192.168.0.230/24 dev eth1
添加两个路由表:
echo "1 dwl2100ap" >> /etc/iproute2/rt_tables
echo "2 dwlg132" >> /etc/iproute2/rt_tables
将路由添加到表中:
ip route add 192.168.0.0/24 dev eth0 src 192.168.0.231 table dwl2100ap
ip route add default via 192.168.0.1 dev eth0 table dwl2100ap
ip route add 192.168.0.0/24 dev eth1 src 192.168.0.230 table dwlg132
ip route add default via 192.168.0.1 dev eth1 table dwlg132
接下来,设置路由规则。这些实际上选择使用什么路由表进行路由。如果您已经拥有相应的源地址,您需要确保路由出给定的接口:
ip rule add from 192.168.0.231 table dwl2100ap
ip rule add from 192.168.0.230 table dwlg132
伪装所有传出数据包:
iptables -tnat -APOSTROUTING -s10.0.0.0/24 -j MASQUERADE
为了让内核分割带宽,我可以发出这条路线:
ip route add default scope global nexthop via 192.168.0.1 dev eth0 weight 2 nexthop via 192.168.0.1 dev eth1 weight 1
手动路由:
ip route add default via 192.168.0.1 dev eth0
ip route add 8.8.8.8 via 192.168.0.1 dev eth0
ip route add 8.8.4.4 via 192.168.0.1 dev eth1
编辑1:
另外我可以通过 iptables 标记一些数据包:
iptables -tmangle -APREROUTING -i eth2 -s 10.0.0.4 -jMARK --set-mark 4
然后通过路由策略路由它们:
ip rule add fwmark 4 table dwl2100ap
我想知道它是否适用于具有相同 IP 地址的两个网关。在内核 3.2.0-53 中。