在 VPS 的公共 IP 下公开 NAT 后虚拟机

在 VPS 的公共 IP 下公开 NAT 后虚拟机

云中某处有一个具有公共 IP 地址的 VPS。另外,我的车库深处有一个虚拟机,通过 NAT 连接到互联网。

我已经在两台机器之间建立了永久的 OpenVPN 链接。他们可以毫无问题地互相交谈。 VPS的私有IP是10.0.0.1,VM的私有IP是10.0.0.2。

现在,我希望任何人/任何东西尝试连接到 VPS 的公共 IP(在任何端口上)实际连接到虚拟机。唯一的例外是端口 22 和 1194 — 这样我仍然可以连接到 VPS 本身,并且 VPN 链接保持正常运行。

也就是说,VPS 的 iptables、路由或任何需要配置为转发的内容全部传入连接(除了 2 个指定端口)到 10.0.0.2。

那怎么办呢?

使用案例:公开在虚拟机上运行的 WebRTC 流服务器。有一个需要公开的各种端口和协议的垃圾负载,因此单独转发它们是不切实际的。预计 WebRTC 在客户端连接到公共 IP 时,将引导/建立与虚拟机的直接 P2P 连接,正如它的设计目的一样。

答案1

要排除某些端口,您可以使用与它们匹配的规则,但“不执行任何操作”来停止进一步处理:

iptables -t nat -A PREROUTING -p TCP --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -p UDP --dport 1194 -j ACCEPT

然后进行实际转发并设置“returnpath”:

iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination 10.0.0.2
iptables -t nat -A POSTROUTING -d 10.0.0.2 -j MASQUERADE

相关内容