高级玩家玩出花:如何在 VPS 上广播自己的 IP 地址?BYOIP 与 BGP Session 调教指南

想拥有完全属于自己的 IP 段,搬家也不换地址?本文讲清 ASN 申请、Vultr/BuyVM/Hetzner 的 BYOIP 开通差异,并手把手用 Bird 配出 BGP Session。

玩 VPS 玩到一定段位,你迟早会冒出一个想法:能不能搞一块完全属于自己的 IP 地址段,想在哪台机器上用就在哪台机器上用,哪怕把整台服务器从洛杉矶搬到法兰克福,对外暴露的 IP 也纹丝不动?答案是能的,这事儿在圈子里叫 BYOIP(Bring Your Own IP,自带 IP 地址),背后靠的是互联网最核心的路由协议 BGP,以及一段你自己的 ASN(自治系统号)。这篇就给想进阶的朋友把这条路从头到尾捋一遍,不整虚的,全是能落地的东西。

延伸阅读

更多相关攻略推荐:美国、欧洲、亚洲都有 VPS?多机房智能分流:GeoDNS 动态解析Web 与数据库分在两台 VPS?跨机房 MySQL 3306 安全打死不宕机:Linux 系统内核免重启升级(Kexec 快速切换与 AWS / GCP 的"出站流量税":云巨头按 GB 扣费解析与 B【TCP优化 02】为什么晚高峰 Ping 值正常,SSH 却卡到掉

先搞明白:什么是 ASN,我的 IP 段从哪来?

互联网不是一张大网,而是由成千上万个"自治系统"(Autonomous System,简称 AS)拼起来的。每个 AS 是一个有独立路由策略的网络,比如某个运营商、某个云厂商、某个大型站点。AS 之间靠 BGP 互相"喊话":"嘿,到我这儿能到 1.2.3.0/24 这个段",别的 AS 就记下来,流量就这么一层层转过去了。而 ASN 就是每个 AS 的身份证号,比如 Hetzner 是 AS24940,Vultr 是 AS20473。

想要广播自己的 IP,你首先得同时拥有两样东西:一段属于你的 IP 地址块(IPv4 至少 /24,IPv6 至少 /48,比这更小的段互联网上根本不会有人帮你转发,别想了),以及一个 ASN。这两样通常向地区互联网注册机构(RIR)申请,比如亚太地区的 APNIC、美洲的 ARIN、欧洲的 RIPE。直接找 RIR 申请 IPv4 现在门槛很高,不仅要有充分的"使用理由",而且 IPv4 资源本身早就不免费了,很多 RIR 的 IPv4 池子都见底了。ASN 相对好拿一些,APNIC 对会员申请一个 ASN 的费用通常每年几十到一百多美元量级,IPv6 段也基本是免费或极低廉地分给会员。

如果你不想走正经 RIR 会员这条路,还有一个更省心的玩法:直接找持有 IP 资源的商家租用。调研时我看到 noez 这类商家提供 /24 IPv4 整段租赁,价格大约 99 欧元一个月,对方会帮你处理好 RIR 注册、ROA 授权之类的前置手续。对绝大多数个人玩家来说,租一段比自己硬申请现实得多。另外补充一句:如果你只是想跑 BGP 练手、暂时没有公开 ASN,很多服务商(比如 Vultr)可以给你分配一个私有 ASN(范围是 64512 到 65535),虽然不能写进全球路由表,但用来和厂商的对端建立会话、做 anycast 实验完全够用。

什么是 BYOIP?VultrBuyVMHetzner 三家怎么开通

BYOIP 说白了就是:你带着自己的 IP 段上门,让 VPS 服务商在你的机器上跑一个 BGP 会话,把你这段地址广播到互联网上。不同服务商的开通过程、门槛、费用差得挺远,下面挨个说。

Vultr 是 BYOIP 玩家里最规范的一家。官方文档写得很清楚:你需要先在后台填一个 BGP 开启表单,提交你的 IP 段和 ASN(没有就让它分你私有 ASN),并且必须证明你对 ASN 和子网的所有权,否则审核会卡住。Vultr 要求广播的 IPv4 前缀最小是 /24、IPv6 最小是 /48,更小的段它不会帮你往外发。审核通过后,控制台每个订阅的 BGP 标签页里会直接给你生成好 FRR 和 BIRD 的配置示例,连邻居 IP、ASN、密码都填好了,相当贴心。注意一个坑:如果你的机器是在开通 BGP 之前就创建好的,必须去控制台点一次重启(在 SSH 里 reboot 不算),否则 BGP 起不来。另外 Vultr 还强烈建议你提前做两件事:在 RPKI 里发布 ROA(路由源授权,声明这个段只允许你的 ASN 广播),以及在 IRR(互联网路由注册库,如 RADb、RIPE)里建好 route object,否则它的上游可能把你过滤掉。

BuyVM(Frantech) 的玩法更"极客友好"。它自研的 Stallion 面板从 2020 年起就免费提供 BGP Session,而且明确说没有任何最低消费和开通费。目前 BGP 会话在拉斯维加斯和卢森堡机房可用。流程是:开一张工单让客服审批你的 ASN,审批通过后,凡是你用 LOA(授权书)签名的前缀、或者你 ASN 下用 RPKI 签名的前缀,都会被自动导入,连 route object 都不用你手动折腾。更爽的是 BuyVM 还给了 BGP communities,你可以用它来控制"某段前缀别发给某个上游""在路由前面多插几跳"或者"把某个 IP 黑洞路由",可玩性在同类廉价 VPS 里是第一梯队的。

Hetzner 走的是另一条路线。它更多是通过 vSwitch(私有虚拟交换机)配合你自己的 ASN 来跑 BGP,适合把多台 Hetzner 机器和你的 IP 段拼成一个统一的网络再对外广播。它不像 Vultr/BuyVM 那样把"自带公网 IP"做成一键表单,环境更偏企业、偏网络工程一点,但底子很硬,AS24940 的体量摆在那。

至于 DigitalOcean,得说实话:它并不是 BYOIP 友好型选手。DO 的 BGP 能力主要暴露在负载均衡器的 anycast 场景里,普通用户想带一段完全属于自己的公网 IP 上去广播,并不像前面三家那么开放。所以如果你这篇是冲着"真正自带 IP"去的,优先看 VultrBuyVMHetzner 三家更现实。

在 Linux 上用 Bird 配出 BGP Session

服务商那边开好权限后,剩下的就是在一台 Linux VPS 上跑一个 BGP 守护进程,跟服务商的对端"握手",然后宣告你的段。圈子里最常用的是 Bird(尤其是 Bird 2.x),轻量、配置像写脚本、文档全。下面以 Vultr 为例。

先装起来(Debian/Ubuntu 记得装 bird2 而不是 bird,否则拿到的是老掉牙的 1.x):

sudo apt update
sudo apt install -y bird2
bird --version

然后写 /etc/bird/bird.conf。Vultr 的 VPS 对端信息是固定的:内部 AS 是 64515,IPv4 邻居是 169.254.169.254,并且要开 multihop 2。把下面这段里的 ASN、你机器的主 IP、BGP 密码换成你控制台里看到的真实值:

router id 203.0.113.123;

protocol bgp vultr {
  local as 64512;
  source address 203.0.113.123;
  ipv4 {
    import none;
    export all;
  };
  graceful restart on;
  multihop 2;
  neighbor 169.254.169.254 as 64515;
  password "hunter2";
}

这段的意思是:我是 AS64512,去连邻居 169.254.169.254(它是 AS64515),用 MD5 密码握手,建立起 BGP 会话,并且开启优雅重启(graceful restart,这样对端重启时你的路由不会瞬间全丢)。先别急着宣告任何 IP,让会话空跑一次,确认能 Established。

重启 Bird 并查看会话状态:

sudo systemctl restart bird
sudo birdc show proto all vultr

如果看到 BGP state: Established,恭喜,握手成功。如果一直是 Connect 或 Idle,先排查这几样:机器有没有在控制台重启过、防火墙有没有放行 TCP 179、BGP 密码对不对、source address 是不是你机器的主 IP(BGP 只能用主 IP,别拿附加 IP 来凑)。

会话通了,接下来才是真正"广播自己的 IP"。加一段静态路由,把你的 /24 塞进 Bird 的路由表,并让 Bird 去扫网卡:

protocol static {
  ipv4;
  route 198.51.100.0/24 unreachable;
}

protocol device {
  scan time 5;
}

这里的 unreachable 不是真的"不可达",而是告诉 Bird:"这条 /24 由我持有,请把它宣告出去";protocol device 让 Bird 能感知网卡变化,没有它静态路由不会出现。改完重启 Bird,再用 birdc show route export vultr 看一下,应该能看到你的 198.51.100.0/24 已经在往外发了。过几分钟去 bgp.tools 或者 RIPE 的 Looking Glass 搜一下你的 ASN,能看到这段就大功告成。

广播自己的 IP,到底香在哪,又坑在哪

最大的爽点就一个字:你的 IP 资产完全归你。今天在 Vultr 洛杉矶跑,明天想搬到 BuyVM 卢森堡,只要两边都能播这段 IP,你的网站、邮件、游戏服对外地址根本不用变,用户无感。这对需要长期积累 IP 信誉(比如发邮件的 SPF/DKIM 信誉、被各家风控记住的"老 IP")的场景特别值钱。

第二个爽点是天然防墙、可迁移。哪天这个段在某个机房被运营商误杀或者 region 抽风,你把它从 A 机房撤下、在 B 机房重新宣告就行,IP 还是那个 IP,等于随时能"挪窝"。配合 anycast(同一段 IP 在多个地点同时宣告),还能让访客自动连到最近节点,抗 D、降延迟一举两得。

但丑话说在前头,这玩意儿不是小白玩具。坑至少有四层:第一,成本不低,光租一段 /24 就可能近百欧每月,加上 VPS 本身费用;第二,门槛不低,你得懂 BGP 基本原理、会配 Bird、会排错,还得搞明白 RPKI/ROA、IRR route object 这些"互联网礼仪",不然你的段会被上游当脏路由过滤掉;第三,信誉要自己背,一旦你这段 IP 被用来发垃圾邮件或被拉进 Spamhaus,全世界都会嫌弃它,而且这种黑历史很难洗;第四,最小广播单位是 /24(IPv4),想拿更小的段省钱的念头趁早打消。

写在最后

BYOIP + BGP Session 是 VPS 网络玩法的"毕业关卡",它把网络的控制权真正交回你手里:IP 是你的、路由是你定的、搬家不换地址。Vultr 的规范流程、BuyVM 的免费极客面板、Hetzner 的 vSwitch 路线,各有各的适用人群。我的建议是:先拿一个私有 ASN + 一段租赁的 /24 在 Vultr 上把整条链路跑通,用 Bird 把 Established 状态和宣告路由都确认无误之后,再考虑把核心业务迁上去。别一上来就拿生产环境的 IP 练手,BGP 配错是会"污染"全球路由表的,稳妥第一。

常见问题 FAQ

问:什么是 BYOIP 和 BGP Session?? BYOIP 指把你自己持有的 IP 段带到任意云/VPS 上公告使用,背后靠 BGP 与你的 ASN。BGP Session 是商家给你的一个 BGP 邻居会话(常经 Tunnel/VTI 或直连),让你把这段 IP 宣告出去。这样机器搬机房,对外 IP 不变。门槛是:你得先有 ASN 与授权 IP 段(通常 /24 起)。

问:普通用户怎么拿到 ASN 和 IP 段?? ASN 可向 RIR(如 APNIC/RIPE)以组织身份申请,或向商家买/租现成 ASN;IP 段可从 RIR 申请、向转让市场购买,或租借商家的子网并让他代播。小玩家常用「租 ASN+租 /24」起步,再配支持 BGP 的 VPS(如 Vultr Bare Metal、部分独立服务器)打通 session。

问:哪些 VPS 商家支持 BGP?? 多为独立服务器或裸金属层级,纯虚拟化 VPS 少有支持。Vultr Bare Metal、部分 OVH/ Hetzner 独立机、以及专门做网络的大型商家可开 BGP session。选前确认是否给全表/缺省、是否允许自定义社区、是否收 setup 费。新手先在单台独立机试验,再谈多出口冗余。