我正在设置一个Debian框作为办公室的路由器。 我需要在局域网中有3个子网和2个广域网连接,并且我希望其中一个子网总是使用广域网1,另一个子网始终使用广域网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出站到Internet。
还有一个复杂的层次:ISP#2是一个带有dynamicIP地址的DSL连接。
我认为这应该很容易实现,但我从来没有做过,我一直没能find一个在线例子。 我一直在读lartc,但是我无法调整他们提供的例子来做我想做的事情。
我会感激任何主angular!
你可以用ip rule和朋友(关键字:基于源的路由)来做到这一点。 首先你需要build立另一个路由表。 让我们称它为wan2。 将其添加到/etc/iproute2/rt_tables
幸运的是,ip route的输出格式与input格式相同。 你可以做到这一点复制表(没有默认路由)
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命令构build规则以select相应的路由表:
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
你将不得不看基于源码的路由。 本质上,你将设置两个路由表,并使用iptables来标记stream量来使用其中一个路由表。
我将在ADSL线路上保留默认路由,并为其他WAN链路使用自定义路由表。 这假定isp1(ADSL)在eth0上并正确configuration,而isp2(静态)在eth1上。
#创build一个自定义路由表 echo 200 isp2 >> / etc / iproute2 / rt_tables #添加您的源networking ip规则添加从10.1.2.0/24表isp2 ip规则添加从10.1.3.0/24表isp2 #设置默认路由 IP路由添加默认通过isp2.default.gw dev eth1表isp2 #刷新路由caching以立即应用更改 ip路由刷新caching #启用转发 echo 1> / proc / sys / net / ipv4 / ip_forward
你也将不得不build立NAT。
在你的dynamic界面上你可以使用:
iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0
并在静态界面上
iptables -t nat -A POSTROUTING -o eth1 -j SNAT - to-source isp2.external.ip