Переадресация трафика работает на TCP, но не работает на UDP.

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

Я хотел сделать IP-камеру доступной в Интернете через туннель WireGuard, схема выглядит так:

Клиент --—> СерверA -—-(wireguard)---> СерверB ---(LAN)--—> Камера

Я настроил правильные правила DNAT и SNAT; но работает только TCP, UDP — нет. 🤔

Правила для СерверA:

table inet filter {
    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        
        ##IPcam
        iifname eth0 tcp dport 5541 dnat ip to 192.168.2.2:5541
        iifname eth0 udp dport 5541 dnat ip to 192.168.2.2:5541
    }

    chain postrouting {
        type nat hook postrouting priority 0; policy accept;
        oifname eth0 masquerade
        
        ##IPcam
        oifname wg2 ip daddr 192.168.2.2 tcp dport 5541 snat to 192.168.2.1
        oifname wg2 ip daddr 192.168.2.2 udp dport 5541 snat to 192.168.2.1
    }
}

Правила для СерверB:

table inet filter {
    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        
        ##IPcam
        iifname wg0 tcp dport 5541 dnat ip to 192.168.5.63:554
        iifname wg0 udp dport 5541 dnat ip to 192.168.5.63:554
    }

    chain postrouting {
        type nat hook postrouting priority 0; policy accept;
        oifname eth0 masquerade
    }
}

При потоковой передаче через TCP все работает идеально, но через UDP не работает.

// tcp работает
mpv --rtsp-transport=tcp rtsp://serverA:5541/Streaming/Channels/1

// udp не работает
mpv --rtsp-transport=udp rtsp://serverA:5541/Streaming/Channels/1

Хотя правила для UDP и TCP одинаковы, почему TCP работает, а UDP нет?

ChatGPT выдает мусор, любая помощь будет очень признательна. 🙏

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

Для успешной настройки маршрутизации трафика и устранения проблемы, когда пересылка трафика работает на TCP, но не на UDP, необходимо учитывать специфику передачи данных по двум протоколам. В данной ситуации вы хотите предоставить доступ к IP-камере через туннель WireGuard, что требует корректной настройки правил DNAT и SNAT на серверах A и B.

Фундаментальная разница в работе TCP и UDP:

  1. TCP (Transmission Control Protocol) — это протокол с установленным соединением, который гарантирует доставку пакетов и их последовательность. Возможные потери данных компенсируются повторной отправкой.

  2. UDP (User Datagram Protocol) — это протокол без установления соединения, который не гарантирует доставку и последовательность пакетов, что делает его более легковесным, но менее надежным с точки зрения потерь и порядка доставки данных.

Проблемы и возможные решения:

  1. NAT и изменение заголовков: При использовании NAT особенно для UDP, заголовки пакетов могут изменяться. UDP не ведет учет состояний подключения, поэтому если SNAT/DNAT не полностью правильно работают, пакеты могут теряться.

  2. Проблемы с маршрутизацией через WireGuard: Конфигурация WireGuard должна учитывать особенности работы UDP, например поддержка обратного трафика. Убедитесь, что маршруты обратного трафика корректно настроены для UDP через WireGuard, т.е., убедитесь в правильной настройке AllowedIPs и других параметров.

  3. Пропускная способность и потери UDP-пакетов: Убедитесь, что MTU обоих интерфейсов настроены оптимально (обычно для WireGuard – 1420).

  4. Файрвол и закрытие портов: Проверьте, не блокируются ли UDP-пакеты на каком-либо из этапов, например, на уровне системного или межсетевого файрвола.

  5. Разрешения и таблицы маршрутизации: Проверьте, чтобы не было отбрасывания UDP-пакетов по причине конфигурационных ошибок в iptables/nftables (например, неправильные номера интерфейсов).

Часто проблема заключается в неправильной конфигурации WireGuard или файрвола, что влияет только на пакеты UDP, поскольку они более чувствительны к изменению сети из-за отсутствия механизма связи, как у TCP. Рекомендуется пройтись по каждому серверу и тщательно проверить каждый из описанных нюансов, чтобы удостовериться в отсутствии ошибок настройки.

Оптимальным подходом к решению будет поэтапная проверка каждого звена сети на корректное выполнение своих функций, начиная с самого базового уровня: WireGuard конфигурация, NAT правила, файрвол политики и затем уже переход к отладке приложений и зависимости от конкретного канала передачи.

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

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