Linux的IP路由通过2个网关,3个接口

我有3个接口。 我将用10.xxx eth0replacepublic ips:

ips: 10.1.1.64-10.1.1.70 mask: 255.255.255.0 gateway: 10.1.1.1 ip route table: gw1a 

eth1的:

 ip: 10.1.1.71 mask: 255.255.255.0 gateway: 10.1.1.1 ip route table: gw1b 

ETH2

 ip: 10.2.2.135 mask:255.255.255.192 gateway: 10.2.2.129 ip route table: gw2 

eth3 – 将在极less数情况下使用。 大部分时间下来。 用来设置他人

 ip: 192.168.51.69 netmask: 255.255.255.0 gateway: 192.168.51.254 ip route table: office 

当我设置服务器时,我从192.168.51.50连接。

我已经做了下面的脚本来build立路线。 我需要数据包使用他们的接口从外面出去。 主表中的默认网关当前是192.168.51.254。 我稍后会将其更改为eth0的网关。 当我运行脚本时 – 我与服务器的连接松动。 为什么? 是数据包需要到PC我连接从192.168.51.50路由不正确? 我的IP路由规则/路由是否正确。 我不是networking大师

 #!/bin/bash ip=/sbin/ip $ip rule show | grep -Ev '^(0|32766|32767):' | while read PRIO RULE; do echo "Removing rule prio ${PRIO%%:*} $RULE" $ip rule del prio ${PRIO%%:*} done $ip route flush table gw1a >/dev/null 1>&2 $ip route flush table gw1b >/dev/null 1>&2 $ip route flush table gw2 >/dev/null 1>&2 $ip route flush table office >/dev/null 1>&2 $ip route add default via 10.1.1.1 table gw1a dev eth0 $ip route add default via 10.1.1.1 table gw1b dev eth1 $ip route add default via 10.2.2.129 table gw2 dev eth2 $ip route add default via 192.168.51.254 table office dev eth3 for i in `/usr/bin/seq 65 70` ; do echo "rule from 10.1.1.$i -> gw1a" $ip rule add from 10.1.1.$i table gw1a done echo "rule from 10.1.1.71 -> gw1b" $ip rule add from 10.1.1.71 table gw1b echo "rule from 10.2.2.135 -> gw2" $ip rule add from 10.2.2.135 table gw2 echo "rule from 192.168.51.69 -> office" 

解决了! 我已经添加了本地networking(无需网关直接访问)到gw1a,gw1b,gw2和办公室表格:

 ip route add src 10.1.1.64 10.1.1.0/24 proto kernel scope link table gw1a dev eth0 ip route add src 10.1.1.71 10.1.1.0/24 proto kernel scope link table gw1b dev eth1 ip route add src 10.2.2.135 10.2.2.128/26 proto kernel scope link table gw2 dev eth2 ip route add src 192.168.51.69 192.168.51.0/24 proto kernel scope link table office dev eth3 

我在主表中看到它,所以我把它添加到所有其他表。

在接受这个答案之前,我会等待评论。 我有感觉还有更好的办法