![与‘传统’伪装 IP 方式相比,firewalld 的“入口”和“出口”如何工作?](https://linux22.com/image/1696247/%E4%B8%8E%E2%80%98%E4%BC%A0%E7%BB%9F%E2%80%99%E4%BC%AA%E8%A3%85%20IP%20%E6%96%B9%E5%BC%8F%E7%9B%B8%E6%AF%94%EF%BC%8Cfirewalld%20%E7%9A%84%E2%80%9C%E5%85%A5%E5%8F%A3%E2%80%9D%E5%92%8C%E2%80%9C%E5%87%BA%E5%8F%A3%E2%80%9D%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
我目前正在使用自己构建的家用路由器进行第二次迭代。
在“原始”版本中,我基本上将“标准”命令包装在防火墙的丰富规则中
在 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: