Как перевести одноадресную трансляцию через 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 не работает)