过滤器表中的FORWARD和FORWARD_direct链之间的区别?

过滤器表中的FORWARD和FORWARD_direct链之间的区别?

我需要从互联网上通过 ssh 访问我的一台虚拟机。

我在防火墙表中添加了 NAT 规则,但它不起作用。

firewall-cmd --add-rich-rule 'rule family="ipv4" destination address=$mypublicip forward-port port="4444" protocol="tcp" to-port="22" to-addr="$myprivateip"'

经过更多调查后,我发现我可以使用 iptables 添加以下两个规则的组合,并且效果很好。

iptables -t nat -I PREROUTING -p tcp --dport 4444 -j DNAT --to $myprivateip:22
iptables -I FORWARD -o virbr0 -d $myprivateip -j ACCEPT

因为我喜欢firewall-cmd命令行,所以我尝试使用firewall-cmd命令行添加相同的iptables规则,并使用以下命令来完成。

firewall-cmd --direct --permanent --add-rule ipv4 nat PREROUTING 0 -d $myip -p tcp --dport 4444 -j DNAT --to $myprivateip:22
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -o virbr0 -d $myprivateip -j ACCEPT

检查我的防火墙表后,我意识到 PREROUTING_direct 和 FORWARD_direct 表中存在最后 ​​2 条规则,它们无法正常工作,并且不提供我的 SSH 访问权限。

PREROUTING 和 PREROUTING_direct 或 FORWARD 和 FORWARD_direct 表之间有什么区别?如果它们是仅用于 --direct 规则的相同表,为什么它们不能像 PREROUTING 和 FORWARD 表一样工作?

相关内容