Windows Server 2008 - 连接到 127.0.0.1

9 windows windows-server-2008 routing ip localhost

我正在运行 Windows Server 2008 R2,我们有一个应用程序从(绑定到)服务器上的公共 IP 连接到 127.0.0.1:8334 [连接到侦听 0.0.0.0:8334 的服务]

在 Windows 2003 中,这没有问题。我们可以使用 TCP 从 1.2.3.4 [eg] 连接到 127.0.0.1:8334 就好了。

在 Windows 2008 中,我们发现从公共 IP(例如 1.2.3.4 到 127.0.0.1:8334)的 TCP 连接甚至失败。但该服务接受从 127.0.0.1 到 127.0.0.1:8334 和 127.0.0.1 到 1.2.3.4:8334 的连接。

尝试关闭 Windows 防火墙,配置其日志记录等(没有显示有用的日志条目),但无济于事。这是新网络堆栈的问题吗?

编辑

1.2.3.4 正在尝试连接到同一台机器上的 localhost [127.0.0.1]

主机文件是默认的 Windows 2008 主机文件。

环回检查信息,有趣。试过了……没用。交叉检查以验证 Id 是否正确完成了所有操作 - 我有。

我想知道是否有使用 NAT 或其他方式来转发端口的解决方案 - 如果我将 127.0.0.1:port 转发到 1.2.3.4:port,那会起作用吗?鉴于应用程序侦听 0.0.0.0:port,它将在 1.2.3.4:port 上获取连接

HOSTS 文件确实包含 localhost 127.0.0.1 - 但是,hosts 文件仅用于主机名查找。在这种情况下,我们的应用程序不会查找任何主机名,因为 127.0.0.1 IP 地址被硬编码到其中(而不是 localhost 主机名)。所以 HOSTS 文件不会在这里发挥作用。

至于 1024 以上的端口 [认为您可能指的是 MaxUserPort 问题吗?] 我通过尝试简单连接到端口 445 来测试这一点 - 从 127.0.0.1 开始工作,当我从源 IP 1.2.3.4 连接时不起作用。445 是标准的 Windows 服务,所以应该可以工作!

目前没有在机器上运行 NAT 或 RRAS...想知道是否有办法进行重新路由 - 我猜它不会工作,因为 TCP/IP 堆栈将在数据包到达环回接口以重新路由之前拒绝该数据包。

我检查过的路由打印 - 看起来不错,首先路由公共 IP,然后最后路由 127.0.0.0 网络掩码 255.255.255.0 和 127.0.0.1 网络掩码 255.255.255.255 都到环回。

编辑 似乎我已经找到了问题原因的答案。我用过eventvwr.msc,启用Winsock日志,关闭其他服务,刚试过这个连接测试。当我在谷歌上搜索它时,得到一个以十六进制映射到 STATUS_INVALID_ADDRESS_COMPONENT 的错误。

这让我:http : //social.msdn.microsoft.com/Forums/en-US/wfp/thread/d7cb6138-3f67-4467-a068-8325f56739ba

这证实这是 WFP 中针对 Vista/7/Server 2008 [windows 过滤平台] 的设计更改。

[见 Anupama Vasanth 的回应]

看起来我将不得不走艰难的路线并重写代码[很难,因为这意味着与经理打交道!]

感谢您帮助我定位/确认问题!

Gen*_*нин -3

我最确定它与环回检查安全功能有关,尽管我无法深入了解它是如何实现的,只能了解如何克服它:

http://chillicode.wordpress.com/tag/loopback-check/

对于“适用于”Windows 2008,请参阅http://support.microsoft.com/kb/896861


那么,您的 HOSTS 文件中到底有什么?我没有W2008。你的意思是那里没有“127.0.0.1 localhost”吗?

我还在某处读到默认 W2008 设置不允许与大于 1024 的端口进行通信。


您可以通过以下方式直接向 MS 团队提交有关 MS Windows Server 2008 的反馈

他们会回复

如果您尝试通过注册表编辑方法关闭“环回检查”,则需要重新启动。另一种 - 不是。

机器内部NAT?127.0.0.1没有转发或路由,我相信是这样,它是内部的,你可以拔掉网卡,你的1.2.3.4将会消失,但127.0.0.1将继续存在。

你的(运行--> cmd --> 路由打印)的输出是什么?

我心里想,还有一个时刻,尽管我不知道如何将它组合起来。

127.0.0.1 是 localhost(接口),它是单标签名称并被视为本地。1.2.3.4 是非单标签名称。

可能的问题是这样的名称可能被视为外部名称


你可以单独尝试一下:

  1. 是否在网络适配器上禁用(如果已启用,如果已禁用则启用)IPv6?

  2. 将 1.2.3.4 的一些单标签名称放入 HOSTS 文件中?


eventvwr.msc 中 1.2.3.4 到 127.0.0.1:8334 通信失败对应的事件描述、EventID 等是什么?


“445 是标准 Windows 服务”

是用于 TCP/IP 上的 SMB 直接吗?用于文件共享?CIFS?

不太可靠...它经常被微软的修补程序攻击。读:

(“升级到 Windows Server 2008 后,跨子网浏览 NetBIOS 可能会失败”) - http://blogs.technet.com/b/networking/archive/2008/07/25/netbios-browsing-across-subnets-may-fail -升级到windows-server-2008.aspx?wa=wsignin1.0后

然后,

“我们遇到了与前面描述的相同的问题,即 Vista SP2 计算机尝试访问 Windows Server 2008 SP1 或 SP2 文件共享。文件共享服务受 Windows 防火墙的高级安全性保护,使用预定义的文件共享规则 (SMB) 请求访问安全连接”