IPv4 端口是否与 IPv6 端口分开?

chr*_*amp 17 ipv6 iptables

主机是否可以为 IPv4 和 IPv6 堆栈提供不同的开放端口?例如,让端口 22 仅对 IPv6 开放而不对 IPv4 开放,反之亦然是否可行?此外,当我尝试仅为 IPv6 阻止端口时,它没有任何效果:

ip6tables -A INPUT -p tcp --dport 22 -j REJECT
Run Code Online (Sandbox Code Playgroud)

LPC*_*hip 37

当然是。事实上,TCP 上的端口与相同 IPv6 地址上的 UDP 上的相同端口之间甚至存在差异,这也是您指定的原因-p tcp

IPv4 是一种与 IPv6 不同的机制,它们具有单独的接口、单独的 IP 地址和单独的端口。事实上,您不能使用 IPv6 连接到 IPv4 地址,除非您有某种中间人为您做这件事。但是这样的中介会简单地接受 IPv4,然后将该连接桥接到新的 IPv6。

如果您有 2 个网卡,它们都有不同的 IP 地址,情况也是一样的。然后,您还必须指定正确的 IP 地址。

但这基本上都归结为:您有一个托管服务器的程序,查看其配置打开的端口,并根据其 ipv4、ipv6 和 tcp 或 udp 或两者上的端口使用情况进行阻止。


Rom*_*sky 12

是的,它们是完全分开的。在 POSIX 中,您使用 socket(2) 系统调用创建套接字,并将 AF_INET 或 AF_INET6 传递给它以分别在 IPv4 和 IPv6 之间进行选择。这样的套接字可以使用相同的端口号而不会产生任何干扰。

但是,Linux 具有以下功能:侦听某个端口的 IPv6 套接字也将获取源地址映射到 IPv6 地址的IPv4 流量。这可以通过设置IPV6_V6ONLY关闭。


Rod*_*ney 9

简而言之

是的

请注意,应用程序不必同时绑定到 IPv4 和 IPv6,因此即使没有 IP 表,您也可以这样做。

查看 sshd 配置或其他应用程序中的 ListenAddress 指令。

并不是说您想这样做,但是完全有可能让 ssh 服务器侦听 TCP/IP6 端口 22,而 Web 服务器侦听 TCP/IP4 端口 22。

iptablesip6tables单独配置。

请注意,正如评论中所指出的,IP 本身没有端口,但一些最常用的传输协议 TCP 和 UDP 确实有端口。这就是为什么在按端口过滤之前iptables需要类似的东西-p tcp,否则port是没有意义的。