IPv6 的 IPv4 映射地址(IPv4-mapped IPv6)是指这种:
IPv4 地址:192.168.100.1
能够在 IPv6 写成 ::FFFF:192.168.100.1
正常来讲,应用程序只要关闭“IPv6 only”选项(当然了,操作系统也得支持),那么就可以用一个 IPv6 socket 同时处理 IPv4 的连接。
在目前活跃的各个操作系统当中,OpenBSD 早在 2012 年就十分明确地表明不支持这种操作,理由是“出于安全考虑”。
For security reasons, OpenBSD does not route IPv4 traffic to an AF_INET6 socket, and does not support IPv4 mapped addresses, where IPv4 traffic is seen as if it comes from an IPv6 address like “::ffff:10.1.1.1”. Where both IPv4 and IPv6 traffic need to be accepted, bind and listen on two sockets.
只不过,不但 Windows 和 Linux 都支持这种映射地址,就连同样是 BSD 家族的 FreeBSD 和 NetBSD 也一样支持,我实在想不出 OpenBSD 说的 security reasons 到底是什么样安全顾虑。
能够搜到的理由“解释”也就来自这两个地方(都是 2015 年的):
https://lwn.net/Articles/688462/ (这篇文章被人机翻成 https://linux.cn/article-7823-1.html )
还有 https://stackoverflow.com/questions/32051957/ipv6-why-are-ipv4-mapped-addresses-a-security-risk
大意就是,防火墙未必能够正确处理规则匹配。
只不过都已经这么多年了,规则匹配什么的早就已经弄好了呀。
所以疑问来了,真的有安全问题吗?
1
ragnaroks 2022-07-06 20:49:25 +08:00
我觉得没有;应该是当时的防火墙不能正确处理,现在应该可以了
|
2
blankmiss 2022-07-06 20:57:08 +08:00
不知道欸 我关闭 IPV6 了
|
3
ysc3839 2022-07-06 21:00:03 +08:00 via Android
我觉得是可能用户不想开放 IPv4 端口,这个功能会在用户不知情的情况下开放
|
4
raysonx 2022-07-06 21:30:17 +08:00
应该是为了避免用户以为自己只监听了 IPv6 端口,所以只配置了 IPv6 防火墙,而实际 IPv6 端口和 IPv4 端口全部都监听了这种情况。
|
5
cnbatch OP |