通过 2 个网关、3 个接口进行 Linux IP 路由

通过 2 个网关、3 个接口进行 Linux IP 路由

我有 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

我在主表中看到了这种情况,因此我将它添加到了所有其他表中。

我会等待评论,然后再接受这个答案。我觉得有更好的方法……

相关内容