Вопрос или проблема
У меня есть ноутбук и физический сервер. Оба соединены через туннель Wireguard (wg0 в качестве интерфейса на обоих), с IP-адресами 172.16.0.0 и 172.16.1.0 соответственно.
На сервере у меня есть виртуальная машина с IP-адресом 192.168.122.173, при этом интерфейс на хосте (virbr0) имеет IP-адрес 192.168.122.1.
Я хотел бы пинговать виртуальную машину с ноутбука, но это не получается. Вот что я сделал:
-
Разместил оба интерфейса на сервере в одной зоне Firewalld с включенной переадресацией и маскарадингом:
$ sudo firewall-cmd --zone=home --list-all home (active) target: ACCEPT ingress-priority: 0 egress-priority: 0 icmp-block-inversion: no interfaces: virbr0 wg0 sources: services: dhcpv6-client mdns samba-client ssh ports: protocols: forward: yes masquerade: yes forward-ports: source-ports: icmp-blocks: rich rules:
-
Активировал ip forward в sysctl:
$ sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1
-
Маршрут, кажется, настроен правильно:
$ ip route default via 192.168.1.1 dev enp8s0 proto dhcp src 192.168.1.25 metric 100 172.16.0.0/24 dev wg0 scope link 172.16.1.0/24 dev wg0 proto kernel scope link src 172.16.1.0 172.16.2.0/24 dev wg0 scope link 192.168.1.0/24 dev enp8s0 proto kernel scope link src 192.168.1.25 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
Но при пинге виртуальной машины с ноутбука ничего не происходит:
$ ping 192.168.122.173
PING 192.168.122.173 (192.168.122.173) 56(84) bytes of data.
From 172.16.1.0 icmp_seq=1 Destination Port Unreachable
From 172.16.1.0 icmp_seq=2 Destination Port Unreachable
From 172.16.1.0 icmp_seq=3 Destination Port Unreachable
Вот что мы видим на интерфейсе wg0
на сервере при пинге:
$ sudo tcpdump -n -v -i wg0 icmp
dropped privs to tcpdump
tcpdump: listening on wg0, link-type RAW (Raw IP), snapshot length 262144 bytes
16:19:24.721476 IP (tos 0x0, ttl 64, id 36462, offset 0, flags [DF], proto ICMP (1), length 84)
172.16.0.0 > 192.168.122.173: ICMP echo request, id 44, seq 312, length 64
16:19:24.721513 IP (tos 0xc0, ttl 64, id 14442, offset 0, flags [none], proto ICMP (1), length 112)
172.16.1.0 > 172.16.0.0: ICMP 192.168.122.173 protocol 1 port 52925 unreachable, length 92
IP (tos 0x0, ttl 63, id 36462, offset 0, flags [DF], proto ICMP (1), length 84)
172.16.0.0 > 192.168.122.173: ICMP echo request, id 44, seq 312, length 64
И ничего, когда используем tcpdump на интерфейсе virbr0
.
Но при пинге интерфейса virbr0
с ноутбука это работает:
$ ping 192.168.122.1
PING 192.168.122.1 (192.168.122.1) 56(84) bytes of data.
64 bytes from 192.168.122.1: icmp_seq=1 ttl=64 time=6.11 ms
64 bytes from 192.168.122.1: icmp_seq=2 ttl=64 time=6.12 ms
И при пинге виртуальной машины с сервера это также работает:
$ ping 192.168.122.173
PING 192.168.122.173 (192.168.122.173) 56(84) bytes of data.
64 bytes from 192.168.122.173: icmp_seq=1 ttl=64 time=0.151 ms
64 bytes from 192.168.122.173: icmp_seq=2 ttl=64 time=0.194 ms
64 bytes from 192.168.122.173: icmp_seq=3 ttl=64 time=0.185 ms
Вывод заключается в том, что трафик не может быть направлен с wg0
на virbr0
на сервере, несмотря на активную переадресацию и правильные маршруты.
У меня нет идей, что еще можно сделать или как искать решение.
Большое спасибо!
Ответ или решение
Проблема маршрутизации трафика от интерфейса Wireguard (wg0) к виртуальной машине (VM) через виртуальный мост (virbr0) может возникать из-за нескольких факторов, которые требуют тщательной диагностики и корректировки настроек сети на сервере. Рассмотрим шаги для их решения.
Анализ проблемы
-
Проверка маршрутизации:
- Убедитесь, что на сервере корректно настроена маршрутизация между подсетями Wireguard (172.16.0.0/24, 172.16.1.0/24) и виртуальной сетью virbr0 (192.168.122.0/24). Для этого используйте команду
ip route
для проверки существующих маршрутов. В вашем случае, маршрут присутствует, но необходимо удостовериться, что он правильно интерпретируется системой.
- Убедитесь, что на сервере корректно настроена маршрутизация между подсетями Wireguard (172.16.0.0/24, 172.16.1.0/24) и виртуальной сетью virbr0 (192.168.122.0/24). Для этого используйте команду
-
Настройка Firewalld:
- Проверьте, что привязка зон Firewalld и активированные параметры пересылки (forwarding) и маскарада (masquerade) адекватны. Иногда Firewalld требует также явного указания разрешений для прохождения определенных видов трафика через rich rules.
-
Проверка правил iptables:
- Убедитесь, что
iptables
не блокирует трафик между интерфейсами wg0 и virbr0. Используйте командуsudo iptables -L -v
для выявления потенциальных правил, которые могут препятствовать маршрутизации ICMP запросов к VM.
- Убедитесь, что
Рекомендации по устранению неполадок
-
Конфигурация iptables:
- Добавьте правила
iptables
, разрешающие пересылку пакетов ICMP из сети Wireguard в сеть, обслуживаемую virbr0. Например:sudo iptables -A FORWARD -i wg0 -o virbr0 -j ACCEPT sudo iptables -A FORWARD -i virbr0 -o wg0 -j ACCEPT
- Добавьте правила
-
Журналирование для диагностики:
- Временно включите журналирование (logging) на уровне
iptables
для улавливания всех входящих и исходящих пакетов на интерфейсах, чтобы понять, где именно теряются пакеты:sudo iptables -A FORWARD -j LOG --log-prefix "FORWARD_DROP: "
- Временно включите журналирование (logging) на уровне
-
Проверка конфигурации Wireguard:
- Проверьте настройки конфигурации Wireguard, возможно потребуется добавление маршрутов или изменения в конфигурации интерфейсов для поддержки интернета и локальных маршрутизируемых сетей.
-
Диагностика tcpdump:
- Используйте
tcpdump
на интерфейсе virbr0, пытаясь выявить попытки передачи ICMP пакетов. Если пакеты не видны, значит проблема связана с правилами маршрутизации или фильтрации на уровне ядра или firewall.
- Используйте
Заключение
Уверенная диагностика проблемы с маршрутизацией и пересылкой пакетов требует комплексного подхода с использованием подходящих сетевых инструментов. Рекомендуется использовать все доступные вам методы для выявления конкретного источника проблемы. Всегда начинайте с простых проверок и постепенно усложняйте анализ, используя инструменты мониторинга и журналирования.
И помните, что правильный путь решения проблемы всегда лежит через систематический порядок действий и внимание к деталям. Это обеспечит успешное обеспечение возможности пингования серверной VM с вашего ноутбука через Wireguard.