我的 Ubuntu 机器上有一个带 iptables 的接入点。机器有 eth0 和 wlan0,它们桥接在一起形成接口 br0。eth0
和 wlan0 之间不应该有任何防火墙,我希望流量自由流动且不受限制。如果流量在 eth0 或 wlan0 处停止,防火墙就会启动
因此我在 iptables 中尝试了这个似乎可以工作的代码。
$IPTABLES -N RULE_3
$IPTABLES -A FORWARD -m physdev --physdev-is-bridged --physdev-in eth0 --physdev-out wlan0 -m state --state NEW -j RULE_3
$IPTABLES -A FORWARD -m physdev --physdev-is-bridged --physdev-in wlan0 --physdev-out eth0 -m state --state NEW -j RULE_3
$IPTABLES -A RULE_3 -j LOG --log-level info --log-prefix "RULE 3 -- ACCEPT "
$IPTABLES -A RULE_3 -j ACCEPT
但是,由于某些原因,一些软件包被删除了,所以我无法在 wlan0 设备上播放 YouTube。这是我在日志中发现的
Apr 10 21:32:03 NASHTPC kernel: [273846.062793] RULE 8 -- DENY IN=br0 OUT=br0 PHYSIN=wlan0 PHYSOUT=eth0 MAC=************** SRC=192.168.0.15 DST=17.172.208.47 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=63737 PROTO=TCP SPT=58807 DPT=443 WINDOW=65535 RES=0x00 ACK FIN URGP=0
Apr 10 21:32:03 NASHTPC kernel: [273846.070615] RULE 3 -- ACCEPT IN=br0 OUT=br0 PHYSIN=wlan0 PHYSOUT=eth0 MAC=**************** SRC=192.168.0.15 DST=17.172.208.47 LEN=64 TOS=0x00 PREC=0x00 TTL=64 ID=2782 DF PROTO=TCP SPT=58808 DPT=443 WINDOW=65535 RES=0x00 SYN URGP=0
Apr 10 21:32:03 NASHTPC kernel: [273846.776553] RULE 8 -- DENY IN=br0 OUT=br0 PHYSIN=wlan0 PHYSOUT=eth0 MAC=************** SRC=192.168.0.15 DST=17.172.208.47 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=10631 PROTO=TCP SPT=58807 DPT=443 WINDOW=65535 RES=0x00 ACK FIN URGP=0
问题似乎是防火墙丢弃了我的 ACK/FIN 包。规则 8 是 DENY ALL 规则。
有什么建议可以解决这个问题吗?我是否应该将规则 3 更改为其他内容以允许流量自由流动?
答案1
如果你希望流量畅通不受限制,然后这样做:
iptables -A FORWARD -m physdev --physdev-is-bridged --physdev-in eth0 --physdev-out wlan0 -j ACCEPT
iptables -A FORWARD -m physdev --physdev-is-bridged --physdev-in wlan0 --physdev-out eth0 -j ACCEPT
有关 TCP 标志含义的详细信息,请参见:这里
答案2
你转发的只是NEW
状态,而不是 ACK FIN,后者在 SYN/ACK 数据包之后被视为 ESTABLISHED
你可以试试这个吗:
$IPTABLES -N RULE_3
$IPTABLES -A FORWARD -m physdev --physdev-is-bridged --physdev-in eth0 --physdev-out wlan0 -m state --state NEW,RELATED,ESTABLISHED -j RULE_3
$IPTABLES -A FORWARD -m physdev --physdev-is-bridged --physdev-in wlan0 --physdev-out eth0 -m state --state NEW,RELATED,ESTABLISHED -j RULE_3
$IPTABLES -A RULE_3 -j LOG --log-level info --log-prefix "RULE 3 -- ACCEPT "
$IPTABLES -A RULE_3 -j ACCEPT