对于传出的数据包,route
我可以知道正在使用哪个接口,但是对于传入的数据包,如何找出正在使用哪个接口?
答案1
您正在寻找ip route get
命令。这相当于 BSD route get
。
ip route get 50.232.186.20
例如将显示使用哪条路由到达该 IP。此命令不会自行解析主机名。
答案2
一般来说,Linux 希望数据包通过相同的接口进入和退出。
如果不是这种情况,内核会将数据包报告为火星数据包,并且如果您设置了以下 sysctl 值,则如果从无法路由回的接口(标准rp
中的rp_filter
反向路径)看到数据包,则会丢弃数据包。
net.ipv4.conf.all.rp_filter = 1
因此,通常情况下,除非您有特别复杂的路由表或设置,否则您可以检查输出ip r
并做出有根据的猜测。最有可能的是,您会想要检查您的默认路由是什么,并且您的问题的答案很有可能是“您的默认路由指向的任何接口”。
如果有必要,管理员可以更改以上所有内容,但一般来说,据我所知,大多数系统都是这样工作的。
答案3
数据包将来自其 IP 地址接口(目标地址),否则它将无法到达接口并且数据包将被忽略(就像在集线器中一样)如果数据包是广播,那么它将来自连接到该广播域的所有接口(只有一个 IP 应该位于同一个 IP 子网中的原因之一)
MAC 级别同样如此