![Проводное соединение имеет приоритет над беспроводным](https://rvso.com/image/1497099/%D0%9F%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D0%B5%20%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B8%D0%BC%D0%B5%D0%B5%D1%82%20%D0%BF%D1%80%D0%B8%D0%BE%D1%80%D0%B8%D1%82%D0%B5%D1%82%20%D0%BD%D0%B0%D0%B4%20%D0%B1%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%BC.png)
Я соединил вместе две машины 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 использует ПК2 в качестве шлюза по умолчанию, однако таблица маршрутизации ПК1 на самом деле показывает
10.0.0.139
в качестве шлюза по умолчанию интерфейс eth0 ПК2.10.0.0.140
- Если PC2 отвечает за маршрутизацию трафика с PC1, включили ли вы IP-пересылку на PC2? Я не думаю, что это включено по умолчанию в Linux. Проверьте с помощью
cat /proc/sys/net/ipv4/ip_forward
. Если это 0, PC2 будет отбрасывать весь маршрутизируемый трафик, отправленный на него PC1.Руководство, если вам нужно включить его. - Если на ПК2 действительно включена пересылка IP-адресов, настроен ли iptables на прием трафика, попадающего в его цепочку пересылки?
iptables -nvL
Чтобы проверить правила для цепочки пересылки.