我有以下路由表
10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.151
10.0.10.0/24 dev eth1 proto kernel scope link src 10.0.10.151
default via 10.0.1.1 dev eth0
我有两条链路,一条通过 LAN,通过 10.0.1.1 连接到 Internet。另一条是直接连接到 eth1 的 ADSL 路由器 (10.0.10.1)。
如果我从外部连接到外部 IP 地址 10.0.10.1,就会出现超时。如果我将默认路由更改为 10.0.10.1,则从外部连接到外部 IP 地址 10.0.10.1 就可以正常工作。因此,这看起来像是一个路由问题(数据包来自 10.0.10.1,但从 10.0.1.1 传出,这是默认路由),但我不知道如何解决它。
我实际上希望默认路由是 10.0.1.1,我只是想通过相同的接口回答对外部 IP 10.0.10.1 的请求。
答案1
您需要使用 iproute2 提供的高级路由表。您设置了 2 个表并将来自某个 IP 的所有流量发送到特定表,您可以在此表中设置默认网关。要设置全局默认路由,您只需通过指标选择其中一个接口而不是另一个接口即可。
一个例子:
- 将默认网关添加到表:
ip 路由通过 10.0.1.1 表 101 添加默认值
ip 路由通过 10.0.10.1 表 102 添加默认值
- 添加一条规则,每个来自特定 IP 的流量都发送到表:
ip 规则从 10.0.1.151 添加查找 101
ip 规则从 10.0.10.151 添加查找 102
- 添加首选网关的指标:
ip 路由添加默认通过 10.0.1.151 度量 1000
ip 路由通过 10.0.10.151 添加默认度量 2000
我希望这可以帮助你入门:)