记一次境外 VPS IP 定位异常排查:Ubuntu IPv6 路由导致的“异地漂移”

目录

1. 背景知识与现象

在选择海外高性价比 VPS(例如 Advin Servers 的 KVM Budget XS 等产品)搭建服务以访问特定区域限制的 API(如 Google Gemini)时,IP 的地理位置(Geolocation)信誉至关重要。

现象描述:

近日在新购入一台标明为美国机房的 VPS 后,发现通过 Ubuntu 24.04 系统上的代理程序访问 Google 服务时,IP 被 Google 识别定位在​**俄罗斯(RU)**​,导致 Gemini 等核心 AI 服务被硬性拦截,无法使用。

然而,在完全相同的网络下,通过 RDP 登录基于 Windows Server 的环境访问 Gemini,却能准确识别为​美国(US)​并正常工作。同一台服务器的跨系统“同机不同命”现象,排除了 IP 本身被全面封禁或代理客户端配置错误的可能。

2. 问题分析与定位

针对“同一个代理程序,Windows 显示 US,Ubuntu 显示 RU”的怪异现象,排查过程如下:

  1. 排除本地环境干扰(DNS/WebRTC 泄露): 确认客户端层面已开启防 DNS 泄露机制,且 RDP 直连测试通过,证明并非本地环境引发的污染。
  2. OS 层网络栈行为对比(定位): 现代操作系统的底层网络行为存在差异。Ubuntu 24.04 等现代 Linux 发行版在网络协议栈上极其激进,默认优先解析并使用 IPv6(AAAA 记录)进行出站通信。而 Windows Server 在默认配置或特定代理环境下的 IPv6 路由往往不够完整,从而回落(Fallback)使用 IPv4。
  3. 抓包与出口确认: 进一步确认发现,Ubuntu 环境下的代理向外网(如 Google 边缘节点)发起请求时,实际走的是服务商分配的 ​IPv6 地址​,而 Windows 侧走的是 ​IPv4 地址​。

3. 根本原因:IPv6 段的地理位置污染

廉价 VPS 服务商分配的 IPv6 /64 子网往往具有非常糟糕的“历史信誉”。

大量受限地区(如俄罗斯)的用户曾使用这些低成本机房的 IPv6 地址作为跳板。Google 的风控和地理位置识别系统具有机器学习的“聚类效应”——当大量带有俄语环境特征流量从该 IPv6 段流出时,Google 的 GeoIP 数据库会将整个 IPv6 子网强行标记为“俄罗斯”。

Ubuntu 默认的​“IPv6 优先”​策略,恰好踩中了这个被严重污染的雷区,导致访问时被识别为 RU;而 Windows 的 IPv4 回落,则幸运地避开了污染,保留了真实物理机房的 US 标签。

4. 解决方案:Netplan 剔除 IPv6 默认网关

直接在内核层完全禁用 IPv6 (disable_ipv6=1) 会导致本地大量依赖 IPv6 协议栈的服务(如 Docker、某些监听 ::1 的内部组件)报错。

最优雅的解决方案是:保留 IPv6 地址用于内部通信,但删除 IPv6 的默认网关,切断其访问外网的路径,强制代理程序的公网出口回落到 IPv4。

在 Ubuntu 24.04 中,网络由 Netplan 接管。根据 IP 获取方式的不同,配置修改如下:

场景 A:静态 IPv6 配置

如果是手动配置的静态 IP,只需在配置中删除或注释掉 IPv6 的默认路由即可。

# 编辑 /etc/netplan/xxxx.yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      addresses:
        - "2001:db8::1/64" # 保留 IPv6 地址的分配
      # 注意:不要配置 gateway6,或者在 routes 中不要写 ::/0 的默认网关

场景 B:DHCPv6 / SLAAC 动态获取

如果 IPv6 是由机房路由器自动下发的,需在配置中增加 accept-ra: false,表示接受地址但不接受路由器广播(Router Advertisements)中的默认网关。

# 编辑 /etc/netplan/xxxx.yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      dhcp6: true
      # 拒绝接收 IPv6 的路由广播,防止系统自动添加 IPv6 默认网关
      accept-ra: false

应用配置

修改完成后,应用 Netplan 配置并重启代理服务:

sudo netplan apply
sudo systemctl restart <your-proxy-service>

5. 验证结果与总结

结果: 执行配置后,系统通过 ip -6 route show 查看,已无 default via ... 的 IPv6 路由。再次通过代理访问 Google,流量成功走 IPv4 出口,地理位置恢复为美国(US),Gemini 等服务恢复正常使用,且本机其余依赖 IPv6 回环地址的服务未受影响。

总结: 在处理云服务器的网络代理与区域识别问题时,不能仅停留在“应用层”与“IP 段检查”。操作系统的默认网络栈行为(特别是 IPv4/IPv6 优先级)往往会造成意想不到的流量偏离。对于被严重污染的廉价机房 IP,通过精准控制操作系统的默认网关路由,实现“保留内网 IPv6,强制外网 IPv4”,是排查和解决 GeoIP 异地漂移问题的一剂良方。