Невозможно перенаправить с Wireguard на виртуальную машину.

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

У меня есть ноутбук и физический сервер. Оба соединены через туннель Wireguard (wg0 в качестве интерфейса на обоих), с IP-адресами 172.16.0.0 и 172.16.1.0 соответственно.

На сервере у меня есть виртуальная машина с IP-адресом 192.168.122.173, при этом интерфейс на хосте (virbr0) имеет IP-адрес 192.168.122.1.

Я хотел бы пинговать виртуальную машину с ноутбука, но это не получается. Вот что я сделал:


  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: 
    
  2. Активировал ip forward в sysctl:

    $ sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 1
    
  3. Маршрут, кажется, настроен правильно:

    $ 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) может возникать из-за нескольких факторов, которые требуют тщательной диагностики и корректировки настроек сети на сервере. Рассмотрим шаги для их решения.

Анализ проблемы

  1. Проверка маршрутизации:

    • Убедитесь, что на сервере корректно настроена маршрутизация между подсетями Wireguard (172.16.0.0/24, 172.16.1.0/24) и виртуальной сетью virbr0 (192.168.122.0/24). Для этого используйте команду ip route для проверки существующих маршрутов. В вашем случае, маршрут присутствует, но необходимо удостовериться, что он правильно интерпретируется системой.
  2. Настройка Firewalld:

    • Проверьте, что привязка зон Firewalld и активированные параметры пересылки (forwarding) и маскарада (masquerade) адекватны. Иногда Firewalld требует также явного указания разрешений для прохождения определенных видов трафика через rich rules.
  3. Проверка правил iptables:

    • Убедитесь, что iptables не блокирует трафик между интерфейсами wg0 и virbr0. Используйте команду sudo iptables -L -v для выявления потенциальных правил, которые могут препятствовать маршрутизации ICMP запросов к VM.

Рекомендации по устранению неполадок

  1. Конфигурация 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
  2. Журналирование для диагностики:

    • Временно включите журналирование (logging) на уровне iptables для улавливания всех входящих и исходящих пакетов на интерфейсах, чтобы понять, где именно теряются пакеты:
      sudo iptables -A FORWARD -j LOG --log-prefix "FORWARD_DROP: "
  3. Проверка конфигурации Wireguard:

    • Проверьте настройки конфигурации Wireguard, возможно потребуется добавление маршрутов или изменения в конфигурации интерфейсов для поддержки интернета и локальных маршрутизируемых сетей.
  4. Диагностика tcpdump:

    • Используйте tcpdump на интерфейсе virbr0, пытаясь выявить попытки передачи ICMP пакетов. Если пакеты не видны, значит проблема связана с правилами маршрутизации или фильтрации на уровне ядра или firewall.

Заключение

Уверенная диагностика проблемы с маршрутизацией и пересылкой пакетов требует комплексного подхода с использованием подходящих сетевых инструментов. Рекомендуется использовать все доступные вам методы для выявления конкретного источника проблемы. Всегда начинайте с простых проверок и постепенно усложняйте анализ, используя инструменты мониторинга и журналирования.

И помните, что правильный путь решения проблемы всегда лежит через систематический порядок действий и внимание к деталям. Это обеспечит успешное обеспечение возможности пингования серверной VM с вашего ноутбука через Wireguard.

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

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