我需要将来自多个无线客户端的广播数据包转发(路由)到固定网络中的单个服务器。出于安全原因,无线和固定网络未桥接。
使用以下几行,数据包将显示在 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
我是否忽略了什么?
答案1
更简单的解决方案是配置网桥,但使用 ebtables 而不是 iptables 来强制执行“只有广播数据包可以穿过网桥”规则。您需要将 FORWARD 策略设置为 DROP,然后使用如下规则:
ebtables -A FORWARD -s FF:FF:FF:FF:FF:FF -j DROP
这会产生同样的效果,但应该可以解决您所看到的困难。
(无论如何实现,我实际上并不相信只允许广播比允许所有内容通过更安全)