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

ПК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)

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

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

2 ответа2

0

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

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

Текущая настройка таблицы маршрутизации 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-адрес дальше от маршрутизатора, который изменит таблицу маршрутизации на (например, давая PC2 eth0 10.0.0.21 и PC1 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. Есть два способа настроить это: изменить таблицу маршрутизации маршрутизатора или настроить PC2 для выполнения прокси-ARP.

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