中学生がBGPでIPv6経路交換して遊んでみた(BGPハイジャック対策もしたかった)
はじめに
前回の記事では、BGP(Border Gateway Protocol)を使ってIPv4の経路交換を行いました。
あれから少しBGPの世界にハマってしまい、今回はついにIPv6の経路交換に挑戦してみました。
今回やること
今回は、IPv6でBGPの経路交換を体験してみます。
前回はIPv4だけの環境で、2つのコンテナ間でBGPピアを張り、経路を交換するところまでやりました。
でも実際のインターネットは、すでにIPv6が普通に使われています。
つまり「BGPを本当に理解した」と言うためには、IPv6でも経路交換を試してみる必要があるってわけです。
やることはシンプルです。
- ProxmoxVE上で前回のコンテナと同じような環境を作る。(ubuntu server)
- それぞれにIPv6アドレスを設定して、デュアルスタック環境を作る
- FRRouting(FRR)でIPv6用のBGPピアを設定
- 実際にIPv6経路が交換できるか確認してみる
環境構築
一旦、ASとなるコンテナは普通にインターネットに繋がるコンテナとして作成します。
今回のコンテナのバージョンは以下のとおりです。
root@BGPv6:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 25.04
Release: 25.04
Codename: plucky
root@BGPv6:~#
そして、FRRoutingをインストールするために以下のコマンドを実行します。
apt update && apt install frr
インストールが完了したら、vmbr2に付け替え、以下のようにIPアドレスを設定します。
AS65001:

AS65002:

IPv6アドレスを設定
IPv6でもBGPを動かすには、2種類のアドレスが必要になります。
1つは「隣のBGPルーターと通信するためのアドレス(ピア用)」、もう1つは「広告(アナウンス)する経路として登録するアドレス(ループバック用)」です。
前者は“BGPの通信用チャンネル”、後者は“BGPで世界に知らせたい住所”みたいな役割を持っています。
今回の実験ではこの構成にしました:
| 用途 | インターフェース | BGP1 | BGP2 |
|---|---|---|---|
| BGPピア同士の接続 | eth0 |
fd00::2/64 |
fd00::3/64 |
| 広告(アナウンス)したい自ネットワーク |
lo(ループバック) |
2001:db8:1::1/64 |
2001:db8:2::1/64 |
それを踏まえて、各コンテナで以下を設定します。
AS65001:
ip -6 addr add 2001:db8:1::1/64 dev lo
AS65002:
ip -6 addr add 2001:db8:2::1/64 dev lo
FRR設定ファイルを書く
まず、bgpdを起動するための設定を書きます。設定ファイルの場所は、/etc/frr/daemonsです。
bgpd=no
を
bgpd=yes
と書き換えます。
設定ファイルの場所は、/etc/frr/frr.confです。
AS65001:
router bgp 65001
bgp router-id 10.10.10.2
neighbor fd00::3 remote-as 65002
address-family ipv6 unicast
network 2001:db8:1::/64
neighbor fd00::3 activate
no bgp ebgp-requires-policy
exit-address-family
AS65002:
router bgp 65002
bgp router-id 10.10.10.3
neighbor fd00::2 remote-as 65001
address-family ipv6 unicast
network 2001:db8:2::/64
neighbor fd00::2 activate
no bgp ebgp-requires-policy
exit-address-family
設定したらsystemctl restart frrで再起動します。
ピアリング確認
それぞれのコンテナでvtyshを起動して確認します。
root@BGPv6:~# vtysh
Hello, this is FRRouting (version 10.2.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
BGPv6# show bgp ipv6 summary
IPv6 Unicast Summary:
BGP router identifier 10.10.10.2, local AS number 65001 VRF default vrf-id 0
BGP table version 2
RIB entries 3, using 384 bytes of memory
Peers 1, using 24 KiB of memory
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc
fd00::3 4 65002 6 6 2 0 0 00:00:34 1 2 N/A
Total number of neighbors 1
BGPv6# show bgp ipv6
BGP table version is 2, local router ID is 10.10.10.2, vrf id 0
Default local pref 100, local AS 65001
Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 2001:db8:1::/64 :: 0 32768 i
*> 2001:db8:2::/64 fe80::be24:11ff:fe7e:7e16
0 0 65002 i
Displayed 2 routes and 2 total paths
BGPv6#
と表示され、見事経路交換に成功しました!!
最後に
今回は、BGPでIPv6の経路交換をしてみました。
IPv4より設定が少し複雑でしたが、実際にピアが確立して経路が流れた瞬間は本当に感動しました。
本当はRPKIでBGPハイジャック対策までやりたかったんですが、ネット上の情報が少なすぎて今回は見送りです。
でも、仕組みを理解できたことで次に挑戦する準備はできた気がします。
ここまで読んでいただいてありがとうございました。Likeもよろしくお願いします。
Discussion