![设置具有 2 个 WAN 和多个子网的路由器](https://linux22.com/image/586582/%E8%AE%BE%E7%BD%AE%E5%85%B7%E6%9C%89%202%20%E4%B8%AA%20WAN%20%E5%92%8C%E5%A4%9A%E4%B8%AA%E5%AD%90%E7%BD%91%E7%9A%84%E8%B7%AF%E7%94%B1%E5%99%A8.png)
我正在尝试将 Debian 机箱设置为办公室的路由器。我需要在 LAN 中有 3 个子网和 2 个 WAN 连接,并且我希望其中一个子网始终使用 WAN 1,而另一个子网始终使用 WAN 2(无负载平衡)。
例如,我想要有以下三个子网: - 10.1.1.0/24 - 10.1.2.0/24 - 10.1.3.0/24
我希望 10.1.1.0/24 使用 ISP #1 连接到互联网,而 10.1.2.0/24 和 10.1.3.0/24 使用 ISP #2 连接到互联网。
还有第二个复杂程度:ISP #2 是具有动态 IP 地址的 DSL 连接。
我认为这应该很容易实现,但我以前从未这样做过,而且我在网上找不到例子。我一直在阅读拉特克但我无法根据他们提供的例子来适应我想要做的事情。
我将非常感激任何线索!
答案1
你可以用和朋友一起做这件事ip rule
(关键词:基于源的路由)。首先,你需要构建另一个路由表。我们称之为 wan2。将其添加到/etc/iproute2/rt_tables
幸运的是,ip route 的输出与输入的格式相同。您可以这样做来复制表(没有默认路由)
ip route show table main | grep -Ev "^default" | while read ROUTE; do
ip route add table wan2 $ROUTE
done
然后添加默认路由
ip route add table wan2 default via 1.2.3.4 dev ethX
完成后就可以使用该ip rule
命令来构建规则,选择相应的路由表:
ip rule add from 10.1.2.0/24 table wan2
我在互联网上找到了这个脚本,但忘记在哪里了。你可以用它作为模板
#!/bin/sh
set -e
MARK=100
TABLE_NAME=wan2
DEV=eth2
GATEWAY=192.168.4.1
IPTABLES=/sbin/iptables
IP=/sbin/ip
$IP route flush table $TABLE_NAME
$IP route show table main | grep -Ev "^default" | while read ROUTE; do
$IP route add table $TABLE_NAME $ROUTE
done
$IP route add table $TABLE_NAME default dev $DEV via $GATEWAY
while true; do
ip rule del table $TABLE_NAME 2>/dev/null || break
done
$IP rule add from 10.1.2.0/24 table $TABLE_NAME
....
$IP route flush cache
答案2
您必须查看基于源的路由。实际上,您将设置两个路由表,并使用 iptables 标记流量以使用其中一个路由表。
我将保留 ADSL 线路上的默认路由,并为其他 WAN 链路使用自定义路由表。假设 isp1(ADSL) 位于 eth0 上且配置正确,isp2(static) 位于 eth1 上。
#创建自定义路由表 echo 200 isp2 >>/etc/iproute2/rt_tables #添加你的源网络 ip 规则从 10.1.2.0/24 表 isp2 添加 ip 规则从 10.1.3.0/24 表 isp2 添加 #设置默认路由 ip route 通过 isp2.default.gw dev eth1 table isp2 添加默认 #刷新路由缓存以立即应用更改 ip 路由刷新缓存 #启用转发 echo 1 > /proc/sys/net/ipv4/ip_forward
您还必须设置 NAT。
您可以在动态界面上使用:
iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0
在静态接口上
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --源 isp2.external.ip