ip route显示src字段


12

我阅读了手册页,ip但仍然不明白它是什么src,并且找不到太多文档。

请,如果您可以彻底解释它或指向某些链接,它是一个很好的答案。


3
您不知道IP通讯中的“来源”是什么意思?您不需要服务器故障-您需要史蒂文斯书 ...
voretaq7

Answers:


17

在向多宿主主机添加路由时,您可能希望控制使用该路由开始通信时主机从其发送的源IP地址。这就是src的用途。

简短的示例:您有一台具有两个接口且IP地址为192.168.1.123/24和10.45.22.12/24的主机。您正在通过10.45.22.1将路由添加到78.22.45.0/24,并要确保您未使用192.168.1.123地址发送到78.22.45.0/24(可能是因为网络78.22.45.0/24没有返回路由)到192.168.1.0/24,或者由于某种原因您不希望流量通过此路由):

ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12

请注意,您提供的src仅会影响源自您主机的流量。如果正在路由一个外部数据包,则它显然已经具有一个源IP地址,因此它将原封不动地传递(当然,除非您使用的是NAT,但这是完全不同的事情)。同样,此设置可能会被专门选择绑定到特定地址的进程覆盖,而不是在启动连接时使用默认设置(这种情况很少见)。


9

src属性是地址选择算法使用的提示。当主机具有多个IP地址时,这很重要,通常,但并非总是如此,当主机具有多个接口时。尽管还有其他一些规则会影响地址选择,并且网络应用程序也可以通过使用系统调用(如)来覆盖选择算法bind(),该src属性是一种使用路由表查找来回答以下问题的方式:“如果我想启动一个与主机X的连接,我应该使用我的哪个地址?”

这是一个示例,说明该src属性的用法和效果。为了说明这一点,它与地址和路由有关,而不是与接口有关,该示例主机仅具有一个网络接口,但是具有两个地址。此外,两个地址都在同一子网中,以强调没有其他明显的方法来选择使用哪个地址这一事实。

$ ip -4 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 10.1.0.2/24 brd 10.1.0.255 scope global eth0
    inet 10.1.0.16/24 scope global secondary eth0
$ ip route list dev eth0
10.1.0.32/27  scope link  src 10.1.0.16
10.1.0.0/24  proto kernel  scope link  src 10.1.0.2

该主机可以从任何一个地址与该/ 24子网上的其他252个地址进行通信,但是默认情况下,当启动与10.1.0.32到10.1.0.63的连接时,它将使用10.1.0.16,并且对所有主机使用10.1.0.2。休息。

如果主机正在响应而不是启动,则它将从请求的目标地址进行响应。例如,如果位于10.1.0.32的另一台主机连接到位于10.1.0.2的该主机,则响应将来自10.1.0.2,即使该主机src与返回路由的属性不匹配。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.