0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AS番号を取得してBGPオペレーションをしてみた

0
Last updated at Posted at 2026-05-15

0. AS番号とは

AS番号とは,パブリックインターネット上における独立した組織を示す一意の識別番号のことを指します。例を挙げるとAS2516KDDI,AS714Apple Inc.,AS15169Googleが所有するAS番号になります。このように組織ごとに割り当てされているAS番号が異なります。1つの組織で複数のAS番号を所有することもできます。例えば,最近ガバメントクラウドとして承認されたさくらインターネットが所有するAS番号は,AS9370(東京)AS9371(大阪)AS7684(石狩)の3つを所有しています。さくらインターネットの場合はデータセンターがある東京・大阪・石狩それぞれに別々のAS番号を使っているみたいですね。
さくらインターネット ピアリングポリシー
このように基本的に大きなインターネット関連企業が取るというのがセオリーなAS番号ですが,個人でも取得する事が可能です。AS番号を取得するには,地域インターネットレジストリもとい通称RIR(Reigonal Internet Registry)から割り当てを受けるということをしてもらえば取得する事ができます。日本だと例えばAPNIC管轄内のJPNICだったり,EU圏や中東アジアなどの地域管轄のRipe NCC,ラテンアメリカ管轄のLACNIC,北アメリカなど管轄のARIN,アフリカ管轄のAFRINICがあります。rir-map.png

AS番号については分かったけど,AS番号ASってなんぞやとなる人もいるでしょう。ASAutonomous 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ゴミカスくんなのでWSLtracerouteインストールするか,LinuxmacOSでやった方がいいです。実際にtracerouteを使ってみましょう。使うのはGNU/Linuxtracerouteで,macOSなどのBSD系の方は使いません。

traceroute
$ 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へ伝送されることが繰り返されて接続されるわけです。ちなみにパケットを送る時と返ってくる時に経由されるところは異なることがあります。ルーターはその時の最適な経路を自動で制御して選択してパケットを受け取るので返ってきたパケットが経由してくるところが変わる可能性が十分あると言う事です。もちろん経由地点を指定することも可能ですが,それは組織内ネットワーク内でやると言うのが普通でパブリックインターネットでやることはあまり一般的ではないでしょう。

1. AS番号を取得した理由

ただの自己満が1番の理由ですが,単純に大学の教授からAS番号やBGPオペレーションについて軽く教えてもらって興味を持ち,人生初のJANOGに参加したからと言うのもあります。つい最近のJANOG57に若者支援で参加しました。その時にBGP関係の話も少し聞いたりしてより興味を持ったので取得をしました。といっても実際に取得完了したのは2/8だったのでJANOG57の本会議(2/11~2/13)の数日前でした。全然知識があまりないままにやりましたね。取得してまだ2ヶ月ちょっとで全然ピアリングやトランジットをできていない状況ではありますがちょっとずつ勉強していけたらなと思っています。APNICASNの取得をしようかなと思ったんですが,APNICのポリシーとしてIPアドレスの付与もASNの付与もする気がまともにないようなポリシーかつ値段がクソほど高いので値段が安く取れてポリシーも緩いRipe NCCから取得しました。BGPオペレーションを教えてくれた教授もRipe NCCから取得していたのもあります。
一応個人に対してAPNIC管轄のASNの登録をしてくださる組織は,自分調べではiFog GmbH,Misaka Network,HostUSくらいでしょうか。iFog GmbHから私はRipeASNを取得しました。最初はAPNICのASNを登録したいなと思い,iFogに頼んだのですが自分の読みミスでAPNIC IPv6 /44になっていて,「基本的にあまり登録を受け付けていないが別途で初期費用\$350+年間更新費\$80で受け付ける。またポリシーめっちゃ厳しいから大変だよ。」と回答が来ました。流石に怠いなと思い,Ripe NCCASN登録に切り替えました。こっちの場合は初期費用なしで年更新費が\$77で安かったんですよね。Ripeのポリシーとして最低限1ヶ所はEU圏内に拠点がないとダメですからVultrのVPSを拠点にして,それも合わせて年間\$137とかで済むので安いんですよね。Oracle Cloud Infrastructureが珍しくBYOASNも受け付けているのでそれで無料枠でやれば\$77で済むのでお手軽で安価なのでメリットが高いんですよね。一応OCI使うのであればAPNICASNでもよくねって感じはしますが\$80~130か\$77~137だと流石に後者を選ぶ気がします。別に最低限1ヶ所さえEU圏での拠点(正確に言えばRipeが管轄している地域内)があればいいので最低限1ヶ所だけEUでメインはTokyo,Osakaのデータセンターでやってやれば問題ないわけです。
ちなみに勘違いしていてiFog GmbHに問い合わせした時の返答を載せておきます。
bgp-ifog.png
大変ですね。更新費は大差ないですが,ポリシーがいやらしすぎます。しかもAPNICってマルチホーム接続も条件として入っていますからOCIだけじゃダメなんですね。そうなるとVultrも使わないといけないですし,iFogからの返答で弊社の環境も使わないといけないよってこと言っているので下手するともう少しお金が掛かってくると言うことになります。面倒ですよねこれは。じゃぁ,JPNICはどうなんだろうとなるわけですが審査厳しくてJPNICが個人にASN割り当てしてくれないような気がします。維持費がASN維持費含み年間55,000円(IPv4 /24 or IPv6 /48)でIPv4確保には向いていますがIPv6がボッタクリです。しかも初期登録費用が275,000円でかなり金銭面でのハードルが高いです。こうなると個人ASNRipeになってきてしまうわけですね。RipeならLIRというやすく登録してくれる代行がたくさんいるので便利なわけです。なのでASN取得するならRipeになってきます。学割とかやってくれたら嬉しいんですけどまぁありえないですよね。てか年々更新費が増大してるAPNIC圏はやばいです。ポリシーもクソ厳しいので大変です。中国のとある企業がAFRINICから大量にIPv4を恣意的に仕入れたとして大問題になってAFRINICがブチギレるという大事件がありました。ちなみに現在も確か回収しきれていないはずです。IPv4は2013年に新規在庫が消えて残りは中古しかありません。

2. AS番号取得までの手順

2.1. 身分証明証を用意

身元確認が必ず必要なので,パスポートと住民票(マイナンバーなし,住所書かれてる書類なら何でもOK)を用意します。国籍確認が必要なのでパスポートが無いと確か無理だったはずです。私は先述の通りiFogから取得しました。他にも取得させてくれるところはあるのでそちらでもすることができます。iFogはIPv6 /48とAS番号のセット商品を年間77CHF/year(77スイスフラン)で提供しています。
iFog LIRサービス料金について

2.2. ピアリング・トランジット先を用意

AS番号を取得すると,その番号で割り振りされたアドレスをインターネット上に広告する義務があります。その際には間に中継をしてくれるピアリングやトランジット提供してくれるところが必要で,マルチホーム接続(最低2か所別の拠点からの接続)が基本になります。EU圏のVPSサーバーのサービスは割とBGPを使わせてくれるところが多いので最低1か所契約します。そのVPSでBGPオペレーションをやるという証明をするためにそのVPSの支払い証明書や利用状況証明書などの提出が求められる場合があります。私はVultrAmsterdamリージョンの安い$5/monthVPSの契約をしました。LoAの提出を必要であることが多いのでそれをLIR側に用意してもらうように頼みましょう。英語での会話になるので英弱の人は大変ですが,AIに頼りましょう。AIが一番上手にネイティブレベルで扱うのが最も得意な言語は英語なのでAIに作ってもらえばよいです。私は英語が全く読めないわけじゃないですが流石に辛いので,Geminiに文章校正など含め全部丸投げしました。

一応他にもBYOASNを受け付けてくれるところとしてAWS(Amazon Web Services)がありますが有償ですし値段めっちゃ高いのでOCIの方が個人には良心的です。無料枠も謎にめちゃめちゃ優秀ですからね。BYOIPを受け付けてくれるクラウドサービスは多いですがBYOASNとなるとAWSOCIの2択であり,前者は料金があまりにも高額になるので後者を選ぶのが自然かと思われます。

2.3. まずはLIRを選ぶ

RipeLIRが多いRIRです。色々LIRがあるので好きなところを選びましょう。IpregistryIPv6 /44 + ASNを年間€120(初年度のみ€60)で提供してくれるようです。iFogIPv6 /48+ ASNを年間77CHFで提供しています。このいずれもPAアドレス(プロバイダー依存アドレス)です。もちろんPIアドレス(プロバイダー非依存アドレスの提供もしてくれますが値段はもちろん高くなります。FREETRANSITASN+PI or PAの提供がありASN+PAは60€/year,ASN+PIは€145/yearで初期費用がそれぞれ€90,€175かかるのでちょっとお高めです。PIアドレスのメリットとしてあげられることは,route6オブジェクトを自ら管理ができるのでROAの作成が簡単でありBYOIPなどをクラウドサービス(OCI,AWS,GCP,Azure,IBM Cloudなど)でするときにスムーズに進めることができます。一方PAアドレスLIRが所有しているIPアドレスから分割されたものなので管理者が自分ではないのでROAの管理が自分ではできずLIRに頼まなければならなく面倒な部分があります。たまにPAアドレスでもmnt-byを追加させてくれるところがあるのでその場合は自分でROAの作成ができたりします。

2.4. LIRにAS番号申請をする

...話がめっちゃ脱線しましたが,今回私はiFogから取得したのでiFogから取った時の話をします。まずは,Ripe NCCのアカウントを先に作っておく方が良いので作りましょう。データベースの追加は,申し込みの時にやればいいのでアカウントさえ用意しとけば楽です。まずは,Ripeのアカウントを作ります。 https://www.ripe.net/ にアクセスし,右上の方にログインするためのアイコンがあるのでアイコンをクリックし,ログイン画面に行きます。「New User?Sign up」っていう項目があるのでそれをクリックしアカウント登録を行なってください。アカウント登録ができたら,iFogの方で申し込みを進めていきます。
iFogのページを開きましょう。上の方にRIPE LIR Servicesと書いてある部分があるはずです。どれでもいいので,Orderのボタンを押して申し込みを始めます。
スクリーンショット 2026-05-16 0.46.46.png
iFog LIRサービス
次のような画面になるので,頼みたいパックを選びましょう。例として「ASN+IPv6 /44 PA」をAdd to Cartして追加します。
スクリーンショット 2026-05-16 2.08.10.png
すると次のような画面になります。ここからRipe側での作業が必要になります。データベースに情報を記録し,そのデータベース名をiFogの欄に入力します。Ripeでデータベースを作る場所は, ここから作れます。Ripeにログインし,データベースを作成していきます。
スクリーンショット 2026-05-16 2.10.50.png

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-croleオブジェクトの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を申し込んだ上で,BGPFull Routeをもらう申請をすると良いでしょう。

4. iFogからの連絡が来たら

ここから頑張って英語で会話することになり,人によってやることが変わってくるので大雑把に何をするかを書きます。英語力に自信がない方は,前の方でも言いましたがAIに頼りましょう。AIは元々英語ベースでのみ作られていて,その後に他言語の学習をさせているので,英語の能力は著しく高いです。AIに,iFogから来た連絡内容を投げて何を言われているかを把握し,日本語で伝えたい内容を英訳してもらい,iFogに返信をするということを繰り返します。
iFogから本人確認書類を求められますので, パスポートとA書類・B書類があると良いでしょう。国籍確認が必要なはずですので,パスポートはほぼ必須だったかと思われます。私は,パスポート・マイナンバーカード(A書類)・住民票(B書類)を提出しました。パスポート単体でもいいかもしれませんが,その場合は所持者記入欄があるパスポートじゃないと受け付けない可能性があるので別途でA書類などを用意しておく方が良いです。
iFogからの本人確認が終わった後に,Ripe側での本人認証があり,その際にパスポートが推奨されているのでどちらにしろパスポートを持っておくのが良いです。国籍証明書類として非常に優秀ですので。2026年7月から料金が下がるので所持していない人はその時に申し込むと良いかもしれません。

本人確認書類について

A書類

顔写真付きで住所の書かれたもの。
例:運転免許証,マイナンバーカード,小型船舶免許証,パスポート(2020年1月までに新規取得し期限切れにならずに更新している場合のみ)など

B書類

顔写真のない住所の書かれたもの。
例: 保険証,年金手帳など

本人確認が完了したら,どこを上流にするかを聞かれますので上流にするプロバイダーをiFogに伝えましょう。Vultrを上流にするときは,VultrのVMインスタンスの請求書も渡してください。Ripeは最初の方は上流プロバイダーを2つ用意するというのを形だけの条件にしていますが,その後1つに減らしても問題ないので,初めからVultrだけでも通してくれることは多いです。VultrでBIRDFRROpenBGPDなどでセットアップをするわけですが,それだけだと不安なときはOracle Cloud Infrastructureでマネージドでやることをお勧めします。ただ,iFogAS31898ROAを作成してもらった上で,inet6numdescrを追加して検証トークンを追加する権限を渡してもらう必要があるので,プロバイダーを聞かれた際に「OCIBYOIPBYOASNをして,VultrとOCIでマルチホームでやります。なので,AS31898(例外的にAS14544のことがあるが基本はないので気にしない)のROAの作成と,inet6numdescrを追加して検証トークンを記述する権限が欲しい」との旨を伝えると良いかもしれません。私はiFogROAの作成権限についての交渉をしたことがないのでわかりませんが,交渉次第ではROAの作成権限を付与してくれるかもしれません。いろいろな場所(GCP,Azure,AWSなど)にBYOIPをしたいのであれば是非ROAの交渉をしてみるといいでしょう。
inet6numの編集権限をもらうことができたらdescrを追加可能になります。inet6numに検証トークンを記述するときは,Ripeのwebページからやります。iFogからリソースを割り当てされると, https://apps.db.ripe.net/db-web-ui/myresources/overviewIPv6ASNの項目にIPv6プリフィックスとAS番号が載っているはずです。IPv6の項目で表示されたプリフィックスを選択し,update objectボタンを押して編集をしていきます。inet6numの横の+ボタンを押して,descrを追加します。そこにOCI検証トークンを入力しオブジェクトの更新をします。そしたらOCI側でインポートの終了を実行してインポートをします。失敗したら原因が表示されるのでOCIのマニュアルとエラー情報を見ながら睨めっこですね。VultrのVPSをEU圏で取っといてそこから経路を捌き出しとけば,あとは日本に持ち込んで吐き出してもいいのでポリシー違反によるAS番号やリソースの没収をされるという危険性がなくなるのでEU圏のBGPを捌けるVPSの契約をお勧めします。要するにVultrなどをEUにしとけば,OCITokyoOsakaを使ってリソースを使えるということです。その方が日本国内で使う分には便利ですから。

3. BGPオペレーションをする

リソースがLIRから割り当てされたら,VPSで設定をして経路をインターネット上に流しましょう。私は,BIRDを使って経路を流しているのでそのBIRDの設定の一例を紹介します。私はBIRD3を使っています。Ciscoとかのルーターでの設定をするような感じでやりたい場合は,FRRをインストールしてやればできたと思います。

3.1. トランジット・ピアリング先を決める

どこと経路交換をするか・トランジットしてもらうかを決めないと何もできませんね。決めましょう。私は現状, Route64BGP TunnelVultrとトランジット・ピアリングを,マネージドでOCIでトランジットしています。Hop179PP Networks,FreeTransit,ENTERNET IX,大学,企業など色々とピアリングやトランジットなどをしてくれるところはあるので調べてみてください。トランジットの提供をして欲しい場合は,BGPを捌けるVPSを借りる方がいいと思います。その方がいちいちトランジット先を探す手間を省けます。

おすすめのピアリング・トランジット先

  1. Route64(AS212895)
    無償で2セッションまでBGPトンネルやピアリング・トランジットをさせてくれます。但し,トランジットの場合はトラフィックが少ないことが条件になります。特に理由がない限りはピアリングで十分でしょう。GRE,SIT,EoIP,Wireguardなど色々な接続方法が選べます。GREWireguardが簡単だと思います。
  2. BGP Tunnel(AS209533)
    iFogが提供している無償で利用可能なトンネルブローカーでGREWireguardでピアを張ることができます。こちらも2セッションまで利用可能です。
  3. Oracle Cloud Infrastructure(AS31898)
    マネージドになってしまいますが珍しくBYOIPだけでなくBYOASNにも対応しているので,IPASN持ち込んで広告をすれば無料で1か所埋めれるので楽です。またこっちが管理する手間がなく,OCI側のルーターが勝手にやってくれるのでバックアップとしては優秀です。ただし,BYOIPをする際にはAS31898に対してのROAが必要です。BYOIPするときはLIRに頼みAS31898ROAを作ってもらってください。

私のBGPアナウンスの経路は以下のようになります。一部簡略化してます。家の回線がフレッツ光クロスでひかり電話を契約している関係上HGWを外すことができないので,自宅からは最大帯域が1Gbpsになってます。GREパケットは通るんですが,HGW経由の場合IPv6でのみかつ,LAN1ポートからのみGREパケットの処理ができるようになっています。つまり10GポートであるLAN4GRE通さないんですね。なんでなんだ...。実験していないのでわかりませんが,ONUHGWの間に別のルーターを挟んでHGWを下流に置けば無制限に使えるのかどうかが悩みどころです。v6プラスでの固定IP1を契約しておりかなり複雑な状況でもあるので下手に実験ができない状況で結構悩んでます。
bgp-map-my-asn.jpeg
自宅サーバーとVultrのVPSをWireguardGREの両方で結んでます。GREがいつ切られてもおかしくはないのでそれを防ぐのとあんまり安定しないのもあってWireguardでも接続するようにしています。VM同士は何もプロトコルの制限などなく使えるので全部GREでやっています。
フレッツ光 IPoE回線でGREを通すときは,パケットフィルタリング設定でプロトコル番号の指定ができるので47を指定してください。そうすることでGREパケットを通すことができます。

3.2. ソフトウェアに設定を記述する

BIRD3の設定ファイルに記述していきます。Linuxによってインストールされる場所が変わるので該当するファイルを編集してください。私のVPS環境ではSELinuxを使いたいのもありRHEL環境です。

自宅サーバーの設定

/etc/bird/bird.conf
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

/etc/bird.conf
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インスタンスの設定

/etc/bird.conf
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(デフォルト)を開けたりなどしてください。nftablesGREを許可するときの書き方は次のようになります。あくまでこれは一例なので参考程度に。
meta l4protoとするとIPIPGRESITなどのプロトコルの制御が可能です。設定しない限り通常これらはパケットが破棄か拒否されます。
VPSでのRHELfirewalld,Debian/Ubuntuiptablesでパケットフィルタリングを行います。直接nftablesでのパケットフィルタリングはできないので気をつけてください。自宅サーバーからも経路を捌き出す場合はnftablesに移行しておくことを私は推奨します。細かいマイナーな部分まではnftablesへの移行が完了していないので細かい部分の補完をする場合はiptables・ip6tables・arptables・ebtablesなどでやるというのが良いでしょう。

/etc/nftables.conf
#!/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アドレスという存在自体は知っていましたが使ったことが無くて,大学の授業で使って初めて色々と知りました。その時にピアリングやBGPASを知って興味を持ち,ここ最近取得して勉強してます。とても奥深くて全貌の理解にはまだまだ時間がかかりそうです。勉強ってちゃんとすればたった1年ちょっとでもかなりな知識を習得できるんだなって思いました。セキュリティの担保をどうしようかとかピアリング先を増やしたりなどやりたいことだったりやらなければいけないことがどんどん出てくるので,それらの醍醐味も含めてBGPオペレーションはやってて楽しいですが,難しいですね。是非AS番号が欲しい方はこの記事を参考にして取得してみてください。
余談ですが,追加でRipeIPv6アドレスを安く大量に欲しい場合は,DreamServerがお勧めです。/40が€12.00/year,/32が€100.00/yearです。

何かこの記事での間違った部分などがあれば指摘していただけると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?