DN42 - 平民化的 ASN

其實應該先寫這篇才寫現實網路世界中的 ASN 教學才對 wwww
不過我也是先申請了現實的 ASN 後
才來申請這個東西的 XD

DN42 全名叫做 Deserialized Network 42 (去中心化網路 42)
其透過 Private IP 加上 VPN 來模擬現實的 ASN 系統
這是它們的官網

其實真的介紹就上面這樣而已 XD
接下來要說說申請的部分
我個人認為比申請現實的 ASN 複雜了許多

申請

首先我們到 dn42 的 wiki
在接下來操作的同時希望除了這篇文章以外
也能配著看這份文件

首先我們先到 dn42 自己的 repo 申請一個帳號
整個申請過程都需要用到 git
應該說 dn42 的管理以及紀錄都是在這個 repo 中
推薦使用 linux 或 macos 來完成所有操作以避免困擾
因為會有一些檔名 windows 不給用

那申請流程大概可以分為

  1. 建立自己的相關物件
  2. 檢查格式以及對你的 commit 用 GPG 簽名
  3. 發 pull request

建立物件

首先我們需要開一個新的 branch
所有申請的操作也都要在這個分支中做事
分支的名稱請按照 <username>-YYYYMMDD/<name> 的格式
例如我的叫做 chesskuo-20210820/register

1
2
git checkout -b chesskuo-20210820/register
git push --set-upstream origin chesskuo-20210820/register

接著我們需要準備幾個東西要先想好
然後透過這個網站查詢是否已經被申請

  • 你想要的 ASN (範圍介於 4242420000 ~ 4242423999 之間)
  • 你要的 IPv4 Range
  • 你要的 IPv6 Range

對於上面三個東西
會推薦使用網站中的 Free Explorer 幫你 random
他會自動選幾個沒有被使用且符合規範的 ASN 或是 IP 給你選

挑好後就要開始建立對應的物件到 data/ 資料夾中

最少需要以下

  • mnter
  • person
  • aut-num
  • inetnum
  • inet6num

那會推薦順便連以下兩個都順便填寫

  • route
  • route6

mnter

mnter 是 maintainer 的縮寫
這個物件非常重要
是全部物件都會引用的東西
由於 dn42 是透過 git 的編輯方式
所以其實你可改動到不是你的 mnter 的物件
但是在現實世界中
註冊商是不會讓你更動到沒有引用你的 mnter 的物件的

格式官方有提供一個範本
檔案名稱請遵循 <name>-MNT
且放在 data/mnter/ 底下

1
2
3
4
5
6
mntner:             FOO-MNT
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
auth: pgp-fingerprint 0123456789ABCDEF0123456789ABCDEF01234567
source: DN42

這邊的 admin-c, tech-c 就是填等等要新增的 person 物件
auth 的部分官方也有提供 ssh key 的驗證方式
詳細可以自己去翻文件
我自己是用 PGP 因為覺得比較潮 (x

之後包跨這裡的 mnt-by 全都是填這個 mnter

person

用來記錄一個人的相關資訊

檔名格式 <name>-DN42
放在 data/person/

1
2
3
4
5
person:             John Doe
e-mail: john.doe@example.com
nic-hdl: FOO-DN42
mnt-by: FOO-MNT
source: DN42

aut-num

ASN 資訊

檔名格式為 ASxxxxxxxxxxx (xxx 為數字)
放在 data/aut-num/

1
2
3
4
5
6
aut-num:            AS4242423999
as-name: AS-FOO-DN42
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
source: DN42

inetnum

IPv4 range 宣告
透過上面說到的 Free Explorer 可以隨機給你一組

檔名格式用以下這個例子當範例就是 172.20.150.0_27
放在 data/inetnum/

1
2
3
4
5
6
7
8
inetnum:            172.20.150.0 - 172.20.150.31
cidr: 172.20.150.0/27
netname: FOO-NETWORK
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
status: ASSIGNED
source: DN42

inet6num

IPv6 range 宣告
透過上面說到的 Free Explorer 可以隨機給你一組

檔名格式用以下這個例子當範例就是 fd35:4992:6a6d::_48
放在 data/inet6num/

1
2
3
4
5
6
7
8
9
10
inet6num:           fd35:4992:6a6d:0000:0000:0000:0000:0000 - fd35:4992:6a6d:ffff:ffff:ffff:ffff:ffff
cidr: fd35:4992:6a6d::/48
netname: FOO-NETWORK
descr: Network of FOO
country: XD
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
status: ASSIGNED
source: DN42

route

用來宣告該 IPv4 Range 屬於哪一個 ASN

檔名格式與 inetnum 相同
放在 data/route/

1
2
3
4
route:              172.20.150.0/27
origin: AS4242423999
mnt-by: FOO-MNT
source: DN42

route6

用來宣告該 IPv6 Range 屬於哪一個 ASN

檔名格式與 inet6num 相同
放在 data/route6/

1
2
3
4
5
route6:             fd35:4992:6a6d::/48
origin: AS4242423999
max-length: 48
mnt-by: FOO-MNT
source: DN42

檢查

在物件都建立好之後
可以使用根目錄給的 fmt-my-stuff 來幫你將格式 format 好
因為有可能在修改範例的過程中少一個空白或怎麼樣之類的

接著使用 check-my-stuff 來檢查我們自己的相關物件是否正確

簽名

確定檢查也通過後
我們就可以將這次的變更 commit 並加上簽名
這邊我是使用 GPG
在 commit 時加上 -S 的參數就可以簽名

1
git commit -m "xxx" -S

簽完後
利用 git log --show-signature 就可以檢查你的 commit 是否有簽名

發 PR

接著只要將我們的 branch push 到 remote repo
接著透過 Web GUI 發個 PR
並且等待管理員審核就可以囉~

END

這篇主要介紹如何使用 DN42
這裡是我的 DN42 的一些資訊 Link
之後的文章將會帶著大家直接動手開始建置自己的網路系統
包括打 Tunnel, Peer, 建制自己的 DNS Server 之類的