如何在运行 CentOS 5.4 的专用服务器上设置端口转发以使用 Ubuntu 9.0.4

如何在运行 CentOS 5.4 的专用服务器上设置端口转发以使用 Ubuntu 9.0.4

我的基本情况是一台运行 CentOS 5.4 的专用服务器,目前我有一台运行 Ubuntu 9.0.4 的虚拟机。稍后,我想添加另一台运行 Windows Server 2003 的虚拟机,但目前我专注于启动和运行 Ubuntu。

Ubuntu 安装运行良好,但我真的很难让端口转发正常工作,以便我可以访问托管在 Ubuntu VM 上的网站。作为 Linux 新手,我对 IPTables 和 VMWare 自己的端口转发之间的关系感到困惑。

这是迄今为止我尝试过的。

我的服务器的 IP 是 xxx.xxx.xxx.xxx,提供商支持人员告诉我子网掩码是 255.255.255.0,网关地址是 xxx.xxx.xxx.1,网络地址是 xxx.xxx.xxx.0。(后两个让我有点惊讶,我期望的是私有网关/网络地址,而不是公共地址。)

首先,我尝试了桥接网络,但除了通过 VMware 控制台之外,无法与机器通信。我尝试从主机 ping 它(使用 ssh 进入主机),但没有成功;虚拟机也无法访问互联网。我将接口配置从 DHCP 更改为静态,使用静态地址 192.168.1.100,并按照提供商的建议将网关设置为 xxx.xxx.xxx.1。没有什么实际区别,仍然无法从主机 ping 客户机或反之亦然,并且客户机无法访问互联网。

然后我尝试了 NAT。主机自动将 IP 地址设置为 192.168.132.128,网关为 192.168.132.2。现在,来宾可以访问 Internet,当我对主机执行 VNC 并使用 192.168.132.128 打开 Firefox 时,我可以看到托管的网站,但我仍然无法从外部进入。

我提到我对 IPtables 和 VMware 端口转发有点困惑,我的意思是我不确定是否应该将 IPtable 转发设置为客户机接口的 IP 地址(在本例中为 192.168.132.128)或网关地址 192.168.132.2 。

我感觉我在这里遗漏了一些非常简单的东西,有人能告诉我它是什么吗?

答案1

这是我为我的 centos 主机所需的魔法咒语。简而言之,必须添加新的 iptables 规则才能实现两件事。一是将端口 80(可能还有端口 443)从 VM 转发到主机。二是允许在公有子网和私有子网之间跳跃。如果 vmware 处理所有事情并自动添加规则,您应该会在通过“iptables -nvL”获得的规则列表中找到规则或其功能等效项。如果没有,则必须添加它们。

主机端...

#In my case,
IF_ETH_0=eth0
IF_TUN_0=vbr0 
IP_PRIVATE_WEB=192.168.132.xxx
IP_PUBLIC_0=192.168.1.yyy
#The interface for the VM is vnet0. vbr0 bridges eth0 and vnet0. 
#Using vnet0, instead or vbr0, for IF_TUN_0 will not work.

# port forwarding
/sbin/iptables -t nat --flush 
/sbin/iptables -t nat -A PREROUTING  -p tcp -i $IF_ETH_0 -j DNAT -d $IP_PUBLIC_0 --dport 80 --to $IP_PRIVATE_WEB:80 
/sbin/iptables -t nat -A POSTROUTING -p tcp -o $IF_ETH_0 -j SNAT -s $IP_PRIVATE_WEB --to-source $IP_PUBLIC_0 

# the private internal VM address and public-facing host address are on different subnets
# add rules to allow travel between subnets
/sbin/iptables -A FORWARD -i $IF_TUN_0 -o $IF_ETH_0 -j ACCEPT 
/sbin/iptables -A FORWARD -i $IF_ETH_0 -o $IF_TUN_0 -j ACCEPT

虚拟机端...

# open up ports 40 and 443
/sbin/iptables -A INPUT  -j ACCEPT -p tcp --dport 40  -m state --state NEW
/sbin/iptables -A INPUT  -j ACCEPT -p tcp --dport 443 -m state --state NEW
# allow established traffic to pass
/sbin/iptables -A INPUT  -j ACCEPT -m state --state ESTABLISHED,RELATED 

答案2

您根本不需要使用 iptables 进行端口转发。Vmware 的端口转发机制应该会为您处理好这个问题。查看 vmware 服务器手册中的高级 NAT 配置 -> 主机部分 -> 传入 TCP 部分以设置端口映射。

如果主机和客户机上的端口 80 尚未打开,则可能需要使用 iptables 打开它们,但您不需要任何转发规则。

相关内容