没有公网 IP 接口的服务器可以作为 NAT 吗?

没有公网 IP 接口的服务器可以作为 NAT 吗?

尊敬的网络专家

我在云中有一个 Ubuntu 18.04 实例(假设为 A),它被分配了一个公共 IP 地址,可以从互联网登录,但是它的唯一网络接口是私有的:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether d0:0d:5d:03:3c:17 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.17/24 brd 10.0.1.255 scope global eth0

我知道云提供商正在为我做 NAT。

现在我有另一个虚拟机,假设为 B,在同一个私有子网中没有这样的 NAT,并且无法从互联网访问 B,也无法访问公共服务器。

现在,我想使用 A 作为 NAT 或路由器从 B 访问互联网。我假设如果我可以从 A 访问互联网,那么我可以以某种方式设置它以转发来自 B 的流量。

然而,A 的传统 NAT 方案(例如在 man ufw-framework 中)似乎对我来说不起作用,因为我猜他们假设 A 应该在接口上有一个真正的公共 IP。

所以,问题是 - 按照我描述的设置,是否可以通过 A 为 B 提供互联网?

提前致谢!

答案1

当然,除了您的提供商所做的之外,您还可以做另一个 NAT。

ufw只是一个 netfiter 脚本生成器。如果它不能完成它的工作,就把它扔掉,它只会掩盖一些东西。

要执行 NAT,您只需要在防火墙中设置一条规则:

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

就是这样。此系统现在将伪装(NAT)任何其他系统的流量,即使需要转换的流量来自 eth0。您需要在所有其他系统上将其 IP 地址指定为网关。

如果选择这条路线,您还需要手动启用 IP 转发(net.ipv4.ip_forward=1在中/etc/sysctl.conf),在所有系统上禁用重定向(参见..._redirects/etc/sysctl.conf)并启用规则保存/自动加载(使用netfilter-persistentiptables-persistent包)。

另外,要注意安全!如果此网络还包含不受您控制的机器,则必须在表链中过滤它们filterFORWARD只允许转发您的机器,并根据策略禁用其他所有机器)。您还可以在链中控制(过滤)对此 NATing 机器的访问INPUT

相关内容