我正在运行 Arch Linux(在 Raspberry Pi 3 上)并尝试将以太网和 Wi-Fi 连接到同一网络。route
向我展示以下内容:
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 1024 0 0 eth0
default gateway 0.0.0.0 UG 1024 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
gateway 0.0.0.0 255.255.255.255 UH 1024 0 0 eth0
gateway 0.0.0.0 255.255.255.255 UH 1024 0 0 wlan0
ip addr
向我展示以下内容:
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether b8:27:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 192.168.1.103/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 85717sec preferred_lft 85717sec
inet6 fe80::ba27:ebff:fee4:4f60/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether b8:27:YY:YY:YY:YY brd ff:ff:ff:ff:ff:ff
inet 192.168.1.102/24 brd 192.168.1.255 scope global dynamic wlan0
valid_lft 85727sec preferred_lft 85727sec
inet6 fe80::ba27:ebff:feb1:1a35/64 scope link
valid_lft forever preferred_lft forever
wlan0
和接口都eth0
能够从路由器获取 IP 地址。
但事实证明,这些接口中只有一个可以工作。无法 ping 通另一个接口并且无法连接。通常是以太网可以工作,但有时是 Wi-Fi。
发生了什么?我该怎么做才能使这项工作成功?
答案1
正如您所发现的,从路由的角度来看,虽然可能,但在不同接口中拥有来自同一网络的地址并不理想。
路由期望每个接口有一个不同的网络,并且最终其中一个在路由中将优先于另一个,因为它们重叠。
对于将多个接口连接到同一网络的建议解决方案是将它们聚合在桥接接口中。
桥接接口将“拥有”IP 地址,并且实际的真实接口被分组为 下的虚拟单个实体br0
。
allow-hotplug eth0
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0
答案2
这更像是一个附录,而不是一个完整的解决方案。 [因为我没有足够的“声望点”来发表评论。]
您首先必须使两个界面独立工作。然后,您还可以对两个接口之间的传出连接进行负载平衡,而不是桥接。
https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html
我从这个开始,两台设备具有由网络管理员配置的默认互联网路由:
❯ ip route
default via 192.168.0.1 dev eno1 proto dhcp metric 100
default via 192.168.0.1 dev wlp4s0 proto dhcp metric 600
169.254.0.0/16 dev wlp4s0 scope link metric 1000
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.246 metric 100
192.168.0.0/24 dev wlp4s0 proto kernel scope link src 192.168.0.213 metric 600
然后我使用了负载平衡下描述的命令:
https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html
❯ P1=192.168.0.1
❯ P2=192.168.0.1
❯ IF1=eno1
❯ IF2=wlp4s0
❯ ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
nexthop via $P2 dev $IF2 weight 1
沃拉!我通过两个设备建立连接。
❯ ip route
default
nexthop via 192.168.0.1 dev eno1 weight 1
nexthop via 192.168.0.1 dev wlp4s0 weight 1
default via 192.168.0.1 dev eno1 proto dhcp metric 100
default via 192.168.0.1 dev wlp4s0 proto dhcp metric 600
169.254.0.0/16 dev wlp4s0 scope link metric 1000
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.246 metric 100
192.168.0.0/24 dev wlp4s0 proto kernel scope link src 192.168.0.213 metric 600
如果我遇到连接问题,这可能会使调试变得更加困难;)
而且我还不知道如何在重新启动后保留配置,尤其是与网络管理器结合使用。