honkiko 发表于 2015-09-02 19:57

配置策略路由后,发出的报文的源IP是怎么决定的?

假设机器有两个网卡,IP地址分别为IP_A和IP_B, 配置了策略路由(多个路由表,根据源IP选择路由表):
ip route add default dev ethA table A
ip route add default dev ethB table B
ip rule add from IP_A table A
ip rule add from IP_A table A

本机的程序往IP_C发送一个报文,内核协议栈如何决定这个报文的源IP呢?

正常如果没有策略路由的情况,会先根据目的IP查路由,确定从哪个网卡出去,然后把这个网卡的IP作为报文的目的IP。如果这个网卡配置了多个IP, 也有相应的规则,stackoverflow有个帖子解释得比较清楚,大概是先优先选择跟目的IP同网段的,如果没有,则选第一个IP。

以上过程,有个基本原则就是先查路由,根据路由的结果再选择IP。

但是对策略路由, 如果没有源IP, 就没法走策略路由。好像成了一个先有鸡还是先有蛋的问题了。

求高手解答。

sdau 发表于 2015-09-08 14:09

ping -I <source> <dest>
ssh -b <source> <dest>
可以通过这种方式

Trofish 发表于 2015-09-09 12:58

策略路由优于路由表的选择。

如果没命中策略路由,则继续按路由表转发。
所以,C应该走你的缺省默认路由。
页: [1]
查看完整版本: 配置策略路由后,发出的报文的源IP是怎么决定的?