Linux сеть: настройка Ethernet и Wi-Fi роутеров

Вопрос или проблема

Я настраиваю Linux-систему в качестве маршрутизатора. И моя сеть довольно проста на данный момент:

  1. У меня маршрутизатор подключен к оптоволоконному модему, который проходит аутентификацию у моего интернет-провайдера с помощью pppd.
  2. У меня есть Ethernet-интерфейс, enp2s0, который является шлюзом на маршрутизаторе:
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.1.1  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::20d:b9ff:fe5a:2f91  prefixlen 64  scopeid 0x20<link>
        ether 00:0d:b9:5a:2f:91  txqueuelen 1000  (Ethernet)
        RX packets 57348511  bytes 31510953543 (29.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 116229180  bytes 129467792313 (120.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xf7a00000-f7a1ffff
  1. У меня есть беспроводной интерфейс:
wlp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.1.2  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::6f0:21ff:fe91:cf90  prefixlen 64  scopeid 0x20<link>
        ether 04:f0:21:91:cf:90  txqueuelen 1000  (Ethernet)
        RX packets 493730  bytes 595814115 (568.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 355275  bytes 344035494 (328.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

К которому я хотел бы, чтобы клиенты подключались.

  1. У меня есть nftables и несколько базовых правил маршрутизации для маршрутизации трафика.

Мои клиенты могут подключаться к Ethernet-интерфейсу нормально. И интернет и т.д. работают как ожидается. Однако, когда я подключаюсь к беспроводному интерфейсу и пингую:

-> % ping -I wlp65s0 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.1.1.48 wlp65s0: 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
60 packets transmitted, 0 received, 100% packet loss, time 60428ms

Я, похоже, не получаю никаких ответов.

На маршрутизаторе я вижу следующее, когда включаю nftables trace:

trace id 85cd7345 ip filter trace_chain packet: iif "ppp0" ip saddr 8.8.8.8 ip daddr 10.1.1.48 ip dscp af21 ip ecn not-ect ip ttl 61 ip id 0 ip length 84 icmp type echo-reply icmp code net-unreachable icmp id 12 icmp sequence 59 @th,64,96 0xd9d22c6700000000d1790900 
trace id 85cd7345 ip filter forward packet: iif "ppp0" oif "enp2s0" ip saddr 8.8.8.8 ip daddr 10.1.1.48 ip dscp af21 ip ecn not-ect ip ttl 60 ip id 0 ip length 84 icmp type echo-reply icmp code net-unreachable icmp id 12 icmp sequence 59 @th,64,96 0xd9d22c6700000000d1790900 
trace id 3626e73a ip filter trace_chain packet: iif "wlp4s0" ether saddr 48:ad:9a:9d:5e:a4 ether daddr 04:f0:21:91:cf:90 ip saddr 10.1.1.48 ip daddr 8.8.8.8 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 52040 ip length 84 icmp type echo-request icmp code net-unreachable icmp id 12 icmp sequence 60 @th,64,96 0xdad22c67000000006cd70900 
trace id 3626e73a ip filter forward packet: iif "wlp4s0" oif "ppp0" ether saddr 48:ad:9a:9d:5e:a4 ether daddr 04:f0:21:91:cf:90 ip saddr 10.1.1.48 ip daddr 8.8.8.8 ip dscp cs0 ip ecn not-ect ip ttl 63 ip id 52040 ip length 84 icmp type echo-request icmp code net-unreachable icmp id 12 icmp sequence 60 @th,64,96 0xdad22c67000000006cd70900 
trace id a6c3e760 ip filter trace_chain packet: iif "ppp0" ip saddr 8.8.8.8 ip daddr 10.1.1.48 ip dscp af21 ip ecn not-ect ip ttl 61 ip id 0 ip length 84 icmp type echo-reply icmp code net-unreachable icmp id 12 icmp sequence 60 @th,64,96 0xdad22c67000000006cd70900 
trace id a6c3e760 ip filter forward packet: iif "ppp0" oif "enp2s0" ip saddr 8.8.8.8 ip daddr 10.1.1.48 ip dscp af21 ip ecn not-ect ip ttl 60 ip id 0 ip length 84 icmp type echo-reply icmp code net-unreachable icmp id 12 icmp sequence 60 @th,64,96 0xdad22c67000000006cd70900 

Что я не могу понять.

Любые подсказки будут очень полезны.


Если я изменю адрес беспроводного интерфейса на 10.1.2.1, я смогу подключаться к другим хостам в локальной сети/вне сети.

Я полагаю, что маршрутизатор не знает, куда отправлять трафик на 10.1.1.48; он может идти либо через 10.1.1.1 (Ethernet), либо через 10.1.1.2 (Wi-Fi). Поэтому ответ на пинг идет на Ethernet-порт, и беспроводной клиент никогда его не видит. Мы можем видеть это по части iif "ppp0" oif "enp2s0" трассировки; пакет приходит от ppp0 (это “iif”) и пытается быть отправленным по Ethernet (это “oif”).

Это также объяснит, почему установка беспроводного интерфейса в другую подсеть (10.1.2.1) решает проблему; есть уникальный интерфейс на подсеть.

Если вы хотите, чтобы клиенты Wi-Fi и Ethernet были в одной подсети, то вам, возможно, лучше создать мост. Назовем этот мост “br-lan”. Этот мост получит IP-адрес 10.1.1.1. Затем вы добавляете Ethernet- и Wi-Fi-адаптеры (которые не имеют IP-адресов!) к мосту. Теперь все работает.

Как вы создадите мост, будет зависеть от того, какой дистрибутив Linux вы используете.

На RedHat и производных (например, Alma, Rocky) это можно сделать с помощью сетевого менеджера. Что-то вроде (не протестировано)

nmcli connection delete enp2s0
nmcli connection delete wlp4s0

nmcli connection add type bridge con-name br-lan ifname br-lan bridge.stp no ip4 10.1.1.1/24 ipv6.method disabled
nmcli connection add type bridge-slave con-name enp2s0 ifname enp2s0 master br-lan
nmcli connection add type bridge-slave con-name wlp4s0 ifname wlp4s0 master br-lan

Это удалит любую существующую конфигурацию для Ethernet и Wi-Fi (поэтому будьте осторожны; вы потеряете доступ в сеть на данном этапе; делайте это из консоли) и затем создаст мост с требуемым IP-адресом, после чего прикрепит два интерфейса к нему.

Ответ или решение

Настройка маршрутизаторов Ethernet и Wi-Fi на Linux: Подробное руководство

Введение

В последние годы маршрутизация на базе Linux становится все более популярной из-за своей гибкости и мощных инструментов. В этом руководстве рассматривается распространенная проблема с маршрутизацией, когда клиенты не могут получить ответ от внешних серверов по Wi-Fi. Мы подробно разберем, как настроить маршрутизаторы Ethernet и Wi-Fi в Linux, включая создание моста, чтобы избежать конфликтов маршрутизации в одной подсети.

Описание проблемы

На вашей системе вы успешно настроили маршрутизацию для Ethernet-интерфейса, однако при подключении к беспроводному интерфейсу возникают проблемы с получением ответов от внешних серверов, таких как 8.8.8.8 (DNS-сервер Google). При выполнении команды ping вы получаете сообщения о 100% потере пакетов, и это поведение подтверждается трассировкой правил nftables, где видно, что ответ отправляется на Ethernet-интерфейс вместо Wi-Fi.

Решение проблемы с маршрутизацией

  1. Конфликт IP-адресов в одной подсети:
    При этом ваши Wi-Fi и Ethernet клиентские устройства находятся в одной подсети (10.1.1.0/24), что создает путаницу для маршрутизатора в выборе интерфейса для отправки ответов. Если сетевое устройство использует один и тот же IP-адрес, маршрутизатор не может определить, куда именно отправлять пакеты.

  2. Создание моста:
    Чтобы устранить конфликт и обеспечить стабильную связь между устройствами в одной подсети, рекомендуется настроить мост (bridge). Это позволяет объединить интерфейсы Ethernet и Wi-Fi, таким образом, чтобы все устройства могли взаимодействовать друг с другом без проблем.

Настройка моста на Linux

Следующий шаг — создать мост, который будет интегрировать ваши Ethernet и Wi-Fi интерфейсы. Пример команд для создания моста на системах с NetworkManager, таких как RedHat и его производные (AlmaLinux, Rocky):

nmcli connection delete enp2s0
nmcli connection delete wlp4s0

nmcli connection add type bridge con-name br-lan ifname br-lan bridge.stp no ip4 10.1.1.1/24 ipv6.method disabled
nmcli connection add type bridge-slave con-name enp2s0 ifname enp2s0 master br-lan
nmcli connection add type bridge-slave con-name wlp4s0 ifname wlp4s0 master br-lan

Пояснение команд

  • Удаление существующих конфигураций: Первые две команды удаляют текущие настройки для Ethernet и Wi-Fi интерфейсов. Будьте осторожны, выполняя эти команды, поскольку это может привести к потере сетевого доступа (рекомендуется выполнять из консоли).

  • Создание моста: Следующая команда создает новый интерфейс моста с IP-адресом 10.1.1.1 и отключает протокол IPv6 (если он вам не нужен).

  • Добавление интерфейсов в мост: Последние две команды добавляют Ethernet и Wi-Fi интерфейсы в созданный мост.

Тестирование работы после настройки

После выполнения этих команд и перезапуска сетевых интерфейсов вы можете выполнить ping на 8.8.8.8 и проверить соединение с интернетом через оба интерфейса. Убедитесь, что устройства в вашей локальной сети (как проводные, так и беспроводные) могут успешно обмениваться данными.

Заключение

Понимание и настройка маршрутизации в Linux требует внимательности и точности. Создание моста между Ethernet и Wi-Fi интерфейсами позволяет избежать конфликтов и обеспечивает стабильную работу сети. Если вы столкнетесь с дополнительными проблемами, рекомендуем обращаться к официальной документации nftables и сетевым инструментам вашей операционной системы для получения более детальной информации.

Оцените материал
Добавить комментарий

Капча загружается...