情况:我有一个专用的服务器(CentOS 6)和Virtual Box中的几台虚拟机(Cent OS 7和Windows Server 2012 R2)。 几乎没有应用程序在Windows中运行,可以从主IP(XX105.20)使用mod proxy进行访问。 托pipe在Linux VM中的应用程序需要可以从不同的IP(XX109.118)(服务器的第二个IP地址)访问。
我试过了什么:到目前为止,我试图从这个SF问题的 IP转发,但应用程序无法访问。
iptables -t nat -A PREROUTING -p tcp -d XX109.118 -j DNAT --to-destination 192.168.56.102 iptables -t nat -A POSTROUTING -p tcp -d 192.168.56.102 -j SNAT --to-source XX109.118 iptables -I FORWARD -m state -d 192.168.56.102 --state NEW,RELATED,ESTABLISHED -j ACCEPT
顺便说一下,应用程序可以从Windows Guest和CentOS主机访问
编辑基于评论:我有两个域。 一些基于.net的Web应用程序正在使用其中一个域的子域在Windows Server中运行。 而且我正在为在Linux中运行的应用程序使用另一个域名。 所以它的全名是基于第一个域(及其子域)的访问权限,也是使用主IP地址。 第二个域名已经注册到附加IP地址XX1.118。 ping也很好(同时使用IP和域名)。 我只想要这个IP可以发送(和接收)所有的通信到虚拟机在192.168.56.102。
你的第二个规则是匹配192.168.56.102作为目的地,但POSTROUTING链需要用来重写来自192.168.56.102 (响应)的数据包的来源( – 源)。
将您的第二条规则更改为:
iptables -t nat -A POSTROUTING -p tcp -s 192.168.56.102 -j SNAT --to-source XX109.118
要么
iptables -t nat -A POSTROUTING -p tcp -s 192.168.56.102 -j MASQUERADE
您将发送目标为XX109.118所有tcp数据包发送到linux VM,因此您不能在专用主机上监听此地址的任何Web服务器。
确保apache没有监听正在转发的IP地址,以避免数据包被INPUT链处理。
或者您可以为域configuration一个基于名称的虚拟主机,但只能监听地址(just this virtualhost listening on XX109.118)并删除iptables规则。
即:
<Virtualhost XX109.118:443> [...] </Virtualhost>