在 before.rules 的顶部添加以下 UFW 配置(除了所有相应的先决条件,例如在平台本身上启用 IP 路由、将默认转发策略从 DROP 更改为 ACCEPT 以及在 UFW 配置中启用 IP 转发):
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.100.0.0/24 -o ens3 -j MASQUERADE
COMMIT
子网 10.100.0.0/24 是否必须直接地连接到运行该 UFW 的 Ubuntu VM 的任何接口?如果是,我该如何配置 UFW 以将非直接连接的接口 NAT 到 Internet?例如:
UserA--10.100.0.x/24---10.100.0.1/24--(Router1)--1.1.1.1/24-----1.1.1.2/24--(UFW)--Internet
提前谢谢了!
答案1
联邦水务局是一个接口网络过滤器它使用iptables用于配置。
这意味着,当您尝试编辑配置文件时,您正在编辑 iptables 规则。因此,您可以在iptables 手册。
每个 iptables 规则都会做两件事:
- 匹配 IP 数据包
- 对数据包执行操作
就您想知道的规则而言,它将匹配任何已路由到接口发送的数据包ens3
,并且源 IP 在 10.100.0.0/24 网络中。一旦匹配,它将被 NAT 到ens3
接口的 IP 地址。
转发 - 无 UFW
我怀疑你在提问时做出了假设,并没有说明你试图解决的实际问题是什么。听起来你无法将网络 10.100.0.0/24 转发到互联网。这个问题听起来像XY问题
如果您通过 Linux 路由流量,则必须启用 IP 转发。
要验证转发是否已启用,请运行:
echo /proc/sys/net/ipv4/ip_forward
您将获得0
和disabled
的1
回报enabled
。
什么时候不是使用联邦水务局您可以通过编辑来永久启用它/etc/sysctl.conf
:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
上述命令将把引号中的文本附加到上述文件中。
要应用新设置,请运行:
sudo sysctl -p
联邦水务局
尽管上述设置适用于联邦水务局坚持使用 ufw 基本配置是明智之举。
检查 UFW 配置:
sudo ufw status verbose
您可能会看到默认routed
策略是disabled
:
Default: deny (incoming), allow (outgoing), disabled (routed)
现在编辑/etc/ufw/sysctl.conf
。此文件中的设置将覆盖/etc/sysctl.conf
上述文件中的定位行#net/ipv4/ip_forward=1
并删除#
。
保存文件并重新加载 ufw:
sudo ufw reload
这次显示详细状态时,您应该看到默认路由策略从 更改disabled
为deny
。
要允许路由运行:
sudo ufw default allow routed
此命令将修改/etc/default/ufw
行,从
DEFAULT_FORWARD_POLICY="DROP"
到
DEFAULT_FORWARD_POLICY="ACCEPT"
化装舞会
使用上述设置,您的规则/etc/ufw/before.rules
应该可以工作,但它们必须在之前。在添加新规则之前*filter
刷新规则也是一个好主意。否则,任何时候重新启动 ufw 服务,它都会添加同一规则的另一个副本。-F
-A
*nat
:POSTROUTING ACCEPT [0:0]
-F
-A POSTROUTING -s 10.100.0.0/24 -o ens3 -j MASQUERADE
COMMIT
应用这些设置后,需要重新加载 ufw:
sudo ufw reload
ufw 状态不会显示 NAT 配置,但可以通过以下iptables
方式进行验证:
sudo iptables -t nat -L -v
并且该POSTROUTING
链应如下所示:
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- any ens3 10.100.0.0/24 anywhere
请记住,您的防火墙还需要有一条返回 10.100.0.0/24 网络的路由。