尊敬的网络专家
我在云中有一个 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-persistent
和iptables-persistent
包)。
另外,要注意安全!如果此网络还包含不受您控制的机器,则必须在表链中过滤它们filter
(FORWARD
只允许转发您的机器,并根据策略禁用其他所有机器)。您还可以在链中控制(过滤)对此 NATing 机器的访问INPUT
。