Назад | Перейти на главную страницу

Как с iptables перевести unicast в трансляцию через NAT?

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

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

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 не работает)