防火墙和 NAT

防火墙和 NAT

所以我被赋予了一个任务来总体了解firewalld 和linux 网络。这是我的测试设置:

在此输入图像描述

路由器和客户端运行的是 Debian 12,笔记本电脑运行的是 Ubuntu 22.04。

此设置应实现以下目标:

  1. 路由器显然应该充当子网 192.168.8.0/24 和 192.168.7.0/24 之间的路由器
  2. 笔记本电脑和客户端应该能够互相 ping 通
  3. 如果源 IP 为 192.168.7.120,则来自客户端的流量应通过 192.168.8.120 进行 nated
  4. 如果源 IP 为 192.168.7.121,则来自客户端的流量应通过 192.168.8.121 进行 nat
  5. 具有firewalld标准功能的路由器上的防火墙,没有直接规则

我的问题是实现 5。无论我尝试什么,流量始终通过 192.168.8.120 进行 NAT。

这是防火墙配置:

firewall-cmd --permanent --new-zone=ext0
firewall-cmd --permanent --zone=ext0 --set-target=default
firewall-cmd --permanent --zone=ext0 --add-masquerade
firewall-cmd --permanent --zone=ext0 --add-forward 
firewall-cmd --permanent --zone=ext0 --add-service=ssh
firewall-cmd --permanent --zone=ext0 --change-interface=enp1s0:0
firewall-cmd --permanent --zone=ext0 --add-source=192.168.7.120
firewall-cmd --permanent --zone=ext0 --add-source=192.168.8.100/32

firewall-cmd --permanent --new-zone=ext1
firewall-cmd --permanent --zone=ext1 --set-target=default
firewall-cmd --permanent --zone=ext1 --add-masquerade
firewall-cmd --permanent --zone=ext1 --add-forward
firewall-cmd --permanent --zone=ext1 --add-service=ssh
firewall-cmd --permanent --zone=ext1 --change-interface=enp1s0:1
firewall-cmd --permanent --zone=ext1 --add-source=192.168.7.121
firewall-cmd --permanent --zone=ext1 --add-source=192.168.8.0/24

我使用了各种配置,它们仅在接口名称方面略有不同,因为我尝试了不同的设备类型:

  • 虚拟接口,我在这里看到的问题是 enp1s0:0 和 enp1so:1 等两个设备共享相同的 MAC 地址。尝试分配新的本地 MAC 地址,并尝试将每个接口包装到网桥中。
  • VLAN,同样的问题,也尝试分配 MAC 并绕入网桥。
  • 虚拟接口对于外界来说似乎是不可见的,包裹成桥也没有帮助。

基本思想是:两个区域,一个用于 192.168.8.120 上的流量,一个用于 192.168.8.121 上的流量。将具有相应 IP 的“传出”接口添加到每个区域,打开伪装和转发,最后添加“传入”接口或 IP 地址作为源。事实证明,仅添加接口是不够的,只有在添加 IP 源时才有效。

我看到的另一个问题是我无法将相同的源添加到firewalld 中的不同区域(注意源192.168.8.100/32 和192.168.8.0/24)。 AFAIK IP 源优先于接口,区域按字母顺序处理,因此至少来自 192.168.8.100 的流量(例如回显回复)将滞留在区域 ext0 中。

由于firewalld文档表明丰富的规则应该只是最后的手段,我还没有真正深入研究这一点(现在就这样做,任何指针都值得赞赏)。

那么我做错了什么?这可以通过firewalld的基本功能来完成吗?

预先感谢您的帮助:)

相关内容