Apache 和两个网络 - 只有一个接受连接

Apache 和两个网络 - 只有一个接受连接

已为 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

相关内容