Мне нужно пересылать (маршрутизировать) широковещательные пакеты от нескольких беспроводных клиентов на один сервер в фиксированной сети. Беспроводная и фиксированная сеть не соединены мостом из соображений безопасности.
В следующих строках пакеты отображаются в журнале цепочки INPUT
iptables -I INPUT -i $IF_WIFI -p udp --dport 6000 -j LOG --log-prefix "I "
iptables -I FORWARD -i $IF_WIFI -p udp --dport 6000 -j LOG --log-prefix "F "
Теперь добавляю следующее правило
iptables -t nat -A PREROUTING -p udp -d 255.255.255.255 --dport 6000 -j DNAT --to 10.0.0.10:6000
Теперь пакеты не будут отображаться ни в журнале INPUT, ни в журнале FORWARD и не будут перенаправлены в фиксированную сеть. Я ожидал увидеть пакет в журнале FORWARD
Правило PREROUTING выполняется согласно
iptables -t nat -v --list
Chain PREROUTING (policy ACCEPT 466 packets, 28575 bytes)
pkts bytes target prot opt in out source destination
404 25819 DNAT udp -- any any anywhere 255.255.255.255 udp dpt:6000 to:10.0.0.10:6000
(обновлено) IP-переадресация включена
# cat /proc/sys/net/ipv4/ip_forward
1
Я что-то упустил?
Более простое решение - настроить мост, но использовать ebtables вместо iptables, чтобы обеспечить соблюдение правила «только широковещательные пакеты могут проходить через мост». Вы хотите установить для политики FORWARD значение DROP, а затем использовать такое правило, как:
ebtables -A FORWARD -s FF:FF:FF:FF:FF:FF -j DROP
Это будет иметь тот же эффект, но поможет обойти трудности, с которыми вы сталкиваетесь.
(На самом деле я не уверен, что разрешение только широковещательной передачи намного безопаснее, чем разрешение всего пройти, независимо от того, как вы это реализуете)