眾所周知,如果訪問端
因為特殊原因只開啟了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,最後使用最早建立的那個連接。