我目前正在使用自己构建的家用路由器进行第二次迭代。
在“原始”版本中,我基本上将“标准”命令包装在防火墙的丰富规则中
在 V1 上
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o enp1s0 -j MASQUERADE
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i br0 -o enp1s0 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --runtime-to-permanent
我了解这是如何工作的,我已经打开了伪装,我告诉防火墙将端口从“内部”桥接接口转发到外部桥接接口,并接受来自外部已经建立的连接。
“现代”版本允许我将一个或多个接口添加到区域,然后为区域
firewall-cmd --new-policy internal-external --permanent
firewall-cmd --policy internal-external --add-ingress-zone=internal --permanent
firewall-cmd --policy internal-external --add-egress-zone=external --permanent
firewall-cmd --policy internal-external --set-target=ACCEPT --permanent
它更加优雅,更容易管理,但是 - 它实际上能做什么呢?
geek@router-t1:~$ sudo firewall-cmd --info-policy internal-external
[sudo] password for geek:
internal-external (active)
priority: -1
target: ACCEPT
ingress-zones: internal
egress-zones: external
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
我没有看到任何伪装发生 - 而且我的印象是这对于 NAT 的工作是必要的 - 它是如何在“幕后”工作的 - 以及它使用了什么机制?
答案1
您可能已经找到了答案,所以这是留给后人的:外部区域默认启用伪装。列出区域而不是策略,您就会看到它。
user@router:~$ sudo firewall-cmd --info-zone external
external (active)
target: default
icmp-block-inversion: no
interfaces: wan
sources:
services: ssh
ports:
protocols: icmp
forward: yes
masquerade: yes
source-ports:
icmp-blocks:
rich rules: