Получил Raspberry Pi 3 с двумя настроенными сетями (одна через ethernet, одна через 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 пересылается, поэтому устройство будет доступно из сетей общего ips.

Но проблема в том, что Apache, кажется, отвечает только тогда, когда соединение приходит из первой сети ... из второй сети я получаю сообщение об ошибке (в браузере), что сайт недоступен.

Сначала я подумал, что это может быть какая-то проблема с переадресацией портов, но, используя iftop я вижу, что браузер пытается установить соединение из обеих сетей (при подключении через обе сети я вижу входящее соединение).

Что я делаю неправильно? Как я могу заставить его работать в обеих сетях одновременно?

PS. Как видите, на wlan0 есть много пропущенных пакетов (dropped:1215).

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .