已为 Raspberry Pi 3 配置了两个网络(一个通过以太网,一个通过 wifi):
eth0 Link encap:Ethernet HWaddr b8:27:eb:82:ca:0c
inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::57ac:b6e:33c1:8bbb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:797 errors:0 dropped:0 overruns:0 frame:0
TX packets:797 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:219915 (214.7 KiB) TX bytes:117516 (114.7 KiB)
wlan0 Link encap:Ethernet HWaddr b8:27:eb:d7:9f:59
inet addr:192.168.2.200 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::6463:5ba:3b28:6d39/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1532 errors:0 dropped:1215 overruns:0 frame:0
TX packets:201 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:364160 (355.6 KiB) TX bytes:29417 (28.7 KiB)
sigma@sigma:~ $ ip route show table main
default via 192.168.1.1 dev eth0 metric 202
default via 192.168.2.1 dev wlan0 metric 303
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.200 metric 202
192.168.2.0/24 dev wlan0 proto kernel scope link src 192.168.2.200 metric 303
端口 80 正在转发,因此该设备可从网络公共 IP 访问。
但问题是,Apache 似乎仅当连接来自第一个网络时才响应......从第二个网络我收到一个错误(在浏览器中),该站点不可用。
起初我以为这可能是一些端口转发问题,但使用时iftop
我可以看到两个网络浏览器都在尝试连接(通过两个网络连接时我可以看到传入的连接)。
我做错了什么?如何让它同时在两个网络上工作?
PS. 如您所见,在 wlan0 上有很多丢包(dropped:1215
)。
答案1
默认情况下,Linux 为每个数据包选择路由完全基于目的地如果两个接口都提供默认路由,则始终会选择度量值最低的路由 - 即使从技术上讲它是针对错误的网络,即使初始数据包是通过不同的接口到达的。
目前您可以通过创建来解决这个问题额外的路由表:
ip route add default via 192.168.1.1 dev eth0 table 100
ip route add default via 192.168.2.1 dev wlan0 table 200
ip rule add from all lookup main suppress_prefixlength 0
ip rule add from 192.168.1.0/24 lookup 100
ip rule add from 192.168.2.0/24 lookup 200
(这可能并不完美,和如果您使用 DHCP,则必须手动完成。使用 fwmark 可能会更好。)
测试使用:
ip route get 8.8.8.8
ip route get 8.8.8.8 from 192.168.1.200
ip route get 8.8.8.8 from 192.168.2.200