banner
herman

herman

哈哈哈哈哈哈哈哈哈哈哈哈哈哈

“只有V4的设备”访问“只有V6的设备”的技巧

众所周知,如果访问端因为特殊原因只开启了IPV4,而被访问端因为特殊原因只开启了IPV6

那么两者之间是不能互相访问的。

比如我用公司电脑(公司网络只开启了 IPV4)访问家里的 NAS(移动宽带只有 IPV6)是访问不了的。

解决方案:开代理。#

前提是你的代理服务器得是双栈(一般都是双栈)打开https://ip.zxinc.org/ipquery/ 测一下就知道了。

小知识:(由天地极限大佬提供)

双栈环境下,程序选择使用 IPv4 还是 IPv6 协议是程序自身决定的,DNS 服务器没有能力控制程序优先使用哪个协议。

因为 DNS 请求时需要指定查询的类型,IPv4 地址是 A 类型,IPv6 地址是 AAAA 类型,不存在同时查询 IPv4 和 IPv6 地址的类型。

因此程序只能同时查询两种地址,然后根据程序自身的逻辑来选择使用哪个。对于绝大多数使用 BSD socket API 的程序,会使用 getaddrinfo 来解析域名,然后依次尝试连接,那此时优先使用哪种协议就是由系统控制的了,getaddrinfo 把哪个协议排在前面,程序就会优先连接。

还有一些经过特殊设计的程序,比如 curl 以及各种浏览器,则会有其他逻辑。比如会先检查本机的 IPv6 地址,如果是内网地址则会放弃使用 IPv6,如果是公网地址,会同时解析 IPv4 和 IPv6 地址,然后优先连接 IPv6,如果在一个较短的时间内 (如 1 秒) 还未连接成功,则会继续尝试连接 IPv4,最后使用最早建立的那个连接。

1702363756657.gif

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。