前言
本篇 Blog 应该是自己在家开运营商
这个系列最后一个 part, 来讲讲如何修改我们广播的 IP 地址定位.
通过修改 IP 定位, 你可以实现:
- 在各类平台显示一些离谱的 IP 属地 - 例如几乎没有互联网基础设施的南极洲 / 没接入互联网的朝鲜 / 某些从没听过的人口一共几万人的小国家
- 用一台 VPS 获得全球各地的 IP 地址,
挂探针装逼点亮全球, 实现另类的 All In One (怎么这也 All In One) - 可以解锁各地流媒体, 参考这篇 hostloc
开 one-man IDC 卖各种地区的 VPS, 我搜到的有 GlobalVM, 但没去尝试用过, 故不作推荐, 请自行搜索
本篇应该主要关注如何修改 IP 定位以及套 WARP 后得到一个对应地区的 IPv4 地址, 解锁流媒体和开 IDC 不再赘述, 可以参考上面的链接.
前置知识
应该算是很多人都知道的东西, 不过为了文章的完整性在一开始解释下
IP 数据库
IP 数据库服务提供商会通过网络扫描 / 查询 WHOIS 等方式整理 IP -> 地理位置
的映射关系, 同时会包括 IP 威胁水平评分 / IP 类型(是家庭宽带还是服务器/VPN)等, 出售给有需要的使用的用户. IP 数据库的用户一般就是我们访问的网站, 网站后端直接在数据库中查询 IP 定位和风险水平等信息用于展示和风控. 顺便推荐一个可以同时查询多个定位数据库的网站: https://iplark.com/
常见的 IP 数据库有: Maxmind, IPInfo, DB-IP 等, 有些较小的数据库会从较大的数据库同步数据.
WARP
WARP 是 Cloudflare 提供的基于 Wireguard 的 VPN 服务, 官方提供了 Linux 客户端, 不过大部分人会直接使用原生的 Wireguard 连接. WARP 可以为服务器提供 IPv4 / IPv6 双栈地址, 常被用在 IPv4-only 或 IPv6-only 的 VPS 上获取另一种类的地址. WARP 的一个重要特性是, 其获取的外网 IP 地址定位与你连接所用的 IP 地址定位会相同, 我们等下会用到这一重要特性. 详细 WARP 配置教程推荐: https://p3terx.com/archives/use-cloudflare-warp-to-add-extra-ipv4-or-ipv6-network-support-to-vps-servers-for-free.html
提交定位修正请求
其实 IP 的”位置”本来就是一个模糊的概念: 例如我的 2a14:7c0:4d00::/40
是一段以色列的原生 IP, 即当初它被整段分配给了以色列. 但后来我又购买了其中的一小段在德国/美国/新加坡三地的 vps 进行了 BGP 宣告 (见上一篇 Anycast 网络). 作为实际用户, 我人又身在中国大陆. 而作为这段 IP 的所有者, 我又可以在 Whois 数据库里随意修改 IP 段的 country 字段 - 我填写了 KP (朝鲜).
由于这种模糊性, 很难通过某一种技术手段准确确定 IP 的位置, 所以几乎所有数据库都接受公众/用户主动提交的地址修正请求.
准备工作
不过在提交请求之前, 我们先来做一点点准备工作:
IP 数据库会从全网的路由表中收集 IP 段, 之前我们将 2a14:7c0:4d00::/40
一整个段合并广播出去, 也没有在 RIPE NCC 中划分更小的段, 这不利于数据库分段收录, 所以我们来划分一下.
先登录 RIPE Database, 依次选择 My Resources - IPv6 - Create assignment
, 进入创建 inet6num 的表单 (inet6num 指的就是一段 IPv6 地址):
inet6num
: 填写一个子网网段, 最小的一段必须 >=/48
, 所以我填写2a14:7c0:4d00::/48
, 如果你只拿到了/48
那就不能再分了, 你只能编辑 LIR 分配给你的网段.netname
: 取个喜欢的名字country
: 选择你 IP 希望定位到的国家/地区admin-c
&tech-c
: 填写两个联系人对象, 选择之前创建的即可status
: 选择ASSIGNED
代表已分配
完成创建后, 可以在 My resources 中看到所有分配的子网段:
随后编辑我们之前编写的 BIRD 配置, 将原本的 2a14:7c0:4d00::/40
改为 2a14:7c0:4d00::/48
, 重启 BIRD.
等待一段时间后, 可以使用 BGP Tools 查询到 2a14:7c0:4d00::/48
的信息, 原有的 2a14:7c0:4d00::/40
页面已经 404.
提交修正请求
我们可以向常见的 IP 数据库提交定位修正请求: Maxmind, IPInfo, Google
如果需要提供理由, 可以自行编写类似 “因为 IP 定位错误, 我/我的客户无法访问部分地区限制的网站” 的理由(当然要用英文), 最好不要提到自己要用于匿名代理, 可能违反对应数据库的修正规则.
每家数据库都有自己不同的维护流程, 有些会有人工 review, 修改后普遍要等三天到两周不等的时间才会生效. 这些数据库通常提供了在线查询的方式(如 Maxmind 的 Demo), 期间可以手动查询确定自己的 IP 位置, 也可以使用上面提到的 IPLark 一键批量查询.
我自己的测试中, IPInfo 大概在一周内接受了我的请求. Maxmind 在两周内都没有回应, 后续我通过表单联系了他们, 他们终于接受了我的修改. (可以先等等, 交了几次请求都没接受再联系)
(p.s. 最近 Maxmind 不太受理更改到南极洲 AQ 的请求, 很可能是想去南极的人太多了, 所以本文以朝鲜为例, 如果你确实想得到南极洲 IP, 可以试试文末的 geofeed 方法绕过人工 review)
以下内容仅供参考, 请自行杜撰编写你的理由:
Q: Hello, I am the network operator and owner of AS214775. I found out that my IP address segment 2a14:7c0:4d00::/40 is incorrectly localized to Israel, causing me to be denied access to other websites. I have tried several times to submit data corrections using the data correction form, but no response. I have corrected the country of my IP segment in the RIPE NCC database, and some other databases such as ipinfo.io have been synchronized, but Maxmind keeps locating my IP segment to Israel. I would like to politely ask why MaxMind has not responded to my correction request?
A: Thank you for your email. This will be updated in Tuesday’s release of the database.
套 WARP 获得对应地区 IPv4
Cloudflare 使用的 IP 数据库是 Maxmind, 所以如果我们希望套 WARP 的话, 只要 Maxmind 这一个数据库能定位到我们想要的地区就行了. Cloudflare 同步 Maxmind 的数据库可能仍有一到两周的延迟, 在线查询 Maxmind 定位正确但 Cloudflare 没更新的话, 可能需要再多等等.
WARP 会根据我们 IPv6 的定位, 分配对应地区的一组 IPv4+IPv6 地址给我们. WARP 给出的 v4 地址不仅让我们能访问 IPv4-only 的网站, 而且地址的定位是由 Cloudflare 维护的, 在所有数据库中定位十分精准也不会被定位偏, 比我们自己给各个数据库提交更正请求要方便不少.
WARP 在本文开头介绍过了, 我们直接参考这个开始实操:
1 | # 生成一份 WARP 的 Wireguard 配置 |
随后我们就可以通过 Cloudflare 的 /cdn-cgi/trace
接口测试一下目前 VPS IPv4 地址的定位(任何一个套了 CF 的网站都有该接口), ip=104.28.212.208
代表我们拿到的 IP 是 104.28.212.208
, colo=DUS
代表访问到的数据中心是 DUS/杜塞尔多夫机场
(IATA 代码), loc=IL
代表定位是 IL/以色列
(国家地区代码), warp=on
代表当前使用了 WARP:
虽然成功修改了我们的定位, 不过定位还在 IL 就代表 Cloudflare 还没拉取 Maxmind 的更新, 让我们再等等
1 | root@s39230 ~ # curl -4 https://www.cloudflare.com/cdn-cgi/trace |
又等了现实时间近十天, Cloudflare WARP 的地址数据库终于更新了! 比 Cloudflare 其他服务还慢了十天… 此时距离 Maxmind 更新大概已经过去了半个月, 距离我第一次提交地址修正请求过了一个月, 拖到我服务器都快过期了 (还好还没过期).
重复下上面的测试, 可以看到这次拿到的 IP 104.28.197.243
得到的结果就是 loc=KP
, B 站 API 返回的地区也是朝鲜了:
1 | root@s39230 ~ # curl -4 https://www.cloudflare.com/cdn-cgi/trace |
我们可以通过 IPLark 查询下我们自己的 IPv6 地址和 WARP 分配的 IPv4 地址定位:
此时再在这台 vps 上配置一个代理, 你就可以使用朝鲜的 IP 到各大网站上炫耀了. (相信你都看到这里了, 不可能不知道怎么配代理吧)
可选的 Geofeed 以及防止定位被拉回
最后还有说好的点亮全球部分~ 对于部分大型服务商, 他们有很多全球各地的 IP 地址, 手动一个一个提交修正请求显然不现实.
于是其实有一种叫 Geofeed 的规范可以允许批量提交 IP 地址定位: https://docs.ipdata.co/docs/publishing-a-geofeed. 除了通过 Support 工单将你的 Geofeed 直接提交给 Maxmind 外, 你也可以将 Geofeed 链接放进 WHOIS 数据库 inet6num
对象中, 让各个数据库厂家可以自动化爬取并更新你的 IP 地址定位. 于是你就可以拥有全球各个稀奇古怪国家的 IP 地址, 挂探针实现”点亮全球”.
IP 定位修正完并非一劳永逸的, 各大数据库还会综合其他方法确定你实际的位置, 就可能出现定位被拉回的可能. 我们能做的可以是通过防火墙禁止服务器的 ping (ICMP) 和常见端口, 防止被厂商扫描. 同时尽量不要直接用服务端的 IPv6 访问网站, 而是用套了 WARP 获得的 IPv4. 部分厂商(点名 Google)可能根据客户端(手机)的定位来纠正你服务器 IP 地址的位置. 具体参考这篇文章.
结语
终于啊终于… 本系列从 24 年 6 月份开始筹划, 历经各种坎坷和等待, 在 12 月前完美结束了. 再不结束我的 ASN 和服务器都要过期了(小声).
探索了如何在 Internet 上获取并维护一个自治系统, 尝试配置 BGP / Peer / Anycast 以及本篇中的 IP 定位修改, 满足了一些奇妙的好奇心, 理解了运营商和 one-man IDC 的不易(不).
之后可能会尝试 DN42, 也可能不会. 但目前这个系列暂告一段落, 其他的博客再见~ o/
本文采用 CC BY-NC-SA 4.0 许可协议发布.
作者: lyc8503, 文章链接: https://blog.lyc8503.net/post/asn-5-worldwide-servers/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬