表 6-2。源本地主机(我们自己的机器)
[...]
- 路由决策,因为之前的 mangle 和 nat 更改可能已经改变了数据包的路由方式。
[...]
在 OUTPUT 链之后还有第二次路由查找,因为 NAT 和其他东西可能已经改变了实际的输出接口。但在我的测试中我发现输出接口一旦选定就无法更改。
例如,您有一个应用程序将 UDP 数据包从未绑定的套接字发送到某个目的地:查询主表并选择默认源、接口和网关。然后在其上设置一个 fwmark,并在基于策略的路由中使用它来尝试将数据包放在另一个接口上:
[root@localhost ~]# ip rule add fwmark 1 lookup 1
[root@localhost ~]# ip route add default dev lo table 1
数据包将进行这些查找
#first lookup, assuming main NIC is in LAN with address 192.168.1.2/24, gateway 192.168.1.1
[root@localhost ~]# ip route get 8.8.8.8
8.8.8.8 from 192.168.1.2 via 192.168.1.1 dev eth0
cache
#second lookup, source address and oif chosen
[root@localhost ~]# ip route get 8.8.8.8 oif eth0 from 192.168.1.2 mark 1
8.8.8.8 from 192.168.1.2 via 192.168.1.1 dev wlp3s0 mark 1
cache
您的数据包仍将具有已选择的输出接口。请注意,如果您不设置参数,oif
您将获得正确的界面:
[root@localhost ~]# ip route get 8.8.8.8 from 192.168.1.2 mark 1
8.8.8.8 from 192.168.1.2 dev lo mark 1
cache
那么有什么意义呢?看来(我已经测试过)您只能有效地更改网关,但您甚至不能使用blackhole
or unreachable
。