从零到一试了一下 AWS 的 BYOIP,在此记录完整的过程。
先决条件
- 不是 Windows 系列操作系统的电脑一台,自己无条件信任的服务器也可以(需要签发证书)
- 基本的阅读理解能力,本文会比较粗糙
- 基本的 Shell 能力,不会的问 AI
本文大概率没有 AI 参与,因为撰稿时你用任何先进的 AI 都还不能找到正确的资料 :D
创建私有密钥并生成 X.509 证书
我们遵循以下过程创建自签名 X.509 证书,并将其添加到您的 RIR 的 RDAP/WHOIS 记录。openssl 命令需要 OpenSSL 版本 1.0.2 或更高版本。
- 生成 RSA 2048 位私有密钥
openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private-key.pem
# Enter PEM pass phrase: xxxxxxx
# Verifying - Enter PEM pass phrase: xxxxxxx
在提示处输入两次密码,建议密码在 20 位以上,并牢记。
- 使用上一步中创建的私有密钥生成 X.509 证书
按官方示例,我们的证书在 365 天后过期,在此日期后它将不能是受信任的。只需要在出现提示时提供公用名称,其他字段可以留空。
openssl req -new -x509 -key private-key.pem -days 365 | tr -d "\n" > certificate.pem
使用 cat certificate.pem 检查证书,复制备用。
将 X.509 证书上传到 RIR
对于 RIPE,只需要 Update Object 然后添加 descr: 字段即可,字段内容为上面复制到的证书。等会预置完成后可以删掉。

在 RIR 中创建 ROA 对象
如果你有 Krill,添加即可;如果没有下放的 RPKI,你可能需要联系你的 LIR 或资源所有者添加记录。

创建 ROA 对象以授权 16509 和 14618 来公告我们的地址范围,以及当前授权的 ASN 来发布该地址范围(总共要三个!我在这里卡了很久)。对于公开发布的 CIDR,可以引入的最具体 IPv6 地址范围是 /48。
EC2 BYOIP vs. IPAM
前者卡了我一个多小时,故这里使用后者,反正对我来说能播出去就行。
在继续之前,我们需要记一些命令,几下他们可以大幅度提高接下来的签名验证体验:
echo -n "1|aws|account|cidr|YYYYMMDD|SHA256|RSAPSS" | openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -sign private-key.pem -keyform PEM | openssl base64 | tr -- '+=/' '-_~' | tr -d "\n"
其中 echo 的是网页或任何别的提供的明文消息,执行命令并输入密码后将会输出一段签名,复制签名到提示你的输入框内。
创建 IPAM
打开控制台 console.aws.amazon.com/ipam,右上角切换区域到你拥有 EC2 服务器的可用区。如果你没有购买 EC2 服务器,推荐使用 us-east-1,这个区域的验证速度会非常快。
选择右上角的「创建 IPAM」,进入创建页面:

勾选「允许数据复制」,选择「免费层级」,别的保持默认或者自定义。
点按右下角「创建 IPAM」,等待 IPAM 创建。
创建池
默认创建的 IPAM 有两个 scope,一个公有一个私有,这里我们因为要播 BYOIP,所以使用公有的那一个(别选错了!)
地址系列选择「IPv6」,或者你想要播的地址系列如 IPv4。区域务必填写当前区域(如 ap-southeast-1),这样我们才能在接下来的选项里使用「EC2 服务」。

服务部分务必选择 EC2,别的没播出的选项(我在这里卡了半个小时)
在「要预置的 CIDR」部分,选择使用 X.509 证书验证,输入 CIDR 并复制消息,使用上面的命令签名并粘贴到输入框中,这里不再赘述。
「分配规则」可以保持默认或按喜好自定义。
验证 CIDR
等就完事了,一般 30 分钟内可以通过验证,如果没有验证通过请检查 ROA 是否正确配置。
验证 BYOASNs
在你的 IPAM 里有一个 BYOASNs 的子 Tab,选择进入后预置自己的 ASN,这里同样要使用证书签名(证书也要放进 ASN 资源的 RDAP 记录中!)

ASN 通常三分钟内即可通过验证,切换区域到重新验证。
关联 BYOIP 和 BYOASN
在池子的 CIDR 子 Tab 里,勾选你要操作的前缀,选择右上角的「管理关联 BYOASN」操作。

关联验证通过后即可使用「广告」(什么神人翻译)功能播出(可以选择是 AWS 的 ASN 还是你自己的,如果是自己的会以 AWS 为上游播出)。
如何在 EC2 实例里上网?
- 找到你 EC2 的 VPC,在 VPC 控制台里编辑 CIDR 地址,使用「IPAM 分配的 IPv6 CIDR 块」,并选择期望分配给 VPC 的子网大小(通常建议
/56)

- 在 VPC 控制台的「子网」部分,为你实例的子网分配 IPv6 子网(一般是分配整个
/56)

-
在 VPC 控制台的「路由表」部分,添加一条
::/0指向igw-xxxxxx的记录(类型为互联网网关) -
在 EC2 实例控制台,编辑 IP 地址并自定义或随机分配子网,记得勾选「分配主 IPv6 IP」

- 然后 SSH 到你的实例,
curl https://ip.932.moe应该就能看见 IPv6 地址了。
总结

BYOIP 效果图
感谢您的阅读,我们下个月再见!如有任何疑问请留言。