首页
iYoRoy DN42 Network
关于
友情链接
推荐
悠笙の喵罐头
Search
1
Docker下中心化部署EasyTier
1,124 阅读
2
给Android 4.9内核添加KernelSU支持
825 阅读
3
记一次为Android 4.9内核的ROM启用erofs支持
249 阅读
4
在TrueNAS上使用Docker安装1Panel
211 阅读
5
为黑群晖迁移RR引导盘
200 阅读
Android
运维
NAS
开发
网络技术
专题向研究
DN42
个人ISP
登录
Search
标签搜索
Linux
网络技术
BGP
BIRD
DN42
C&C++
Android
MSVC
AOSP
Windows
Docker
服务
ASN
Clearnet
iBGP
TrueNAS
Web
DNS
STL
Kernel
神楽悠笙
累计撰写
19
篇文章
累计收到
7
条评论
首页
栏目
Android
运维
NAS
开发
网络技术
专题向研究
DN42
个人ISP
页面
iYoRoy DN42 Network
关于
友情链接
推荐
悠笙の喵罐头
搜索到
2
篇与
的结果
OneManISP - Ep.2 向世界宣告我们自己的IP段
前言 上文我们已经成功注册了一个ASN并且拿到了一段IPv6地址,这次我们就来将这段地址广播给全世界。 在RIPE Database设置子网对象 需要注意的是,公网允许广播的最小IPv6前缀是/48,也就是说你如果只有一个/48地址你无法将其拆成更小的段。所以我后来又单独租用了一段/40,打算将其拆成多个/48来广播。 我获取到的IPv6为2a14:7583:f200::/40,打算拆出来2a14:7583:f203::/48用于给Vultr使用。如果你不需要拆段,请直接跳转到「创建路由信息」一节 拆段 首先打开Create "inet6num" object - RIPE Database,填入如下内容: inet6num: 打算拆出来的IP段,CIDR格式 netname: 网络名称 country: IP段所属国家,需要符合ISO 3166标准(RIPE DB里可以直接选择) admin-c: 上文创建的Role对象的主键值 tech-c: 上文创建的Role对象的主键值 status: ASSIGNED即可 此步骤将你获得的地址拆出来一个小的/48地址块。 创建路由信息 打开Create "route6" object - RIPE Database,填入如下内容: route6: 填写你打算广播播的IPv6地址块的CIDR格式 origin: 填写你申请到的ASN,包含AS前缀 此步骤声明允许你的ASN使用这段地址段来发BGP路由。 申请VPS的BGP Session接入 此次我使用的是Vultr家的机器,他们家的BGP Session算是很新手友好的了,有一套自己的验证系统;并且上游良好的过滤器保证了一般情况下即使发送了错误的路由表也不会影响到公网。 (此处我配置的时候忘记截图了,可以参考一下宝硕大佬的文章 年轻人的第一个 ASN 中的 申请 Vultr 的 BGP 广播功能 章节) 进入BGP - Vultr.com,选择Get Started之后按照要求填写你的ASN信息和IPv6地址块。LOA(Letter Of Authorization,授权信)可参考以下模板:LOA-template.docx(因为发现网上查到的都是以公司的名义写的,因此以个人名义重新写了一份) 完成后系统会自动创建一条工单,并且能看到我们的ASN和IP地址块处于待验证的状态: 点击Start,系统会向注册Role时填写的abuse-mailbox邮箱发送一封验证邮件: 收到的邮件如图所示: 其中,上面那个链接代表同意授权Vultr广播你的IP段,下面那个则是不同意。我们点击上面那个之后会进入Vultr的网页: 再点击Approve Announcement即可。ASN和IP段都需要验证一次。 接着,等待Vultr的工作人员审核完成后来到VPS的控制台,就能看到我们的BGP选项卡了,其中可以得到上游的信息: 此处不得不称赞一下Vultr的工单效率,我平均从创建工单申请授权到完成只花了10分钟左右。(反观之前在iFog GmbH,平均工作日工单回复时间1天左右实在是好太多了) 其他厂商的VPS大概都是这么个流程,你需要告诉工作人员你要播的ASN和IP段,在验证完所有权之后工作人员会为你配置对应的BGP Session。 广播! 你应该已经从上游那里得到了以下信息: 上游的ASN 上游用于BGP Session的地址 (可选)密码 我用的操作系统是Debian12 Bookworm,使用Bird2作为路由软件,并且按照这篇文章中「更新Bird2至v2.16及以上」章节更新Bird2至最新版。Vultr那边给我的上游ASN是64515,上游用于BGP Session的地址是2001:19f0:ffff::1,VPS用于BGP Session的地址是2001:19f0:0006:0ff5:5400:05ff:fe96:881f。 我的Bird2配置文件修改自DN42中的配置文件: log syslog all; define OWNAS = 205369; # 自己的ASN define OWNIPv6 = 2a14:7583:f203::1; # 给机器绑定的单个IPv6地址 define OWNNETv6 = 2a14:7583:f203::/48; # 打算播的网段 define OWNNETSETv6 = [ 2a14:7583:f203::/48+ ]; # 打算播的网段集合 router id 45.77.x.x; # 路由器ID,这里使用VPS的公网IPv4 protocol device { scan time 10; } function is_self_net_v6() { return net ~ OWNNETSETv6; } protocol kernel { scan time 20; ipv6 { import none; export filter { if source = RTS_STATIC then reject; krt_prefsrc = OWNIPv6; accept; }; }; }; protocol static { route OWNNETv6 reject; ipv6 { import all; export none; }; } template bgp upstream { local as OWNAS; path metric 1; multihop; # 指定多跳 ipv6 { import filter { if net ~ [::/0] then reject; # 拒绝导入默认路由 accept; }; export filter { if is_self_net_v6() then accept; # 仅导出自己网段内的路由,防止劫持 reject; }; import limit 1000 action block; }; graceful restart; } protocol bgp 'Vultr_v6' from upstream{ local 2001:19f0:0006:0ff5:5400:05ff:fe96:881f as OWNAS; # local后面的地址即上游给的用于BGP Session的VPS上的地址 password "123456"; # 上游给你的BGP密码,若没密码就将这一行删除 neighbor 2001:19f0:ffff::1 as 64515; # 上游的BGP Session IP和ASN } 几个值得注意的点: 此处upstream模板的导入规则拒绝了 默认路由 ,这样写可以防止上游发来的路由表覆盖掉本地的默认网关等路由信息。如果我们有多个BGP邻居,则可能导致绕路甚至路由环路。 upstream中指定了多跳(multihop;),这是因为Vultr的BGP对端不能直达,若不设置多跳则会导致BGP会话卡在Idle状态。如果你的BGP上游是直连,可以不设置此行或者改为direct;。 填写完配置文件,运行birdc configure载入配置。 运行birdc show protocols查看状态,如果不出意外的话应该能看到BGP会话已经Established: 这个时候,你可以起身做点别的事情,等待全球路由收敛。大概半个小时之后,打开bgp.tools,查询自己的/48段,应该就能看到已经成功被全球互联网收敛,并且能看到我们的上游信息: 接着,我们在VPS上创建一个dummy网卡,并绑定我们为这个机器设置的段内的单个IPv6地址,如我给我这台机器分配了2a14:7583:f203::1: ip link add dummy0 type dummy ip addr add 2a14:7583:f203::1/128 dev dummy0 接着使用我们自己的PC ping这个地址就能通了,traceroute也能看到完整路由路径: 感谢米露大佬提供的技术支持! 参考文章: 自己在家开运营商 Part.2 - 向世界宣告 IP 段 (BGP Session & BIRD) 年轻人的第一个 ASN - 宝硕博客 BGPlayer 从零开始速成指北 - 开通 Vultr 的 BGP 广播功能 - AceSheep BGP (2) 在 Vultr 和 HE 使用自己的 IPV6 地址 - 131's Blog
2025年08月20日
20 阅读
0 评论
1 点赞
OneManISP - Ep.1 注册一个ASN
写在前面 本文记录了我在RIPE NCC申请ASN的完整过程,内容适合入门者参考,若有错误欢迎邮件联系我,我会在第一时间更正。 既然已经在DN42上学习了基本的BGP概念,不玩玩公网的有点说不过去吧( 基本概念 目前公网ASN和IP资源分配由世界上5个 区域互联网注册管理机构(Regional Internet registry, RIR) 管理: ARIN: 负责管理北美地区 RIPE NCC: 负责管理欧洲地区 APNIC: 亚洲地区 LACNIC: 拉丁美洲地区 AfriNIC: 非洲地区 RIR不直接对个人用户提供服务,而是通过将资源授权给 本地互联网注册管理机构(Local Internet Registry, LIR) ,再由LIR授权给个人。当然,个人用户也可以注册成为LIR,但是这一般而言一般是不划算的。 如果你愿意每年交几千美元作为会费的话当我没说。 其中,对个人申请比较友好的是RIPE NCC,其次是ARIN和APNIC。相较于RIPE NCC,APNIC的费用普遍要高30%左右;并且RIPE NCC提供了一套在线管理系统,用户可以自己修改信息、查询进度,而在APNIC则需要联系LIR处理。综合而言,我选择在RIPE NCC申请ASN。 申请到的资源(ASN、IP都算)一般分为两种: PA(Provider Aggregatable)资源: 属于LIR,由LIR注册授权给你用的资源 PI(Provider Independent)资源: 属于你自己的资源,一般而言价格较高 准备阶段 选择一个LIR 上网查询LIR Service,可以找到很多提供这类服务的商家。目前RIPE NCC会向PI资源收取一年50EUR的管理费用,也就是说一般而言LIR注册ASN的费用不会低于50EUR(截至文章发布,大概60USD)一年。此处我选择的群友推荐的NoPKT LLC,价格算是比较合理的并且随ASN附赠一段/48 PA IPv6地址,实测下号速度也很快,从提交完材料到下号只用了半天。 准备材料 身份证明 个人:提供身份证或者护照都可以(我提供的身份证正反面照片) 企业:提供有效的营业执照 若申请人为未成年人,通常需要其法定监护人提供书面同意书并履行相应监护职责。所有提交的文件应确保真实有效,且必须是原件或经过公证的副本。 联系信息 通信地址,被用于登记在RIPE Database 技术人员邮箱 滥用举报邮箱 技术要求证明 欧洲范围内的BGP服务商开具的账单,可以选择Vultr、BuyVM、iFog、V.PS等。 注:Vultr是先用后付制,每月初出账单。如果你着急备好材料,建议选择其他家。 两个你打算接入的上游的ASN(实际上审核方不会严格验证你填写的上游ASN,因此可以随意填写,但建议填写一些常见的公开ASN以显得合理,不用过多纠结。 甚至填我的也行 ) 注册RIPE DB账户并创建条目 打开RIPE Database并注册一个账户。此处填写姓名时建议填写你自己的真实姓名的拼音,并且强制要求开启2FA,请提前在手机上安装TOTP软件。 创建Role对象和Maintainer对象 打开Create role and maintainer pair - RIPE Database,创建一个role对象。 此处role为一个抽象概念,用来描述一个团队、部门或者职能角色的联系方式,代指一个角色,比如 NOC (Network Operations Center)、Abuse Team、Hostmaster 等。 mntner: maintainer对象的标识符,可包含大小写字母、数字、-_。例如我填写的是IYOROY-MNT role: role对象的名称,可包含大小写字母、数字、][)(._"*@,&:!'+/-。例如我填写的是IYOROY-NETWORK-NOC address: 此role对象的办公地址 e-mail: 此role的电子邮件地址 填写完成后SUBMIT即可创建role对象和maintainer对象。请记录下返回的主键名称,一般以-RIPE结尾,后续修改信息及提交到LIR需要用到。 此处maintainer对象标识符和role对象有所区别,前者意为谁有权限维护数据库中的对象(即写入/修改/删除权限控制),是维护者实体。关于RIPE Database中各个概念之间的归属,可参考文章后部的示意图。 添加滥用举报邮箱 打开Query - RIPE Database,查询刚刚获得的role主键名称,可以查询到刚刚创建的条目。点击右侧Update Object。 点击e-mail栏右侧的加号,创建一个abuse-mailbox属性,并且填入你的滥用举报邮箱: SUBMIT保存。 注:RIPE会定时检查滥用举报邮箱是否可用,请务必填写真实的邮箱地址 创建Organization对象 此处Organization对象是法律实体或组织(公司、大学、ISP、个人用户等)的抽象,是 RIPE Database 里资源对象(比如aut-num、inetnum、inet6num)的上层归属信息,也就是说后续的ASN、IP资源都将授权给Organization对象。 打开Create Organization - RIPE Database,填写如下信息: organisation: 唯一ID,保留为默认的AUTO-1即代表由RIPE NCC分配。 org-name: 组织的名称。如果是个人用户注册则需要填写你自己的姓名拼音全称。 address: 通信地址。 country: 国家代码,参考ISO 3166。中国就填写CN e-mail: 组织的电子邮件。 admin-c / tech-c: 联系对象(引用 role 的 handle)。 abuse-c: 指定abuse联系方式(必须是一个role对象,链接到role对象中的abuse-mailbox)。 mnt-ref: 指定可以创建引用该organisation的对象的维护者。 mnt-by: 谁能维护这个organisation本身。 填写完SUBMIT,并记下返回的对象标识符,类似于ORG-XXXX-RIPE的格式。 如果你在提交后发现需要修改,去Query - RIPE Database查找刚刚记录下的Role主键或者组织的对象标识符即可找到修改入口。 支付LIR费用并且提交材料 将以下材料提交给你的LIR: 身份证明 姓名 地址,推荐证件地址 身份证正反面照片 RIPE Database信息 org: 组织对象标识符 as-name: AS名称 admin-c: 上面创建的role对象主键 tech-c: 上面创建的role对象主键 abuse-c: 上面创建的role对象主键 nic-handle: 上面创建的role对象主键 mnt-by: 上面创建的maintainer对象名称 技术要求证明 VPS账单 上游的ASN LIR会要求你在你的Organization里添加一条mnt-ref,指向LIR的维护者,这样LIR那边才能够将AS和IP等资源授权到你的Organization。LIR那边审核没问题之后会将请求提交到RIPE,接着就是等待。一般而言需要3-5个工作日即可下号。 自此,我们已经在公网上注册了属于我们自己的ASN。 补充:RIPE Database中各个概念之间的关系 graph LR %% ========== ORG 层 ========== subgraph Org["Organisation"] ORG["organisation\n(ORG-XXX-RIPE)"] end %% ========== 资源层 ========== subgraph Resource["资源"] INETNUM["inetnum\n(IPv4 段)"] INET6NUM["inet6num\n(IPv6 段)"] AUTNUM["aut-num\n(ASN)"] ASSET["as-set\n(ASN 集合)"] end %% ========== 路由层 ========== subgraph Routing["路由"] ROUTE["route\n(IPv4 前缀公告)"] ROUTE6["route6\n(IPv6 前缀公告)"] end %% ========== 联系人层 ========== subgraph Contact["联系人"] ROLE["role\n(团队/职能)\nnic-hdl"] PERSON["person\n(个人)\nnic-hdl"] end %% ========== 权限层 ========== subgraph Maintainer["权限"] MNT["mntner\n(维护者)"] end %% ========== 联系 ========== INETNUM --> ROLE INET6NUM --> ROLE AUTNUM --> ROLE ASSET --> ROLE ROUTE --> ROLE ROUTE6 --> ROLE ROLE --> PERSON %% ========== 组织归属 ========== ORG --> INETNUM ORG --> INET6NUM ORG --> AUTNUM ORG --> ASSET %% ========== 权限 ========== ORG --> MNT INETNUM --> MNT INET6NUM --> MNT AUTNUM --> MNT ASSET --> MNT ROUTE --> MNT ROUTE6 --> MNT ROLE --> MNT PERSON --> MNT %% ========== 路由绑定 ========== ROUTE -->|origin| AUTNUM ROUTE6 -->|origin| AUTNUM %% ========== 路由范围 ========== ROUTE -->|属于| INETNUM ROUTE6 -->|属于| INET6NUM 特别感谢米露大佬提供部分技术支持和答疑解惑! 参考文章: 自己在家开运营商 Part.1 - 注册一个 ASN - LYC8503 从0开始注册一个ASN并广播IP | Pysio's Home 青年人的第一个运营商:注册一个 ASN | liuzhen932 的小窝
2025年08月18日
48 阅读
0 评论
1 点赞