我对使用基于策略的路由时优先级的行为有一个简单的问题。我正在运行 Ubuntu 18.04(内核是 4.15.0-1021-aws)。
我使用这台机器作为网关,将数据包从一个接口转发到另一个接口。假设 eth0 -> eth1。
对于机器本身生成的数据包,我不希望它们通过 eth1 路由。但是,来自不同机器(与 eth0 位于同一子网中192.168.0.0/24
)的数据包需要通过 eth1 路由。
eth0 的 ip 地址是192.168.0.1
。转发数据包的路由表称为forwarded
。因此我添加了以下规则:
0: from all lookup local
1: from 192.168.0.1/32 lookup default
10: from 192.168.0.1/24 lookup forwarded
32766: from all lookup main
32767: from all lookup default
但是,当我尝试从这台机器 ping 时,它使用forwarded
路由表。有没有办法做到这一点,还是我在这里犯了什么错误?
答案1
在本地机器上创建的数据包首先接收0.0.0.0/32
源 IP,这称为,unspecified address
并且该地址在某些时候会被内核用数据包离开机器的接口的 IP 替换。
为了正确路由本地来源数据包,使用规则将这些数据包委派到正确的方向通常很有帮助from 0.0.0.0/32
。这对于来自未绑定到特定接口 IP 的服务的数据包尤其重要。