localhost上的双栈ipv6 / ipv4

时间:2010-02-17 00:39:24

标签: networking ipv6

我有一个只接受localhost连接的ipv4服务器(使用INADDR_LOOPBACK)。我想将此服务器转换为双栈ipv6 / ipv4。但是,使用in6addr_loopback仅接受与::1的连接。

我发现我可以使用in6addr_any同时接受ipv4和ipv6连接,但是因为这也允许来自任何地方的连接,这对我的特定情况没用。

是否可以同时绑定到ipv6 localhost(::1)和ipv4 localhost(127.0.0.1)?

2 个答案:

答案 0 :(得分:4)

AFAIK,这是不可能的。

您需要做的是创建两个套接字,一个绑定到INADDR_LOOPBACK,另一个绑定到in6addr_loopback。然后,您可以使用您选择的多路复用器(poll,select,epoll等)同时等待它们。

<强>更新

刚刚提出了一些你可能想要考虑的解决方法。在这两种解决方法中,您都绑定到in6addr_any

  1. 建立连接后,检查远程地址,如果不是127.0.0.1或:: 1,请将其关闭。虽然在IP地址上连接的行为并不理想(建立连接/立即关闭而不是被拒绝),但这可以完全在您的应用程序中完成。
  2. 调整操作系统IP堆栈的设置,以拒绝从非环回IP到端口的连接。这在使用iptables的Linux上绝对可行。虽然行为更理想,但它需要在您的应用程序外部进行配置。

答案 1 :(得分:-4)

仅仅因为您的服务器是双栈,您的localhost专用应用程序真的需要吗?你能选择一个并随身携带吗?