我是网络新手,想弄清楚多个网络接口是如何工作的。我的疑问是,当一台机器上有两个或多个 NIC 时,文件中存在的默认网关是什么意思/etc/sysconfig/network
。内核是否应该在具有各自文件中定义的网关的不同接口之间进行负载平衡/etc/sysconfig/network-scripts/ifcfg-eth*
?
答案1
当没有更具体的路由时,默认网关是发送数据包的地方 - 实际上默认网关有一个与所有数据包匹配的路由 - /0 网络掩码路由。
尝试“netstat -rn”查看系统上的路由。
默认网关不是系统上的接口 - 它通常是本地路由器。它可能通过多个接口可访问,但通常只有一个活动接口。
我不确定负载平衡,但如果默认网关可从多个接口访问,则数据包可以从所有接口发送到它,这似乎是合理的。
从头开始设置网络的一个简单示例:
ifconfig eth0 192.168.0.55 netmask 255.255.255.0
route add default gateway 192.168.0.1 eth0
第一个命令设置您的接口并添加一条到本地网络 (192.168.0/24) 的路由。第二个命令通过 192.168.0.1 添加一条默认路由,现在可以通过第一个路由访问该路由。
如果您有第二个接口,您也可以进行设置:
ifconfig eth1 192.168.0.56 netmask 255.255.255.0
现在,任一接口都可以到达默认网关。您可以使用“ifconfig”并查看 RX/TX 数据包来检查是否正在发生负载平衡。如果计数器增加,则表明正在使用该接口。
更新:
对于不同网络上的两个接口,您可以添加多个默认网关。我不知道 etc/sysconfig 是否支持这种情况。如果不支持,您可以在启动脚本中添加“route add default gateway”语句。
关于这个主题的一些琐事:以前可以通过网关发送数据包,源 IP 来自另一个接口(非对称路由)。这样,您可以从一个网关发送所有数据包,然后通过另一个网关接收它们。这在您拥有非对称上行/下行带宽或延迟的连接的情况下很有用(想想卫星下行链路和蜂窝上行链路)。
我说“曾经”是因为大多数 ISP 现在都会过滤掉未在下游分配源 IP 的数据包。
更多随机双网卡乐趣:
我的笔记本电脑上有两个网卡:有线和无线。我为它们分配了同一IP在我的 DHCP 服务器配置中,根据它们的以太网地址进行配置。当有线连接时,我的速度很快。但是当我拔掉它时,一切都会继续工作。我甚至不会失去与远程主机的连接。内核不关心数据包来自哪个接口,只要它绑定到正确的 IP 地址即可。
答案2
默认网关应该只能由您的一个网络接口访问。如果同一子网上有多个 NIC,则潜在的不确定的输出路径可能会导致意外且令人失望的行为。
例如https://serverfault.com/questions/415304/multiple-physical-interfaces-with-ips-on-the-same-subnet
如果你真的想实现这一点,一个可靠的方法是配置某种形式的网络聚合,对于 Linux 而言,这意味着绑定/组合。
答案3
对于两个具有相同度量的路由,将使用循环负载平衡方案。这可能是基于每个网络,也可能是基于每个数据包。Cisco(不是 linksys)路由器可以配置为执行这两种操作,但每个数据包可以提供更好的分配等效链接。从主机角度来看,我相信除非您正在运行路由守护程序(如 routed 或 gated),否则系统内核将选择一个接口作为其首选路由,并且只有在第一个接口发生故障或网关无法通过该接口访问时才会切换到另一个接口。