IPv6 地理定位準確度:為何仍落後於 IPv4
IPv6 地理定位的準確度通常低於 IPv4,而且較不一致,原因在於 IPv6 位址是以非常大的前綴配發、在用戶端裝置上經常變動,而且累積位置資料庫所依賴之量測資料的時間遠遠不足。
這並不表示 IPv6 查詢毫無用處。國家層級的答案通常可靠,而網路擁有者因為來自註冊資料,所以是精確的。較弱的部分是城市層級的精確度,這也是開發者最常感到意外之處。本文說明原因,以及在應用程式中該如何因應。
為什麼 IPv6 位置資料較難建立
IPv4 位址是單一的稀缺資源,因此業者與網路傾向把它切成小而在地理上整齊的區塊,量測計畫也已有數十年時間去繪製這些區塊。IPv6 則顛覆了這項經濟學。家用用戶通常會取得 /56 或 /64 前綴,光是單一前綴所含的位址數量就超過整個 IPv4 網際網路,而 ISP 持有的配置範圍大到可用一次宣告涵蓋整個國家。
由此衍生出幾個後果。第一,單一大型 IPv6 區塊可能服務橫跨許多城市的客戶,因此若資料庫將整個區塊指派為同一個位置,對其中大多數客戶來說都會是錯的。第二,依賴延遲、路由資料或使用者提交之修正來推斷位置的策略,每個前綴可用的樣本較少。第三,前綴內部的編號與地理並無任何可靠的關聯:兩個相鄰的 /48 區塊,可能配發給位於國家兩端的客戶。
極度稀疏本身也有影響。在 IPv4 中,你有合理的期望可以觀察到大部分活躍位址;在 IPv6 中,幾乎每個位址都只屬於某一個時刻與某一台裝置,因此資料庫必須從前綴去概括,而不是從個別主機。
隱私位址、行動網路與通道
用戶端裝置為了隱私,通常會輪換暫時性的 IPv6 位址,因此同一支手機在一天之內可能出現在同一前綴下的許多位址。這對使用者有益,但也意味著任何試圖記住特定位址的方法都很脆弱。保持穩定的是前綴,而良好的查詢就是在這個層級運作。
行動電信業者帶來另一層不確定性。手機的流量通常在區域閘道離開電信業者的網路,因此你看到的位址對應的是閘道所在區域,而不是手機本身。位於電信級 NAT(carrier-grade NAT)之後的 IPv4 也是如此,但 IPv6 的行動前綴往往很大,且在廣大區域共用。企業網路、VPN 與 IPv6 通道代理商,也可能宣告註冊於某國的前綴,而流量卻來自另一個國家。我們的文章為什麼 IP 位置描述的是網路而不是人對此推論有詳細說明。
最後,註冊資料會落後於現實。在公司或區域之間重新指派的前綴,可能會在一段時間內保留舊的註冊國家,因此請將註冊國家視為強烈的提示,而不是使用者所在位置的證明。
IPv6 上哪些可靠、哪些不可靠
可靠的有:來源 AS、持有該前綴的組織、註冊國家,以及該前綴是否為保留或文件用途範圍。這些事實來自路由與註冊資料,不依賴猜測裝置位置。屬於近似值的有:城市、地區、時區與任何座標。請將這些視為指向網路所服務區域的指標,而不是街道地址。
ipto 的 IP 查詢同時接受 IPv4 與 IPv6,並針對兩者回傳相同的欄位,包括國家、城市、ASN、組織,以及 is_vpn、is_tor、is_abuser、is_datacenter 和 bogon 旗標。IPv6 的範圍與 ASN 資料集是與 IPv4 並行、盡力而為地建構,並每日更新,因此 IPv6 的涵蓋範圍可能比 IPv4 稀疏,缺少城市欄位是你應該處理的正常結果。我們不宣稱任一協定有特定的準確率百分比,而對於任何未說明測試集卻聲稱如此的人,你也應該抱持懷疑。
圍繞不確定性來設計
以下實用規則很適合雙堆疊(dual-stack)應用程式:
- 將國家用於合規性質的決策,而城市只用於柔性的個人化,例如預設的天氣位置或預先填入的表單欄位。
- 優先把 ASN 與組織當作訊號。ASN 查詢會顯示網路的擁有者與所宣告的範圍,這在不同協定版本間是穩定的。
- 當你需要某個前綴的註冊配置、聯絡人與日期,而不是猜測時,請執行透過 RDAP 的 whois 查詢。
- 當存在主機名稱時,請檢查反向 DNS,因為電信業者與託管公司有時會在其中編入城市或機場代碼。請僅將此視為提示。
- 讓使用者更正自己的位置,並將更正結果儲存在帳號上,而不是位址上。
- 對 IPv6 以前綴而非個別位址來快取,因為一個 /64 通常屬於單一用戶或單一站點。
請用你自己的流量測試。從日誌中取出一天份、且已知真實位置的 IPv4 與 IPv6 位址(例如已完成訂單上的收貨地址),然後進行比較。你量測到的落差,才是對你的產品真正重要的數字,而且它會因國家與電信業者組合而異。