如果您有 2 个网络接口连接到默认网关/路由器所在的同一网络,会发生什么情况?
例如
- 网络接口 e1000g0 - 192.168.1.50
- 网络接口 e1000g1-192.168.1.51
- 网关 - 192.168.1.1
如果我向发送数据包8.8.8.8
,将使用哪个网络接口?我使用的是 Solaris 10 机器。但假设这个问题适用于所有 unix/linux 通用实现
在我的路由表中,似乎e1000g1
被选为 UG,但为什么/如何选择它?
答案1
在 Linux 和 Unix 中,每个路由表只能有一个网关。在 Linux 上,您可以有多个路由表,但每个路由表只有一个网关。
在Linux中,其标识如下:
> ip route show
default via 192.168.73.1 dev eth0 proto static
192.168.73.0/24 dev eth0 proto kernel scope link src 192.168.73.75 metric 1
关键行是以 开头的行default
,它指出(我的)网关是192.168.73.1
。您可以按如下方式更改它:
> ip route del default
> ip route add default via 192.168.73.1 dev eth0
如果我连接了多个接口,我的路由表将如下所示:
> ip route show
default via 192.168.73.1 dev eth0 proto static
192.168.73.0/24 dev eth0 proto kernel scope link src 192.168.73.75 metric 1
192.168.73.0/24 dev wlan0 proto kernel scope link src 192.168.73.66 metric 9
如您所见,本地流量可以通过 或eth0
,wlan0
但是由于metric
值较小(1 对 9),因此将被路由通过eth0
。
WAN 流量将一定eth0
因为默认网关已打开,所以无法通过dev eth0
。
这些值由您的系统自动维护network manager
,默认情况下,它倾向于使用有线连接而不是 wifi 连接。但是,您可以使用与前面类似的命令覆盖其选择,
> ip route delete default
> ip route add default via 192.168.73.1 dev wlan0
如果您有多个相同类型的接口(例如如果您有多个以太网连接,则优先使用最先连接的接口。
默认网关由网络本身识别:它是协商 DHCP 转换时传递给您的计算机的参数之一(其他参数是网络掩码、网络、广播地址)。您不知道这一点,因为 DHCP 过程由 为您处理。network-manager
有时,您可能希望设置一个静态 IP 地址,它不会不是使用 DHCP;在这种情况下,您必须自己提供上述四个参数。即使在对您来说完全陌生的网络中,也有学习这些参数的技巧,但通常您只会在已经熟悉的 LAN 中设置静态地址。
除了 LAN 和默认网关路由之外,您还可以通过任一接口拥有特定路由。在这种情况下,路由的优先级顺序将根据以下原则确定最具体路线优先1.1.1.0/24
。假设您有一条通过的路由wlan0
。然后,当我们需要路由数据包时,例如,1.1.1.1
,此规则(通过 wlan0)和默认规则(通过 eth0)都适用,但第一个更具体,因此这些数据包将通过wlan0
。在这种情况下,当所有其他方法都失败时,默认网关将成为路由,IE当没有其他路线适用时。
在 Linux 中,您可以拥有多个路由表,这称为policy or source routing
。在这种情况下,您还需要一个规则,以便内核区分何时应用您可用的多个路由表。您可以找到策略路由的简要介绍这里在这种情况下,上述命令保持相同,只是它们后面跟着您希望处理的路由表的名称,例如:
> ip route show table main
> ip route show table MyOtherRoutingTable
你会发现经常会提到 netstat、route、ifconfig 等命令。在 Linux 中(但不在 Unix 上,请阅读下面的顶部评论),它们是过时的. 当前命令,知识产权的iproute2套件、所有这些的替代品,以及更多。通过谷歌搜索,您可以找到比较这些和以前的实用程序linux ip cheat sheet
功能的网站。ip
编辑
在 Unix 上,上述命令将是:查询路由表
> netstat -rn -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.11.1 UGSc 10 0 en0
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 2 161444 lo0
169.254 link#4 UCS 1 0 en0
169.254.10.9 10:c3:7b:9d:c8:78 UHLSW 0 0 en0
192.168.11 link#4 UCS 4 0 en0
192.168.11.1 10:6f:3f:25:c6:33 UHLWIir 11 4589 en0 1162
192.168.11.56 88:53:2e:10:77:5f UHLWI 0 0 en0 1187
192.168.11.65 2:f:b5:70:5b:22 UHLWI 0 0 en0 1081
192.168.11.67 127.0.0.1 UHS 0 0 lo0
192.168.11.113 6:20:3e:52:16:4d UHLWIi 2 278 en0 1188
default
这里的网关由关键字和标志来识别G
。
您将默认网关更改为:
> route delete default
> route add default 192.168.0.1
> route change default -interface enp0s3
所有注释都保持不变,除了关于的注释之外policy routing
,因为 Unix 内核不支持这些注释。
答案2
在同一个操作系统实例上拥有两个活动的不同物理接口连接到同一个子网(如问题中的 e1000g0 和 e1000g1)是不可靠的,并且至少在 Solaris 中明确不受支持:
在多个接口连接到同一子网的系统中,必须先将接口配置到 IPMP 组中。否则,系统无法成为多宿主主机。
如上所述,实现此目的的一种可靠方法是启用 ipmp(IP 多路径)。您还可以禁用数据包转发并配置静态路由,如文档中所述这里适用于 Solaris 10。
或者,您也可以使用较低级别的链路聚合,在 Linux 术语中也称为接口绑定。
答案3
我认为该消息将通过默认路由条目中配置的接口发送。可能是最后一个启动的接口。