Вопрос или проблема
Каждый раз, когда я подключаю кабель Ethernet к eth0
, кажется, что это изменяет источник и назначение пакетов WireGuard, на которые отвечают. В этой ситуации интерфейс WireGuard не может функционировать.
Моя настройка – Raspberry Pi 5. Raspberry Pi 5 подключен к интернету через wlan0
. Все исходящие данные, которые не поступают из локальной сети, отправляются через интерфейс VPN wg1
. Это работает корректно. Я помечаю пакеты WireGuard меткой 0x15
на входе, чтобы они возвращались обратно через wlan0
к источнику.
wlan0
IP:192.168.5.160
eth0
IP:192.168.6.1
Ниже представлено нормальное поведение, когда я устанавливаю соединение wg0
снаружи:
pi5 kernel: Входящее соединение: IN=wlan0 OUT= MAC= SRC=<WANIP> DST=192.168.5.160 LEN=176 TOS=0x00 PREC=0x00 TTL=63 ID=48888 DF PROTO=UDP SPT=44311 DPT=51820 LEN=156 MARK=0x15
pi5 kernel: Исходящее соединение: IN= OUT=lo SRC=192.168.5.160 DST=WANIP LEN=120 TOS=0x08 PREC=0x80 TTL=64 ID=2721 PROTO=UDP SPT=51820 DPT=44311 LEN=100 MARK=0x15
Теперь ниже показано, что происходит после подключения eth0
:
pi5 kernel: Входящее соединение: IN=wlan0 OUT= MAC= SRC=WANIP DST=192.168.5.160 LEN=176 TOS=0x00 PREC=0x00 TTL=63 ID=56930 DF PROTO=UDP SPT=60019 DPT=51820 LEN=156 MARK=0x15
pi5 kernel: Исходящее соединение: IN= OUT=lo SRC=192.168.6.1 DST=192.168.5.160 LEN=120 TOS=0x08 PREC=0x80 TTL=64 ID=7723 PROTO=UDP SPT=51820 DPT=60019 LEN=100
Пакет ответа, похоже, использует IP-адрес источника из интерфейса eth0
, а назначение установлено на интерфейс wlan0
. Также метка потеряна. Если я вытащу кабель eth0
, всё снова начнет работать, как и выше. Я немного в замешательстве. Настройка маршрута по умолчанию не изменяется, когда кабель eth0
подключен.
Есть идеи, куда мне стоит посмотреть?
Ответ или решение
Судя по вашему описанию, проблема заключается в изменении маршрутизации и обработке сетевых пакетов после подключения кабеля Ethernet на интерфейсе eth0
. Давайте рассмотрим несколько аспектов, которые могут объяснить изменение поведения WireGuard при включении eth0
.
1. Изменение маршрутов
Когда вы подключаете интерфейс eth0
, система может автоматически добавлять новый маршрут по умолчанию через eth0
, если он имеет более низкий метрик (cost). Проверьте маршруты с помощью команды:
ip route
Убедитесь, что маршрут по умолчанию по-прежнему установлен на wlan0
. Если это не так, измените метрики маршрутов или удалите ненужные маршруты.
2. Конфликт IP-адресов и подсетей
Убедитесь, что сети интерфейсов wlan0
и eth0
не конфликтуют. Вы упомянули, что wlan0
имеет IP 192.168.5.160, а eth0
— 192.168.6.1. Если другие устройства в сети 192.168.6.0/24
пытаются передавать пакеты на IP-адрес 192.168.5.160
, это может привести к путанице.
3. Правила iptables и маркировка пакетов
Ваши правила iptables
, возможно, корректно работают только для интерфейса wlan0
. Проверьте, не пересекаются ли правила для eth0
и wlan0
. Также убедитесь, что маркеры пакетов не теряются в результате изменения маршрутизации. Посмотрите, есть ли правила, которые сбрасывают или игнорируют пакеты с установленной маркировкой:
iptables -t mangle -L -v
4. Параметры WireGuard
Убедитесь, что в конфигурации WireGuard правильно указан ListenPort
и что он настроен на обработку входящих соединений по адресу wlan0
. Обратите внимание, что WireGuard может использовать только доступные IP-адреса. Проверьте конфигурацию на наличие привязки к неправильному интерфейсу.
5. Логи и диагностика
Понаблюдайте за логами системы и WireGuard при подключении eth0
. Возможные ошибки могут указывать на проблемы с разрешением или маршрутизацией:
journalctl -xe | grep wg
Также проверьте, не возникают ли ошибки в системных логах (dmesg
), которые помогут вам понять, почему происходит изменение источника/назначения IP.
Заключение
Попробуйте выполнить указанные шаги, чтобы диагностировать и решить проблему. Если проблема сохраняется, подготовьте больше информации о конфигурации маршрутов, правилах iptables и настройках WireGuard. Это поможет более точно определить источник проблемы.