如何使用一个主机服务器公共 IP 访问多个客户虚拟机?

如何使用一个主机服务器公共 IP 访问多个客户虚拟机?

我有一台裸机主机服务器,其中有多个使用 QEMU/KVM 创建的来宾虚拟机,使用虚拟网络“默认”:NAT 选项。只有一个公共 IP 可用。

为了更好地说明:

  • BM 主机服务器(Ubuntu),IP 89.185.xx.xx

  • VM 来宾服务器(Ubuntu)1 号,IP 192.168.122.101

    VM 来宾服务器(Ubuntu)2 号,IP 192.168.122.102

    VM 来宾服务器(Ubuntu)3,IP 192.168.122.103

    ...

现在我想在每个虚拟机上使用不同的端口运行相同的应用程序,并且能够通过相同的公共 IP 从外部连接到每个实例。例如:

  • 89.185.xx.xx:30334

  • 89.185.xx.xx:30335

  • 89.185.xx.xx:30336

    ...

类似设置,如在多个 Docker 容器中运行应用程序。请问我该如何设置?

答案1

取自https://www.systutorials.com/port-forwarding-using-iptables/

将 VM1 的端口从公共 IP 转发到本地 IP:

# iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 30334 -j DNAT --to 192.168.122.101:30334
# iptables -I FORWARD 1 -p tcp -d 192.168.122.101 --dport 30334 -j ACCEPT 

此示例假设本地和远程端口均为30334,且公共接口名称为eth0

相关内容