Проводное соединение имеет приоритет над беспроводным

Проводное соединение имеет приоритет над беспроводным

Я соединил вместе две машины Linux. Одна машина имеет беспроводное подключение к моему маршрутизатору, а другая — нет. Машина без беспроводного доступа (PC1) настроена таким образом, что у нее уникальный статический IP, а другая машина (PC2) установлена ​​в качестве шлюза по умолчанию. PC2 настроен таким образом, что у нее также есть уникальный IP, и она использует маршрутизатор в качестве шлюза по умолчанию. Когда я включаю проводное соединение, PC1 может взаимодействовать с интерфейсами eth0 и wlan0 ПК2, а ПК2 может взаимодействовать с ПК1. К сожалению, когда включено проводное соединение, ПК2 не может взаимодействовать с маршрутизатором, а значит, и ПК1 тоже. По сути, проводные и беспроводные соединения ПК2 не могут работать одновременно.

ПК2 (ПРИМЕЧАНИЕ: route-nодинаково независимо от того, включено ли проводное соединение или нет)

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.138      0.0.0.0         UG    0      0        0 wlan0
10.0.0.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     9      0        0 wlan0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

docker0   Link encap:Ethernet  HWaddr 56:84:7a:fe:97:99  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 60:a4:4c:62:ee:86  
          inet addr:10.0.0.140  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::62a4:4cff:fe62:ee86/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:155 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7744 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:12554 (12.5 KB)  TX bytes:1509568 (1.5 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2179347 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2179347 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:217854881 (217.8 MB)  TX bytes:217854881 (217.8 MB)

wlan0     Link encap:Ethernet  HWaddr c0:4a:00:66:58:98  
          inet addr:10.0.0.103  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::c24a:ff:fe66:5898/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1605422 errors:0 dropped:0 overruns:0 frame:0
          TX packets:669649 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1405768536 (1.4 GB)  TX bytes:83997471 (83.9 MB)

PC1 (ПРИМЕЧАНИЕ: Я не могу получить ifconfig для PC1)

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.139      0.0.0.0         UG    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0

решение1

Текущая настройка таблицы маршрутизации PC2 — ваша проблема. Я воспроизвел ее здесь, удалив неважные столбцы и преобразовав из сетевой маски в нотацию CIDR:

Destination     Gateway         Metric Iface
0.0.0.0/0       10.0.0.138      0      wlan0
10.0.0.0/24     0.0.0.0         1      eth0
10.0.0.0/24     0.0.0.0         9      wlan0

Первая строка означает простым языком: «Трафик на все остальные сайты отправляется через шлюз 10.0.0.138».

Вторая и третья строки предоставляют одно и то же место назначения, поэтому выигрывает меньшая метрика. Строка 3 могла бы вообще отсутствовать. На простом английском это означает: «Чтобы достичь шлюза 10.0.0.138 и всех остальных пиров 10.0.0.*, отправьте через eth0»

В совокупности это приводит к тому, что трафик, направляемый в Интернет, проходит через eth0, что приводит к отсутствию подключения.

Проблема возникает из-за того, что у вас одна и та же подсеть используется на двух разных мостовых доменах в одной сети, что недопустимо. Прекратите это!

Измените сетевую маску интерфейса eth0 ПК2 на 255.255.252.0 и присвойте ему IP-адрес, расположенный дальше от IP-адреса маршрутизатора, что изменит таблицу маршрутизации следующим образом (например, присвоив ПК2 eth0 10.0.0.21 и ПК1 eth0 10.0.0.22):

Destination     Gateway         Metric Iface
0.0.0.0/0       10.0.0.138      0      wlan0
10.0.0.20/30    0.0.0.0         1      eth0
10.0.0.0/24     0.0.0.0         9      wlan0

Теперь трафик к шлюзу 10.0.0.138 вообще не будет соответствовать второй строке и будет правильно использовать третью строку.

Еще лучше было бы использовать непересекающийся диапазон для проводного соединения, например 10.0.1.x.

Чтобы доступ в Интернет работал и для ПК1, ваш маршрутизатор должен будет отправлять трафик, предназначенный для ПК1, через ПК2. Есть два способа настроить это: изменить таблицу маршрутизации маршрутизатора или настроить ПК2 для выполнения proxy-ARP.

решение2

Я думаю, что есть несколько вещей, которые могут вызывать у вас проблемы:

  1. Вы утверждаете, что ПК1 использует ПК2 в качестве шлюза по умолчанию, однако таблица маршрутизации ПК1 на самом деле показывает 10.0.0.139в качестве шлюза по умолчанию интерфейс eth0 ПК2.10.0.0.140
  2. Если PC2 отвечает за маршрутизацию трафика с PC1, включили ли вы IP-пересылку на PC2? Я не думаю, что это включено по умолчанию в Linux. Проверьте с помощью cat /proc/sys/net/ipv4/ip_forward. Если это 0, PC2 будет отбрасывать весь маршрутизируемый трафик, отправленный на него PC1.Руководство, если вам нужно включить его.
  3. Если на ПК2 действительно включена пересылка IP-адресов, настроен ли iptables на прием трафика, попадающего в его цепочку пересылки? iptables -nvLЧтобы проверить правила для цепочки пересылки.

Связанный контент