Linux双网卡配置
Linux 双网卡配置
linux 支持多网卡,有两种配置方式(以双网卡为例):
环境: 主机运行裁剪的嵌入式 linux,第三方主机为 PC
- 双网卡 + 不同网段 系统有两个网卡,分别属于不同的网段(比如网卡 A :192.168.0.11,网卡 B :192.168.1.22),大部分的多网卡系统都是使用的这种配置。这时的路由表基本如此:
default XiaoQiang 0.0.0.0 UG 600 0 0 wlo1
192.168.1.0 * 255.255.255.0 U 100 0 0 eno1
流量根据路由表选择流向不同的网卡。路由器就是这样实现的。
- 双网卡 + 同网段
如果两个网卡属于同一个网段(比如网卡 A :192.168.1.11,网卡 B :192.168.1.22)。这时系统的路由表还是有一个默认路由(比如流量都默认流向 wlo1 )。从表面上看,系统此时两个网卡都可以正常通信,但实际上还是有问题的。
- 假如默认路由为网卡 A ,此时从外界 Ping 192.168.1.11 和 192.168.1.22 都正常,但是如果此时拔掉网卡 A ,然后因为默认路由为 192.168.1.11 ,所以此时外界就不无法 Ping 通主机了,但是此时如果修改了默认路由或者使用 ifconfig 关闭网卡 A ,然后就可以恢复通信了。
- 两个网卡都在使用时,如果 ping 两个 IP (192.168.1.11 和 192.168.1.22),会发现,如果拔掉了非默认路由的网卡 B(192.168.1.22),再去 ping 192.168.1.22 ,仍然可以通信,并且在第三方主机检查 ARP 表,会发现 192.168.1.11 和 192.168.1.22 的 MAC 地址相同。
出现这种情况的原因就是因为第三方主机和本机通信时会使用默认路由,所以第三方主机 ARP 表上会把网卡 A 和 B 的 MAC 地址标识为网卡 A(默认路由)的 MAC 地址。要解决这个问题可以使用工具 iproute2
把两个网卡分到两个不同路由表。
echo "210 local100" >> /etc/iproute2/rt_tables
echo "220 local200" >> /etc/iproute2/rt_tables
ip route add 192.168.1.0/24 dev wlo0 src 192.168.1.11 table local100
ip route add 192.168.1.0/24 dev eno1 src 192.168.1.22 table local200
ip route add default dev wlo0 table local100
ip route add default dev eno1 table local200
ip rule add from 192.168.1.11 table local100
ip rule add from 192.168.1.22 table local200
ip route flush cache
然后第三方主机再于本机进行通信就会根据不同的 IP 选择了不同的网卡进行通信。此时系统会优先选择 table 数字最小的路由表来进行路由。假如此时拔掉网卡A ,则系统会自动选择网卡 B 作为新的路由出口。