如何配置 Linux 路由以便通过接收数据包的同一接口发送出去?

如何配置 Linux 路由以便通过接收数据包的同一接口发送出去?

我有以下路由表

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

我希望这可以帮助你入门:)

相关内容