Как перевести одноадресную трансляцию через DNAT с помощью iptables?

Как преобразовать одноадресный пакет UDP в широковещательный адрес через DNAT с помощью iptables или что-то другое?

1 ответ

Решение

С iptables невозможно (AFAIK), если вы не разрешите трафику вещания проходить к маршрутизатору (ИМХО плохая идея).

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

Другой вариант - установить статическую запись ARP, которая преобразует целевой одноадресный IP-адрес в широковещательный Ethernet-адрес.

На самом деле iptables не осуществляет трансляцию. Механизм маршрутизации может сделать это, когда увидит, что пакет имеет широковещательный адрес назначения.

Как было сказано ранее, он по умолчанию отбрасывает любую перенаправленную трансляцию.

В последнем ядре Linux (около версии 5.0) появилась возможность перенаправлять прямую трансляцию UDP.

Вам необходимо изменить параметр bc_forwarding для широковещательного сетевого интерфейса:

sudo sysctl -w net.ipv4.conf.eth1.bc_forwarding=1

(Примечание: это кажется вариант net.ipv4.conf.Все.bc_forwarding не работает)

Другие вопросы по тегам