UFW 处于非活动状态,但 IP 转发被阻止

UFW 处于非活动状态,但 IP 转发被阻止

我有两台虚拟机(在 VirtualBox 中),它们都是 Ubuntu Server 18.10 (cosmic):

  • 第一个Server有两个网卡:一个在 NAT 中,另一个在 intnet 中
  • 第二台机器Client只有一个网卡,位于 intnet 中,可以进行通信Server

现在我想创建Server一个网关,因此我启用了 IP 转发(通过修改sysctl.conf,重新启动它等等)。

当我检查sudo ufw status(打开Server)时,它显示inactive。好的。但我无法 ping 任何外部 IP 地址,直到我使用以下命令Client将 iptables 设置为打开Server

iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

只要按下 Enter 键,输入的 ping 命令Client就会起作用。但是为什么 UFW 处于非活动状态呢?

答案1

UFW 不活跃与此无关。

iptables通俗的话来说,你必须无论如何,在 NAT 表中设置MASQUERADE规则以使流量能够转发出站。否则,系统将不知道如何处理数据包。即使您直接使用iptables来操纵*filter规则(设置INPUTOUTPUT等访问控制列表等,甚至只是设置ALLOW这些策略集上的所有流量),情况仍然如此 - NAT 始终在起作用,您必须添加 NAT 规则以使转发的流量伪装成服务器的主 IP 发送到 Internet。

因此,无论是否使用 UFW,您都必须添加规则,以便让系统了解如何转换数据包并通过服务器将其路由到 Internet,以及如何自动处理反向路由。


这个 Github GIST我发现它很好地解释了如何为 UFW 执行此操作:

最后一步是将 NAT 添加到 ufw 的配置中。在 /etc/ufw/before.rules 的过滤规则之前添加以下内容。

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through eth0 - Change to match you out-interface
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these nat table rules won't
# be processed
COMMIT

答案2

我也有类似的观察,但在我的例子中,下面发生了

  1. 我已经禁用了 ufw
  2. 重新启动 ubuntu 服务器后,PING 测试不会从一个接口遍历到另一个接口
  3. 如果我启用/禁用 ufw 并重试,它就会起作用

我正在使用 Ubuntu 18.04

相关内容