0. AS番号とは
AS番号とは,パブリックインターネット上における独立した組織を示す一意の識別番号を指します。例を挙げるとAS2516はKDDI,AS714はApple Inc.,AS15169はGoogleが所有するAS番号になります。このように組織ごとに割り当てされているAS番号が異なります。1つの組織で複数のAS番号を所有できます。例えば,最近ガバメントクラウドとして承認されたさくらインターネットが所有するAS番号は,AS9370(東京)・AS9371(大阪)・AS7684(石狩)の3つを所有しています。さくらインターネットの場合はデータセンターがある東京・大阪・石狩それぞれに別々のAS番号を使っているみたいですね。
さくらインターネット ピアリングポリシー
このように基本的に大きなインターネット関連企業が取るというのがセオリーなAS番号ですが,個人でも取得可能です。AS番号を取得するには,地域インターネットレジストリもとい通称RIR(Reigonal Internet Registry)から割り当てを受ければ,取得できます。日本だと例えばAPNIC管轄内のJPNICだったり,EU圏や中東アジアなどの地域管轄のRipe NCC,ラテンアメリカ管轄のLACNIC,北アメリカなど管轄のARIN,アフリカ管轄のAFRINICがあります。
AS番号については分かったけど,AS番号のASってなんぞやとなる人もいるでしょう。ASはAutonomous Systemの略で自律システムを指します。自律システムにおける独立組織の識別番号なのでAS番号,ASN(Autonomous System Number)と呼ばれます。ではまた,「自立システムって何?」ってなりますね。軽く解説します。間違ってるかもなので,あくまで参考程度に留めてください。詳しく知りたいなら自分で調べてみましょう。
自律システム(Autonomous System)とは?
端的に言えば,インターネットを構成する大きなネットワークです。もう少し具体的に言うと単一のルーティングポリシーを持つ大きなネットワーク,またはネットワークグループを指します。インターネット上に存在する全てのPC・デバイスは全部ASに接続されていると言えるわけです。例えば,家のネットワークからGoogle検索したいとすると,まずは 192.168.1.1[AS 0] → 106.187.15.158[AS2516] → 106.187.15.157 [AS2516] → 142.251.151.119 [AS15169]のようにパケットが流れていき,Googleに接続されます。荷物を輸送する(パケットの伝送)時のようにどんどん隣の配達拠点(次のホップ先)へ届けていき,最終的に目的地(クライアントが接続したい接続先)に届くと言うわけです。この接続経路を見るために使うコマンドがtracerouteになります。Windowsに搭載されてるtracertはゴミカスくんなのでWSLでtracerouteインストールするか,LinuxかmacOSでやった方がいいです。実際にtracerouteを使ってみましょう。使うのはGNU/Linuxのtracerouteで,macOSなどのBSD系の方は使いません。
$ sudo traceroute -AT qiita.com.
traceroute to qiita.com. (18.65.207.4), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) [*] 0.499 ms 0.632 ms *
2 106.187.15.158 (106.187.15.158) [AS2516] 13.299 ms * *
3 106.187.15.157 (106.187.15.157) [AS2516] 13.406 ms * *
4 * 106.139.192.169 (106.139.192.169) [AS2516] 14.052 ms *
5 * * *
6 * * *
7 * * *
8 15.230.152.57 (15.230.152.57) [*] 13.883 ms * *
9 server-18-65-207-4.nrt57.r.cloudfront.net (18.65.207.4) [AS16509] 14.376 ms * *
このような感じで返ってくるでしょう。最初に-Tなしでやったんですがパケットを弾くらしく,TCPモードでやると通りました。このような感じでパケットが抜けているようですね。AS16509,逆引きドメインにcloudfront.netが入っているので,AWSのサーバーで運用されている事がわかりますね。接続される時はKDDIの3ヶ所拠点を経由してAS番号の割り当てされてませんが恐らくリバースプロキシの15.230.152.57経由で本サーバーの18.65.207.4に届いているようです。-6とかtraceroute6ってやってやるとIPv6でやってくれます。Qiitaはデュアルスタック対応しているので興味があればやってみてください。
このような感じでパケットが隣のASへ伝送され,これが繰り返されて接続されるわけです。また,パケットを送る時と返ってくる時に経由されるところは異なる場合があります。ルーターはルーティング(Routing)と言って,その時の最適な経路を自動で制御して選択をするため,パケットを送る時と返ってくるパケットが経由してくるところが変わる可能性が十分あると言う事です。もちろん経由地点を指定できますが,それは組織内ネットワーク内でやると言うのが普通でパブリックインターネットで行うのはあまり一般的ではないでしょう。
1. AS番号を取得した理由
大学の教授からAS番号やBGPオペレーションについて軽く教えてもらって興味を持ち,AS番号やBGPオペレーションについて勉強をしたくなったというが大きな理由です。また,つい最近のJANOG57に若者支援で参加し,その時にBGP関係の話も少し聞いたりしてより興味を持ったので取得をしました。全然知識があまりないままにやりましたね。取得してまだ2ヶ月ちょっとで全然ピアリングやトランジットをできていない状況ではありますがちょっとずつ勉強していけたらなと思っています。最初は日本に住んでいるので最初は,APNICのASNの取得をしようかなと思っていたのですが,私は学生で資金力がそこまであるわけではないことと勉強がメインでお金をあまりかけられなかったのもあり,Ripe NCCからAS番号の取得をしました。JPNICは日本でAS番号・IPアドレスの分配を受ける際はJPNICから貰い受けることを推奨しているので,Ripe NCCからリソースを受け取るのは推奨される行為ではありません。資金力を確保できるようになったらAPNICへAS番号を移管する予定です。
自分調べでは個人に対してAPNIC管轄のASNの登録をしてくださる組織は,iFog GmbH,Misaka Network,HostUS,Tarecloud,Pysio's Networkくらいでしょうか。色々調べた上でiFog GmbHから私はRipeのASNを取得しました。最初はAPNICのASNを登録したいなと思い,iFogに頼んだのですが自分の読みミスで注文商品がAPNIC IPv6 /44になっており,「基本的にあまり登録を受け付けていないが別途で初期費用350CHF+年間更新費80CHFで受け付ける。またポリシーめっちゃ厳しいから大変だよ。」と回答が来ました。流石にそこまで労力をかけられない可能性があり,Ripe NCCのASN登録に切り替えました。Ripe NCCの場合は初期費用なしで年更新費が77CHF,APNICの場合は初期費用が350CHFで年更新費が80CHFで料金はそこまで差はありません。各RIRによるポリシーとして各RIRが管轄する地域での拠点が最低2つ必要というのが条件です。例えばAPNICならシンガポールとインド,Ripe NCCならウクライナとドイツ,ARINならカナダとアメリカなどのような感じで異なるISPからのトランジットを2箇所以上してもらう必要があるということです。同じ国でもISPが異なれば問題ありません。
APNICのLIRでリソースを受け取る場合,APNICの要件であるマルチホーム接続が可能であること・何故それらのリソースが必要なのかについての理由を用意する必要があります。マルチホーム接続を満たすためには,例えばVultrとRoute64とFreeTransitからトランジット提供をしてもらえば良いわけですね。あとは頑張って何故リソースが必要であるかの理由をLIRに送りましょう。APNICの審査基準は非常に厳しくRipe NCCなどと違ってLIR基準でできるものではないため確実にリソースを受け取れるようにするための予防線を用意するのが重要と言えます。
一方Ripe NCCのLIRでリソースを受け取る場合,1ヶ所は最低管轄内地域からでもう1ヶ所は別の地域からでも問題ありません。Ripe NCCのリソースはどこでも利用が可能なので,例えばドイツと日本でトランジットをそれぞれ受けるという方法もあります。ですが,最低でも2ヶ所はEU圏などのRipe NCC管轄地域内の2ヶ所以上からトランジットを受けた方が良いと思います。私もそのようにしています。
ちなみに勘違いしていてiFog GmbHに問い合わせした時の返答を載せておきます。

話は少し変わりますが,現在はIPv4アドレスが2013年に新品がなくなってからとても価値が高くなっています。過去に中国のとある企業がAFRINICから大量にIPv4を恣意的に仕入れて,APNICへリソース移転を行い大問題になってAFRINICが大変なことになった大事件があります。ちなみに現在も確か回収しきれていないはずです。IPv6アドレスはIPv4アドレスでの失敗した部分があるため,別のRIRに移管ができなくなっています。地域ごとに振り分けしたアドレスが固定して効率的にするためというが一番の理由だと考えられます。経路爆発問題が現に起こっているのもあるので経路をできる限り減らすための手段として他地域へ他地域に割り当てされたリソースの移管をできないようにしたと言えるでしょう。IPv6アドレスは量が非常に多いため,IPv4アドレスと比べて明らかに価値が高くないのでAFRINICのIPv4問題が発生しないでしょう。
2. AS番号取得までの手順
2.1. 身分証明証を用意
身元確認が必ず必要なので,パスポートと住民票(マイナンバーなし,住所書かれてる書類なら何でもOK)を用意します。国籍確認が必要なのでパスポートが無いと確か無理だったはずです。私は先述の通りiFogから取得しました。他にも取得させてくれるところはあるのでそちらでも取得可能です。iFogはIPv6 /48とAS番号のセット商品を77CHF/year(77スイスフラン),IPv6 /44 + ASNを97CHF/yearで提供しています。
iFog LIRサービス料金について
2.2. ピアリング・トランジット先を用意
AS番号を取得すると,その番号で割り振りされたアドレスをインターネット上に広告する義務があります。その際には間に中継をしてくれるピアリングやトランジット提供してくれるところが必要で,マルチホーム接続(最低2か所別の拠点からの接続)が基本になります。EU圏のVPSサーバーのサービスは割とBGPを使わせてくれるところが多いので最低1か所契約します。そのVPSでBGPオペレーションをやるという証明をするためにそのVPSの支払い証明書や利用状況証明書などの提出が求められる場合があります。私はVultrでAmsterdamリージョンの安い$6/monthのVPSの契約をしました。LoAの提出を必要な場合が多いのでそれをLIR側に用意してもらうように頼みましょう。英語での会話になるので英弱の人は大変ですが,AIに頼りましょう。AIが一番上手にネイティブレベルで扱うのが最も得意な言語は英語なのでAIに作ってもらえばよいです。私は英語が全く読めないわけじゃないですが流石に辛いので,Geminiに文章校正など含め全部丸投げしました。
一応他にもBYOASNを受け付けてくれるところとしてAWS(Amazon Web Services)がありますが有償ですし値段めっちゃ高いのでOCIの方が個人には良心的です。無料枠も謎にめちゃめちゃ優秀ですからね。BYOIPを受け付けてくれるクラウドサービスは多いですがBYOASNとなるとAWSかOCIの2択であり,前者は料金があまりにも高額になるので後者を選ぶのが自然かと思われます。
2.3. まずはLIRを選ぶ
RipeはLIRが多いRIRです。色々LIRがあるので好きなところを選びましょう。IpregistryはIPv6 /44 + ASNを年間€120(初年度のみ€60)で提供してくれるようです。iFogはIPv6 /48+ ASNを年間77CHFで提供しています。このいずれもPAアドレス(プロバイダー依存アドレス)です。もちろんPIアドレス(プロバイダー非依存アドレスの提供もしてくれますが値段はもちろん高くなります。FREETRANSITはASN+PI or PAの提供がありASN+PAは€60/year,ASN+PIは€145/yearで初期費用がそれぞれ€90,€175かかるのでちょっとお高めです。PIアドレスのメリットとして言えるのは,RPKI/ROAとRoute6オブジェクトを自ら管理ができるのでROAの作成が簡単でありBYOIPなどをクラウドサービス(OCI,AWS,GCP,Azure,IBM Cloudなど)でするときにスムーズに進めれます。一方PAアドレスはLIRが所有しているIPアドレスから分割されたものなので管理者が自分ではないのでROAの管理が自分ではできずLIRに頼まなければならなく面倒な部分があります。たまにPAアドレスでもROAの作成権限を付与してくれているところがあるので,その場合はROAの管理が可能です。
2.4. LIRにAS番号申請をする
...話がめっちゃ脱線しましたが,今回私はiFogから取得したのでiFogから取った時の話をします。まずは,Ripe NCCのアカウントを先に作っておく方が良いので作りましょう。データベースの追加は,申し込みの時にやればいいのでアカウントさえ用意しとけば楽です。まずは,Ripeのアカウントを作ります。 https://www.ripe.net/ にアクセスし,右上の方にログインするためのアイコンがあるのでアイコンをクリックし,ログイン画面に行きます。「New User?Sign up」っていう項目があるので「Sign up」をクリックしアカウント登録を行なってください。アカウント登録ができたら,iFogの方で申し込みを進めていきます。
iFogのページを開きましょう。上の方にRIPE LIR Servicesと書いてある部分があるはずです。どれでもいいので,Orderのボタンを押して申し込みを始めます。

iFog LIRサービス
次のような画面になるので,頼みたいパックを選びましょう。例として「ASN+IPv6 /44 PA」をAdd to Cartして追加します。

すると次のような画面になります。ここからRipe側での作業が必要になります。データベースに情報を記録し,そのデータベース名をiFogの欄に入力します。Ripeでデータベースを作る場所は, ここから作れます。Ripeにログインし,データベースを作成していきます。

1. role and maintainer pairを選び-MNTオブジェクトを作成する。
createを押すと,3つ項目が出てくるはずです。真ん中がデフォルトではroleになっているので,右上の「switch person」を押してpersonに切り替えます。それぞれ入力して作成します。一番上のmntnerを作る時,必ず最後に-MNTをつける必要があります。testではなくtest-MNTにする必要があるということです。personはアルファベットで本名を入力します。e-mailは普段使うメールアドレスを入力すれば良いでしょう。
作成を押すとadmin-cの欄にXXYYYY-RIPEというのが書かれたものができます。これが必要なのでメモしておきましょう。
2.role,organizationオブジェクトを作成する。
roleオブジェクトは,roleに職業(studentなど),e-mailを入力し,e-mailの横のボックスの+ボタンを押してabuse-mailbox:を追加し同じくメールアドレスを入力し,最後のものはそのままで作成します。作成すると,XXYYYYY-RIPEというのができるのでこれもメモしておきましょう。
次にorganizationオブジェクトです。めっちゃ色々出てきますね。org-nameは組織名,addressは現在住んでいる家の住所の英語名,countryは国コード(日本はJP),e-mailはメールアドレス,abuse-cはroleオブジェクトのXXYYYYY-RIPE,mnt-refは作成した-MNTを入力して組織を作成します。すると,ORG-XXYYYY-RIPEができます。これもメモします。
3.iFogの申込画面に戻り,作ったデータベース名を入力する。
RIPE DB ORG: ORG-XXYYYY-RIPE
RIPE DB MNT: test-MNT
RIPE DB admin-c:XXYYYY-RIPE
を入力します。上流のプロバイダーを決めているのであれば,ASN of Upstreamに上流プロバイダーのASNを入力すれば良いです。おそらく決まっていないと思うので,入力しなくても問題ありません。continueで次に進み,Checkoutをします。決済とアカウント作成に入ると思うので,それぞれ済ましてiFogからの連絡を待ちましょう。決済には実質PayPal1択なのでPayPalで支払いを行います。その間に上流プロバイダーを用意します。VultrでEU圏のVPSを申し込んだ上で,BGPのFull Routeをもらう申請をすると良いでしょう。
4. iFogからの連絡が来たら
ここから頑張って英語で会話することになり,人によってやり取りが変わってくるので大雑把に何をするかを書きます。英語力に自信がない方は,前の方でも言いましたがAIに頼りましょう。AIは元々英語ベースでのみ作られていて,その後に他言語の学習をさせているので,英語の能力は著しく高いです。AIに,iFogから来た連絡内容を投げて何を言われているかを把握し,日本語で伝えたい内容を英訳してもらい,iFogに返信をして会話を繰り返します。
iFogから本人確認書類を求められますので, パスポートとA書類・B書類があると良いでしょう。国籍確認が必要なはずですので,パスポートはほぼ必須だったかと思われます。私は,パスポート・マイナンバーカード(A書類)・住民票(B書類)を提出しました。パスポート単体でもいいかもしれませんが,その場合は所持者記入欄があるパスポートじゃないと受け付けない可能性があるので別途でA書類などを用意しておく方が良いです。
iFogからの本人確認が終わった後に,Ripe側での本人認証があり,その際にパスポートが推奨されているのでどちらにしろパスポートを持っておくのが良いです。国籍証明書類として非常に優秀ですので。2026年7月から料金が下がるので所持していない人はその時に申し込むと良いかもしれません。
本人確認が完了したら,どこを上流にするかを聞かれますので上流にするプロバイダーをiFogに伝えましょう。Vultrを上流にするときは,VultrのVMインスタンスの請求書も渡してください。Ripeは最初の方は上流プロバイダーを2つ用意するというのを形だけの条件にしていますが,その後1つに減らしても問題ないらしいので,初めからISPがVultrだけでも通してくれることは多いです。VultrでBIRD・FRR・OpenBGPDなどでセットアップをするわけですが,それだけだと不安なときはOracle Cloud Infrastructureでマネージドもおすすめです。ただ,iFogにAS31898のROAを作成してもらった上で,inet6numにdescrを追加して検証トークンを追加する権限を渡してもらう必要があるので,プロバイダーを聞かれた際に「OCIにBYOIP・BYOASNをして,VultrとOCIでマルチホームでやります。なので,AS31898(例外的にAS14544の場合があるが基本はないので気にしない)のROAの作成と,inet6numにdescrを追加して検証トークンを記述する権限が欲しい」との旨を伝えると良いかもしれません。私はiFogにROAの作成権限についての交渉をしなかったのでわかりませんが,交渉次第ではROAの作成権限を付与してくれるかもしれません。いろいろな場所(GCP,Azure,AWSなど)にBYOIPをしたいのであれば是非ROAの交渉をしてみるといいでしょう。
inet6numの編集権限をもらえたらdescrを追加可能になります。inet6numに検証トークンを記述するときは,Ripeのwebページからやります。iFogからリソースを割り当てされると, https://apps.db.ripe.net/db-web-ui/myresources/overview のIPv6とASNの項目にIPv6プリフィックスとAS番号が載っているはずです。IPv6の項目で表示されたプリフィックスを選択し,update objectボタンを押して編集をしていきます。inet6numの横の+ボタンを押して,descrを追加します。そこにOCI検証トークンを入力しオブジェクトの更新をします。そしたらOCI側でインポートの終了を実行してインポートをします。失敗したら原因が表示されるのでOCIのマニュアルとエラー情報を見ながら睨めっこですね。VultrのVPSをEU圏で取っといてそこから経路を捌き出しとけば,あとは日本に持ち込んで吐き出してもいいのでポリシー違反によるAS番号やリソースの没収をされるという危険性がなくなるのでEU圏のBGPを捌けるVPSの契約をお勧めします。要するにVultrなどをEUにしとけば,OCIはTokyo・Osakaリージョンなどのアジア地域でリソースを使用可能です。推奨はあまりできませんが,その方が日本国内で使う分には便利です。
3. BGPオペレーションをする
リソースがLIRから割り当てされたら,VPSで設定をして経路をインターネット上に流しましょう。私は,BIRDを使って経路を流しているのでそのBIRDの設定の一例を紹介します。私はBIRD3を使っています。Ciscoとかのルーターでの設定をするような感じでやりたい場合は,FRRをインストールしてやればできたと思います。
3.1. トランジット・ピアリング先を決める
どこと経路交換をするか・トランジットしてもらうかを決めないと何もできませんね。決めましょう。私は現状, Route64・BGP Tunnel・Vultrとトランジット・ピアリングを,マネージドでOCIでトランジットしています。Hop179やPP Networks,FreeTransit,ENTERNET IX,大学,企業など色々とピアリングやトランジットなどをしてくれるところはあるので調べてみてください。トランジットの提供をして欲しい場合は,BGPを捌けるVPSを借りる方がいいと思います。その方がいちいちトランジット先を探す手間を省けます。
おすすめのピアリング・トランジット先
- Route64(AS212895)
無償で2セッションまでBGPトンネルやピアリング・トランジットをさせてくれます。但し,トランジットの場合は「トラフィックが少量である」が条件になります。特に理由がない限りはピアリングで十分でしょう。GRE,SIT,EoIP,Wireguardなど色々な接続方法が選べます。GREかWireguardが簡単だと思います。 - BGP Tunnel(AS209533)
iFogが提供している無償で利用可能なトンネルブローカーでGREかWireguardでピアを張れます。こちらも2セッションまで利用可能です。 - Oracle Cloud Infrastructure(AS31898)
マネージドになってしまいますが珍しくBYOIPだけでなくBYOASNにも対応しているので,IPとASN持ち込んで広告をすれば無料で1か所埋めれるので楽です。またこっちが管理する手間がなく,OCI側のルーターが勝手にやってくれるのでバックアップとしては優秀です。ただし,BYOIPをする際にはAS31898に対してのROAが必要です。BYOIPするときはLIRに頼みAS31898のROAを作ってもらってください。
私のBGPアナウンスの経路は以下のようになります。一部簡略化してます。家の回線がフレッツ光クロスでひかり電話を契約している関係上HGWを外せないので,自宅からは最大帯域が1Gbpsになってます。GREパケットは通るんですが,HGW経由の場合IPv6でのみかつ,LAN1ポートからのみGREパケットの処理ができるようになっています。つまり10GポートであるLAN4はGRE通さないんですね。なんでなんだ...。実験していないのでわかりませんが,ONUとHGWの間に別のルーターを挟んでHGWを下流に置けば無制限に使えるのかどうかが悩みどころです。v6プラスでの固定IP1を契約しておりかなり複雑な状況でもあるので下手に実験ができない状況で結構悩んでます。

自宅サーバーとVultrのVPSをWireguardとGREの両方で結んでます。GREがいつ切られてもおかしくはないのでそれを防ぐのとあんまり安定しないのもあってWireguardでも接続するようにしています。VM同士は何もプロトコルの制限などなく使えるので全部GREでやっています。
フレッツ光 IPoE回線でGREを通すときは,パケットフィルタリング設定でプロトコル番号の指定ができるので47を指定してください。これでGREパケットを通せます。
3.2. ソフトウェアに設定を記述する
BIRD3の設定ファイルに記述していきます。Linuxによってインストールされる場所が変わるので該当するファイルを編集してください。私のVPS環境ではSELinuxを使いたいのもありRHEL環境です。
自宅サーバーの設定
log syslog all;
router id 172.16.0.1;
ipv6 table master6;
protocol device {
scan time 10;
}
filter export_to_vultr {
if net = 2a0c:xxxx:xxxx::/48 then accept;
if net = 2a0b:yyyy:yy::/46 then accept;
if net = 2a10:zzzz:zzz::/40 then accept;
reject;
}
protocol static my_route {
ipv6;
route 2a0c:xxxx:xxxx::/48 reject;
route 2a0b:yyyy:yy::/46 reject;
route 2a10:zzzz:zzz::/40 reject;
}
protocol direct {
ipv6;
interface "lo", "vultr-bgp","gre-oci-1","gre-vultr-1";
}
#Wireguard
protocol bgp vps_ibgp {
local as $MY_ASN;
source address 172.16.0.2;
neighbor 172.16.0.1 as $MY_ASN;
ipv6 {
import all;
export where proto = "my_route";
};
}
#GRE
protocol bgp vultr_gre {
local as $MY_ASN;
source address 240b:xxxx:yyyy:zzzz::1;
neighbor 2a05:zzzz:yyyy:xxxx:uuuu:tttt:ssss:rrrr as $MY_ASN;
ipv6 {
import all;
export where proto ="my_route";
};
}
#GRE x OCI
protocol bgp oracle {
local as $MY_ASN;
source address 240b:xxxx:yyyy:zzzz::1;
neighbor 2603:zzzz:yyy:x::1 as $MY_ASN;
ipv6 {
import all;
export where proto = "my_route";
};
};
Vultr VPS
log syslog all;
router id 172.16.0.1;
define MY_AS = YYYYYY;
define MY_PREFIX = 2a0c:xxxx:xxxx::/48
filter export_to_vultr {
if net = MY_PREFIX then accept;
if net = 2a0b:yyyy:yy::/46 then accept;
if net = 2a10:zzzz:zzz::/40 then accept;
reject;
}
ipv6 table master6;
protocol device {
scan time 10;
}
protocol direct {
ipv6;
interface "lo", "vultr-bgp", "router64-peer";
}
protocol bgp vultr_v6 {
local as MY_AS;
source address 2a05:zzzz:yyyy:xxxx:uuuu:tttt:ssss:rrrr;
neighbor 2001:xxxx:xxxx::1 as 64515;
password "XXXXXXXXXXXXXXXXXXXXXX";
multihop 2;
graceful restart on;
ipv6 {
import all;
export filter export_to_vultr;
};
}
protocol bgp home_ibgp {
local as MY_AS;
source address 172.16.0.1;
neighbor 172.16.0.2 as MY_AS;
ipv6 {
next hop self;
import all;
export all;
};
}
protocol bgp home_gre {
local as MY_AS;
source address 2a05:zzzz:yyyy:xxxx:uuuu:tttt:ssss:rrrr;
neighbor 240b:xxxx:yyyy:zzzz::1 as MY_AS;
ipv6 {
next hop self;
import all;
export all;
};
}
protocol bgp route64 {
local as MY_AS;
source address 2a11:ttt:sss:uu::2;
neighbor 2a11:ttt:sss:uu::1 as 212895;
multihop 2;
graceful restart on;
ipv6 {
import all;
export filter export_to_vultr;
};
}
filter ASXXXXXXv6 {
if (net ~ 2a0c:xxxx:xxxx::/48 ) then accept;
if (net ~ 2a0b:yyyy:yyyy::/46 ) then accept;
if (net ~ 2a10:zzzz:zzz::/40 ) then accept;
else reject;
}
protocol bgp BGPTunnelV6 {
local 2a0c:vvvv:wwww::46 as $MY_ASN;
neighbor 2a0c:vvvv:wwww::45 as 209533;
multihop 2;
graceful restart on;
ipv6 {
import all;
export filter ASXXXXXXv6;
};
}
protocol bgp OCI_Peer {
local as $MY_ASN;
source address 2a05:zzzz:yyyy:xxxx:uuuu:tttt:ssss:rrrr;
neighbor 2603:zzzz:yyy:x::1 as $MY_ASN;
graceful restart on;
ipv6 {
import all;
export all;
};
};
OCI VMインスタンスの設定
log syslog all;
router id 192.168.39.200;
define MY_AS = YYYY;
define MY_PREFIX = 2a0c:xxxx:xxxx::/48;
ipv6 table master6;
protocol device {
scan time 10;
}
filter export_to_internet {
if net = MY_PREFIX then accept;
if net = 2a0b:yyyy:yyyy::/46 then accept;
if net = 2a10:zzzz:zzz::/40 then accept;
reject;
}
protocol direct {
ipv6;
interface "lo", "BGP-TUNNEL";
}
protocol static my_route {
ipv6;
route MY_PREFIX reject;
route 2a0b:yyyy:yyyy::/46 reject;
route 2a10:zzzz:zzz::/40 reject;
}
protocol bgp BGPTunnel {
local as MY_AS;
source address 2a0c:vvvv:wwww::3e;
neighbor 2a0c:vvvv:wwww::3d as 209533;
graceful restart on;
ipv6 {
import all;
export filter export_to_internet;
};
}
protocol bgp Vultr_Peer {
local as YYYYYY;
source address 2603:zzzz:yyy:x::1;
neighbor 2a05:zzzz:yyyy:xxxx:uuuu:tttt:ssss:rrrr as YYYYYY;
graceful restart on;
ipv6 {
import all;
export all;
};
};
protocol bgp my_house {
local as YYYYYY;
source address 2603:zzzz:yyy:x::1;
neighbor 240b:xxxx:yyyy:zzzz::1 as YYYYYY;
ipv6 {
next hop self;
import all;
export all;
};
};
protocol bgp route64 {
local as YYYYYY;
source address 2a11:ttt:sss:uu::2;
neighbor 2a11:ttt:sss:uu::1 as 212895;
multihop 2;
graceful restart on;
ipv6 {
import all;
export filter export_to_internet;
};
};
3.3. ファイアウォールを設定する
必ず開けなければならないポートが179/tcp,GREを使うならGREパケットを通すように,Wireguard使うなら51820/udp(デフォルト)を開けたりなどしてください。nftablesでGREを許可するときの書き方は次のようになります。あくまでこれは一例なので参考程度に。
meta l4protoとするとIPIP・GRE・SITなどのプロトコルの制御が可能です。設定しない限り通常これらはパケットが破棄か拒否されます。
VPSでのRHELはfirewalld,Debian/Ubuntuはiptablesでパケットフィルタリングを行います。直接nftablesでのパケットフィルタリングはできないので気をつけてください。自宅サーバーからも経路を捌き出す場合はnftablesに移行を推奨します。細かいマイナーな部分まではnftablesへの移行が完了していないので細かい部分の補完をする場合はiptables・ip6tables・arptables・ebtablesなどでやるというのが良いでしょう。
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
・・・・・・・・・・・・・・・
policy drop;
ct state { established, related } accept
iifname "lo" accept
ip6 nexthdr icmpv6 accept
icmp type { echo-request, echo-reply } accept
icmpv6 type { echo-request, echo-reply, nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert } accept
#GRE Packet
meta l4proto gre accept
ip6 nexthdr gre accept
#BGP Packet
tcp dport 179 accept
}
chain forward {
・・・・・・・・・・・・
}
chain output {
・・・・・・・・・・・・
}
}
3.4. BIRDでの文法チェックなど
・文法チェック
いずれかを実行すると文法のチェックが可能。birdcでやる場合,「Configuration OK」と出ればOK。birdでやる場合は,何も表示されなければOK。
$ sudo birdc configure check
$ sudo bird -p
・リロード
いずれかを実行するとリロードされる。
$ sudo systemctl reload bird
$ sudo birdc configure
・ステータスの表示
sudo birdcで簡易シェルに入って操作を推奨する。
$ sudo birdc
bird> show proto #ピア・トランジット先の簡易表示
bird> show proto all #ピア・トランジット先の詳細表示
bird> show route #経路表示
4. 最後に
実は私は,大学生になるまでネットワークの知識全然なくてIPアドレスとドメイン名の関連付けなどを行うDNSの仕組みも全くわかっていなかったり,Aレコードしか知らずAAAAという存在を知りませんでした。IPv6アドレスという存在自体は知っていましたが使った経験が無くて,大学の授業で使って初めて色々と知りました。その時にピアリングやBGP・ASを知って興味を持ち,ここ最近取得して勉強してます。とても奥深くて全貌の理解にはまだまだ時間がかかりそうです。勉強ってちゃんとすればたった1年ちょっとでもかなりな知識を習得できるんだなって思いました。セキュリティの担保をどうしようかとかピアリング先を増やしたりなどやりたいことだったりやらなければいけないことがどんどん出てくるので,それらの醍醐味も含めてBGPオペレーションはやってて楽しいですが,難しいですね。是非AS番号が欲しい方はこの記事を参考にして取得してみてください。ただ,個人ASNというのは既に起きている経路爆発問題を助長させかねないため,安定運用を心掛けましょう。私は現状安定運用させています。
余談ですが,追加でRipeのIPv6アドレスを安く大量に欲しい場合は,DreamServerがお勧めです。/40が€12.00/year,/32が€100.00/yearです。
何かこの記事での間違った部分などがあれば指摘していただけると嬉しいです。
参考文献
・自律システム・ ASNについて
・ルーティングについて
・BGPについて
APNICのLIRでASNの登録を受付可能な組織
・iFog GmbH
・Misaka Network
・TareCloud
・Pysio's Network
・Lycheen