路由和远程访问端口映射未应用于本地主机

路由和远程访问端口映射未应用于本地主机

我已经设置了路由和远程访问 (Windows Server 2003),将 publicip:80 转发到私有内部网络上的服务器,效果很好。从互联网到端口 80 的传入请求被正确转发到我们的内部 Web 服务器,一切正常。

然而,请求在服务器本身上不会被转发。也就是说,如果我打开控制台窗口并从 publicip 上的服务器输入“telnet publicip 80”,则请求不是转发至私人服务器。

我知道我在 RRAS 中映射了端口 80公共接口到私人服务器,这就是它不起作用的原因;但我不知道如何配置它,以便来自本地电脑的请求也转发到私人服务器。

我将非常感激有关此事的任何帮助或反馈。

谢谢!

答案1

您正在寻找的是“发夹式 NAT”,而 Microsoft 的 NAT 实现似乎不支持它。未穿过 NAT 接口的数据包不会被应用 NAT(即从私有或本地接口获取,目的地为私有接口)。

微软的文档对此并没有特别清楚的说明(至少我能找到的),但 RRAS 的行为方式显然不支持发夹式 NAT。

通过在本地 DNS 服务器中为公共名称创建 DNS 区域并引用私有 IP 地址,您可以实现相同的效果(至少在名称上如此)。(因此,如果您的网站是“www.mydomain.com”,请创建一个 DNS 区域“www.mydomain.com”,其中包含一个空白的“A”记录,该记录引用 Web 服务器的私有 IP 地址。)

您唯一的其他选择是切换到支持发夹式 NAT 的 NAT 实现,例如 Linux iptables。

答案2

我已经通过使用“netsh interface portproxy”解决了这个问题,详情如下http://technet.microsoft.com/en-us/library/cc776297(WS.10).aspx

这不会像 RRAS 那样在网络层解决问题,但它确实可以在不借助第三方软件的情况下解决问题。由于只有本地主机会通过 RRAS 过滤器,因此在软件层解决这个问题不是问题。

答案3

其他选项。如果您通过名称访问,您可以在 RRAS 服务器上的本地主机文件中放置一个条目,将名称指向内部 IP。如果您通过 IP 访问,您应该能够放入一个静态路由,该路由表示通过 privateip 路由 publicip。privateip 的服务器应该看到数据包说“嘿,那是我”并适当地处理它,尽管您可能需要另一侧的路由才能正确取回数据包,具体取决于您的网络设置。

相关内容