我有 3 个接口。我将用 10.xxx eth0 替换公共 IP:
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 - 极少数情况下会用到。大多数时候都处于关闭状态。用于设置其他
ip: 192.168.51.69
netmask: 255.255.255.0
gateway: 192.168.51.254
ip route table: office
当我设置服务器时,我从 192.168.51.50 进行连接。
我编写了以下脚本来设置路由。我需要数据包使用它们传入的接口传出。主表中的默认网关当前为 192.168.51.254。稍后我将把它更改为 eth0 的网关。当我运行脚本时 - 我与服务器断开连接。为什么?需要发送到我从 192.168.51.50 连接的 PC 的数据包是否路由不正确?我的 IP 路由规则/路由是否正确。我不是网络专家...
#!/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"
答案1
解决了!我已将本地网络(可直接访问,无需网关)添加到 gw1a、gw1b、gw2 和 office 表:
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
我在主表中看到了这种情况,因此我将它添加到了所有其他表中。
我会等待评论,然后再接受这个答案。我觉得有更好的方法……