はじめに
NTTフィールドテクノの荒川 瑞斗です。
本記事では、コンテナネットワーク検証ツール「Containerlab」と、高機能なOSSソフトウェアルータである「freeRouter」を組み合わせて、「Inter-AS OptionC」という高度なネットワーク構成を構築しました。
本記事の結論と得られた知見
- 商用NOSのライセンス費用をかけず、Containerlab x freeRouter で複雑なSR-MPLS環境であるInter-AS OptionCの再現が出来ました。
- 「グローバルルーティングテーブルを持たない」といったfreeRouter特有の設計思想への理解が、構築の鍵となりました。
- 高度なSR-MPLS機能をOSSであるfreeRouterがサポートしている点は、Cisco IOS XRに匹敵する検証能力を備えていることを示しています。
※ 本記事は2025年6月の構築当時の情報に基づきつつ、一部2026年4月時点の最新状況を追記しています
対象読者
本記事が想定する対象読者は以下の通りです。
- Containerlabを用いたネットワーク検証に興味がある人
- 仮想環境でネットワークを構築して検証したいが、予算を抑えたいと考えている人
- freeRouter(RAREプロジェクト)の独自の設計思想や仕様について知りたい人
- SR-MPLSの基礎知識がある人
目次
- はじめに
- 対象読者
- 目次
- 1. 背景・目的
- 2. freeRouterの特徴・仕様
- 3. Inter-AS OptionC 概要
- 4. 実装・検証内容
- 5. 工夫点と注意点
- 6. 動作確認
- 7.最後に
- 執筆者
- 参考資料・出典
- 商標
- 免責事項
1. 背景・目的
複雑なトポロジを持つネットワークの保守運用を想定し、その事前検証が可能な環境を構築する機会がありました。
検証環境を構築するにあたり、コンテナベースで動作し、ホストOS(依頼主の環境)に依存せず動作する「Containerlab」に着目しました。
一方で、商用NOSはライセンス費用が高額な上、Containerlab上で動作するコンテナイメージとして用意することは至難の業です。
そこでOSS NOSの活用を検討しました。
VyOSやFRRouting、SONiCなども候補に挙がりましたが、今回の要件である高度なSR-MPLS機能の柔軟性、そして何より「Cisco IOS XRに近いCLI体系」を重視した結果、freeRouterが最適解であると判断しました。
本記事に登場する主なネットワーク用語
- NOS (Network Operating System): ルーターやスイッチなどのネットワーク機器を動かす専用のOS。
- PE (Provider Edge) / P (Provider): 網の端に位置するルータ(PE)と、中心部で中継を担うルータ(P)。
- ASBR (Autonomous System Boundary Router): 異なるASを接続する境界ルータ。
- RR (Route Reflector): BGPの経路情報を効率的に配布する役割を持つルータ。
- SR-MPLS / SID / SRGB: セグメントルーティング技術。各ノードを識別するID(SID)や、そのラベル範囲(SRGB)を使用します。
- AFI / SAFI: BGPで扱う「どのアドレス体系(IPv4等)」と「経路の用途(ユニキャスト、マルチキャスト、ラベル付きなど)」を指す定義。
- ECMP / BFD: 複数経路を同時に使う技術(ECMP)。
2. freeRouterの特徴・仕様
Cisco IOS XR と freeRouter の確認コマンドを比較
以下に主要なコマンド比較の例を抜粋します。
| 項目 | Cisco IOS XR (例) | freeRouter (相当) |
|---|---|---|
| ルーティング確認 | show route vrf A |
show ipv4 route A |
| Ping確認 | ping vrf A 172.16.100.1 |
ping 172.16.100.1 vrf A |
| OSPFネイバー確認 | show ospf neighbor |
show ipv4 ospf 10 neighbor |
Cisco IOS XR と freeRouter のコンフィグを比較
- Segment Routing Global Block (SRGB)
- Cisco IOS XRでは
segment-routing配下でグローバルブロックを定義しますが、freeRouterではOSPFプロセス内でベースと範囲を定義します。
- Cisco IOS XRでは
! Cisco IOS XR segment-routing global-block 16000 275999 ! router ospf 100 segment-routing mpls segment-routing sr-prefer area 0 mpls traffic-eng interface Loopback1 prefix-sid index 16001 ! ! !
! freeRouter (相当) router ospf4 10 vrf DEF_SEGROUT router-id 172.16.100.100 traffeng-id 0.0.0.0 segrout 500 base 12000 ! SRGBの定義 area 0 enable area 0 spf-ecmp area 0 segrout ecmp exit ! interface loopback1 vrf forwarding DEF_SEGROUT ipv4 address 172.16.100.100 255.255.255.255 router ospf4 10 enable router ospf4 10 area 0 router ospf4 10 passive router ospf4 10 segrout index 100 ! Indexの指定 router ospf4 10 segrout node no shutdown log-link-change exit !
- Route Policy (RPL)
- 複雑な優先度制御(MEDやLocal Preferenceの打ち分け)についても、freeRouterの
route-policy構文を用いることが可能です。 - 具体的には、Cisco IOS XRの
prefix-setをprefix-listに変換し、sequence管理下のelsif構文にマッピングすることで、同等の経路選択ロジックを実現しています。
- 複雑な優先度制御(MEDやLocal Preferenceの打ち分け)についても、freeRouterの
! Cisco IOS XR
prefix-set L3vpnGW-1
172.16.200.100/32
end-set
!
prefix-set L3vpnGW-2
172.16.200.200/32
end-set
!
route-policy L3vpnGW-POLICY
if destination in L3vpnGW-1 or destination in L3vpnGW-2 then
pass
elseif next-hop in L3vpnGW-1 then
set med 100
elseif next-hop in L3vpnGW-2 then
set med 300
else
pass
endif
end-policy
!
! freeRouter (相当) prefix-list A-ROUTE sequence 10 permit 172.16.200.100/32 ge 32 le 32 sequence 20 permit 10.50.80.4/30 ge 30 le 30 sequence 30 permit 172.16.200.1/32 ge 32 le 32 sequence 40 permit 10.200.135.0/30 ge 30 le 30 sequence 50 permit 10.200.135.4/30 ge 30 le 30 exit ! prefix-list B-ROUTE sequence 10 permit 172.16.200.200/32 ge 32 le 32 sequence 20 permit 10.50.81.4/30 ge 30 le 30 sequence 30 permit 172.16.200.2/32 ge 32 le 32 sequence 40 permit 10.200.136.0/30 ge 30 le 30 sequence 50 permit 10.200.136.4/30 ge 30 le 30 exit ! route-policy PE-UL-ROUTE sequence 10 if prefix-list A-ROUTE sequence 20 set locpref 1400 sequence 30 pass sequence 40 elsif prefix-list B-ROUTE sequence 50 set locpref 1000 sequence 60 pass sequence 70 else sequence 80 pass sequence 90 enif exit !
比較した結果
このように、Cisco IOS XRとfreeRouterとのコンフィグ差分をマッピングし、相当コマンドの存在を確認しました。
互換性維持の判断基準をクリアしたため、freeRouterにて設計を進めました。
freeRouterでは、VRFやプロセスを明示的に指定して情報を取得する体系となっています。
調査を続けていく中で、ルーティングテーブルに関して、とても興味深い知見が得られました。
ルーティングテーブルの仕様と独自の解釈
freeRouterはグローバルルーティングテーブルを持ちません。
この独特な仕様は非常に苦労させられました。
ここで、公式の説明(引用)と、検証から得た独自の考察を整理して解説します。
- 公式の設計思想(引用)
no global routing table: every routed interface must be in a virtual routing table
In FreeRouter everything is in a VRF (so there is no global VRF)
This design choice has very positive consequences like: No VRF awareness questions,have multiple bgp processes for the same freeRouter instance (each bound to a different VRF)
- 検証から得た独自考察と所感
- 「グローバルルーティングテーブル」が存在しない
- 全てのインターフェースは何らかのVRFに属している必要があります。
- VRF分離の課題
- 現状、VRF間をルーティングさせてもRT(Route Target)値が期待通りに機能しないケースが見受けられました。
- BGPプロセスの多重化
- 1つのBGPプロセスが1つのVRFに固定されるため、ユーザ(テナント)を物理的に分けるには、BGPプロセスそのものを分ける必要があるという結論に達しました。
- 「グローバルルーティングテーブル」が存在しない
3. Inter-AS OptionC 概要
Cisco社が提示している内容を確認します。
・Route Reflectors exchange VPNv4 routes
・ASBRs Exchange PE loopbacks (IPv4) with labels as these are BGP NH addresses
・Eliminates LFIB duplication at ASBRs. ASBRs don’t hold VPNv4 prefix/label info.
・Two Options for Label Distribution for BGP NH Addresses for PEs in each domain:
1. BGP IPv4 + Labels (RFC3107) – most preferred & recommended
2. IGP + LDP ・BGP exchange Label Advertisement Capability - Enables end-end LSP Paths
・Subsequent Address Family Identifier (SAFI value 4) field is used to indicate that the NLRI contains a label
・Disable Next-hop-self on eBGP RRs (peers)
私は、以下の解釈をしました。
- VPNルートの伝送
- RR (Route Reflector) が AS間のVPNv4 ルート交換を行います。
- ASBRはVPNv4のパス情報やラベル(LFIB)を保持することはしません。
- エンドツーエンドLSPの確立
- 異なるASにあるPE間で通信するため、PEのループバックアドレスをラベル付きで共有します。
- RFC 3107 (SAFI 4) に基づき、IPv4プレフィックスにラベルを付与して広告するBGP-LUを推奨します。
- BGPのCapabilityを利用してラベルをやり取りし、ASを跨いだ一気通貫のラベルスイッチパス(LSP)を形成します。
- ルーティングの制御
- eBGP RR間でルートを交換する際、ネクストホップを自分自身(RR)に書き換えないように設定します。
4. 実装・検証内容
前提条件・動作環境
本記事の検証環境は以下の通りです。
- ホストOS: Linux環境(Containerlabが動作する環境)
- ネットワークOS: freeRouter(RAREプロジェクト) ※ 使用したバージョンは、v24.3.30-cur, done by sprscc13@mrn0b0dy.
- クライアントOS: Alpine Linux
- ツール: Containerlab, Docker
- 検証時点: 2025年6月
システム構成
本検証では、AS65000とAS64512の2つの自律システム(AS)を跨ぐ構成を構築しました。
合計14台のコンテナを使用し、各ASにはPE、P、ASBR(ASBR兼Route Reflector)を配置しています。

表記について
freeRouterのコマンド体系に基づいて記載している個所があります。
以下の読み替えをお願いします。
- 「labeled」と「labeled-unicast」 : 一般的なBGP用語(BGP-LU)では、labeled-unicast です。
設計方針/設計ポイント
前述のInter-AS OptionCを実現するため、以下のポイントに基づき構築を行いました。
- ASBR間でのラベル交換: ASBRがlabeledルートを交換します。
- Next-hopの管理: PEのIPv4 LoopbackアドレスをBGP next hopとしてラベル交換を行います。
- ラベル配布: 各ドメインのPEに対して、OSPFによるSR-MPLS(Segment Routing)を使用します。
- 再配布の活用: Loopbackアドレスのリーチビリティ(到達性)は別プロセスのOSPFで広告し、BGPに再配布させます。
ネットワーク設計
内部リンク、およびAS間には特定のセグメントを割り当て、OSPFプロセスをAS内(プロセス10)とAS外(プロセス20)で分離しました 。
AS間にて、Loopback到達性を確保するため、各ASBRに別プロセスのOSPF(プロセス20)を動作させています。
一部、設定値を掲載します。
基本パラメータ
| 項目 | 設定内容 |
|---|---|
| VRF定義 | DEF_SEGROUT |
| OSPFプロセス番号 | AS内: 10 / AS外: 20 |
| SRGB (segrout 500 base 12000) | 12000 ~ 12499 |
| AS番号 | eなし装置: 65000 / eあり装置: 64512 |
OSPF コスト値一覧
| 該当箇所 | コスト値 |
|---|---|
| PE-P | 2000 |
| P-ASBR, ePE-eASBR | 700 |
| ASBR-ASBR, eASBR-eASBR (process 10) | 1300 |
| ASBR-ASBR, eASBR-eASBR (process 20) | 900 |
| ASBR-eASBR | 3000 |
IPアドレス / サブネット範囲
| 区分 | プレフィックス | サブネットマスク | 最大ノード数 | 範囲 |
|---|---|---|---|---|
| OSPF 10 (AS 65000) | /20 | 255.255.240.0 | 4096 | 10.100.128.0 ~ 10.100.143.255 |
| OSPF 10 (AS 64512) | /20 | 255.255.240.0 | 4096 | 10.200.128.0 ~ 10.200.143.255 |
| OSPF 20 | /28 | 255.255.255.240 | 16 | 10.10.186.0 ~ 10.10.186.15 |
| CE (VPC1_1, VPC1_2) | /29 | 255.255.255.248 | 8 | 10.50.80.0 ~ 10.50.80.7 |
| CE (VPC2_1, VPC2_2) | /29 | 255.255.255.248 | 8 | 10.50.81.0 ~ 10.50.81.7 |
| Lo1 (AS 65000) | /24 | 255.255.255.0 | 256 | 172.16.100.0 ~ 172.16.100.255 |
| Lo2 (AS 64512) | /24 | 255.255.255.0 | 256 | 172.16.200.0 ~ 172.16.200.255 |
実際のコンフィグ
freeRouterでの物理インターフェースや論理インタフェースと、今回の肝であるOSPF, labeledのコンフィグを紹介します。
! ASBR1のコンフィグ ! 物理インタフェース interface ethernet5 description [B1]eASBR1_eth5 cdp enable bundle-group 1 no shutdown log-link-change exit ! ! 論理インタフェース interface bundle1 description eASBR1 vrf forwarding DEF_SEGROUT ipv4 address 10.10.186.1 255.255.255.252 mpls enable router ospf4 20 enable router ospf4 20 area 0 router ospf4 20 cost 3000 no shutdown log-link-change exit ! ! OSPFとSegment Routing router ospf4 20 vrf DEF_SEGROUT router-id 192.18.1.1 traffeng-id 0.0.0.0 segrout 500 base 10000 area 0 enable area 0 segrout exit ! ! Loopbackインタフェースへの適用 interface loopback2 vrf forwarding DEF_SEGROUT ipv4 address 192.18.1.1 255.255.255.255 router ospf4 20 enable router ospf4 20 area 0 router ospf4 20 passive router ospf4 20 segrout index 20 router ospf4 20 segrout node no shutdown log-link-change exit ! ! BGP-LU router bgp4 65000 vrf DEF_SEGROUT local-as 65000 router-id 172.16.100.100 address-family labeled vpnuni ! template RRC-LU remote-as 65000 template RRC-LU local-as 65000 template RRC-LU address-family labeled vpnuni template RRC-LU distance 200 template RRC-LU additional-path-rx labeled vpnuni template RRC-LU additional-path-tx labeled vpnuni template RRC-LU update-source loopback1 template RRC-LU segrout template RRC-LU route-reflector-client template RRC-LU next-hop-self ! template eBGP remote-as 64512 template eBGP local-as 65000 template eBGP address-family labeled vpnuni template eBGP distance 20 template eBGP ttl-security 3 template eBGP additional-path-rx labeled vpnuni template eBGP additional-path-tx labeled vpnuni template eBGP update-source loopback2 template eBGP segrout template eBGP route-policy-in PE-UL-ROUTE ! template eBGP-LU remote-as 64512 template eBGP-LU local-as 65000 template eBGP-LU address-family labeled vpnuni template eBGP-LU distance 20 template eBGP-LU ttl-security 1 template eBGP-LU additional-path-rx labeled vpnuni template eBGP-LU additional-path-tx labeled vpnuni template eBGP-LU update-source loopback1 template eBGP-LU segrout template eBGP-LU next-hop-unchanged ! template iBGP-LU remote-as 65000 template iBGP-LU local-as 65000 template iBGP-LU address-family labeled vpnuni template iBGP-LU distance 200 template iBGP-LU additional-path-rx labeled vpnuni template iBGP-LU additional-path-tx labeled vpnuni template iBGP-LU update-source loopback1 template iBGP-LU segrout template iBGP-LU next-hop-self ! neighbor 192.18.5.5 template eBGP ! neighbor 172.16.100.1 template RRC-LU ! neighbor 172.16.100.2 template RRC-LU ! neighbor 172.16.100.200 template iBGP-LU ! neighbor 172.16.200.100 template eBGP-LU ! ! redistribute connected route-policy CON-TO-BGP exit !
5. 工夫点と注意点
デプロイ(起動)時にコンフィグが反映されない事象
Containerlabの公式サイトにおけるfreeRouter(RARE)の解説では、以下のように説明されています。
参考: https://containerlab.dev/manual/kinds/rare-freertr/
User defined config
It is possible to make RARE/freeRtr nodes to boot up with a user-defined config instead of a default one. In this case you'd have to create rtr-hw.txt and rtr-sw.txt files and bind mount them to the /rtr/run/conf dir:
topology:
nodes:
rtr1:
kind: rare
image: ghcr.io/rare-freertr/freertr-containerlab:latest
binds:
- rtr-hw.txt:/rtr/run/conf/rtr-hw.txt
- rtr-sw.txt:/rtr/run/conf/rtr-sw.txt
しかしながら、これを記載してデプロイするとコンフィグが初期状態のままとなります。
freeRouterのDockerfileの仕様から全てを確認したところ、特定のファイルによって設定が上書きされる仕様であることが判明したため、該当ファイルを直接バインドマウントすることで解決しました。
topology:
nodes:
PE_A:
kind: rare
image: ghcr.io/rare-freertr/freertr-containerlab:main
mgmt-ipv4: 172.31.0.2
binds:
- startup_configuration/PE_A/rtr-sw.txt:/rtr/rtr-sw.txt
※ 2026年4月時点では、/rtr/run/conf/ にバインドで動作するように修正されていることを確認済みです。
SR-MPLS網の隠蔽(ハイド)
Cisco IOS XRの mpls ip-ttl-propagate disable forwarded に相当するコマンドがfreeRouterには存在しません 。
そのため、PEルータのユーザ側インタフェースにアウトバウンドACLを適用し、SR-MPLS網内のホップが見えないよう工夫しました 。
- mpls ip-ttl-propagate disable forwarded の機能概要
- IPパケットのTTL(Time To Live)値をMPLSラベルのTTLへコピーする動作(伝搬)を無効化するために使用されます。
- TTL伝搬の仕組み
- ルータやL3SWがIPパケットをラベルでカプセル化してSR-MPLS網に送り出す際、以下の動作が行われます。
- 1. IPヘッダのTTL値が、MPLSラベルのTTLフィールドにコピーされます。
- 2. SR-MPLS網内の各ルータ(Pルータ)を通るたびに、ラベルのTTLが「1」ずつ減ります。
- 3. SR-MPLS網を出る際、ラベルのTTL値がIPヘッダのTTLに戻されます。
- 最大の目的
- 外部ユーザからMPLSコアネットワークの内部構造を見えないようにすることです。
実際にクライアントOS間のtracerouteをしたところ、以下の通り、網内の秘匿に成功しました。
/ # traceroute 10.50.80.6 traceroute to 10.50.80.6 (10.50.80.6), 30 hops max, 46 byte packets 1 10.50.80.2 (10.50.80.2) 0.620 ms 0.868 ms 1.260 ms 2 * * * 3 * * * 4 * * * 5 10.50.80.6 (10.50.80.6) 2.772 ms 2.461 ms 1.841 ms
仕組みとしては、単純に明示的な deny だけで隠蔽しています。
access-list custA_Filter sequence 10 permit all 10.50.80.0 255.255.255.248 all any all sequence 20 deny all any all any all exit !
tracerouteは、TTLが0になった時にルータが返す ICMP Time Exceeded (Type 11, Code 0) を受け取ることで経路を表示します。
上記のACLでは、最終的な宛先への通信は permit していますが、それ以外の通信(網内ルータからのICMPエラー通知など)を sequence 20 deny で叩き落としています。
まとめ
本構成では、SR-MPLS網内のPルータが返す ICMP Time Exceeded (Type 11, Code 0) を、PEルータの出口ACL(sequence 20 deny all any all any all)で意図的にドロップさせています。
通常の mpls ip-ttl-propagate disable が「TTLのコピーを止めることで、PルータでTTLを0にさせない(=ICMPを発生させない)手法」であるのに対し、今回の手法は「発生したICMP通知を境界で検閲・遮断する手法」です。
これにより、外部からは網内のIPアドレスはおろか、ICMPエラーメッセージすら到達しないため、結果として * * *(タイムアウト)となり、ユーザ・トラフィックと網内管理情報の境界の明確化を実現しています。
6. 動作確認
- 通常時のルート (上り、下り共に同一ルート)
- Aルート: VPC1_1 ~ ASBR1 ~ eASBR1 ~ VPC1_2
- Bルート: VPC2_1 ~ ASBR2 ~ eASBR2 ~ VPC2_2
※ パケットロス計測は、VPC(Alpine Linux)間でデフォルトのping(1秒間隔、タイムアウト1秒)を実行し、ICMP Sequenceの抜けをカウントしたものです。
したがって、33 packetsのロスは約33秒間の通信断を意味します。
疎通が安定しているか (VPC間のping)
- 1日目 10000 packets loss 0%
- 2日目 10000 packets loss 0%
- 3日目 10000 packets loss 0%
- 4日目 10000 packets loss 0%
- 5日目 10000 packets loss 0%
網内(AS内)リンク障害
記載のないインタフェースはパケットロス無し。
検証の結果、リンクパススルー機能が無いため、OSPFのダウン検知に依存する箇所では数十パケット単位のロスが避けられないことが分かりました。
仮想環境ゆえに物理リンクの断が即座に伝播せず、BFD非対応の影響をこの段階で身をもって実感することになりました。

| 障害箇所 | パケットロス(目安) | 挙動・ルート変化 | ログ・検知の特徴 |
|---|---|---|---|
| PE_A (P2向け論理インタフェース) | 約34 packets | ・Aルートのみロス有 ・AS間ルート変化なし |
P2とのOSPFダウン検知 (対向で約36秒後) |
| PE_B (P1向け論理インタフェース) | 約33 packets | ・Bルートのみロス有 ・AS間ルート変化なし |
P1とのOSPFダウン検知 (対向で約40秒後) |
| P1 (両ASBR向け論理インタフェース) | 0 ~ 40 packets | ・送信側ならロス無 ・受信側ならOSPF検知までロス有 |
ASBR1/2とのOSPFダウンを検知 |
| P2 (両ASBR向け論理インタフェース) | 0 ~ 35 packets | ・送信側ならロス無 ・受信側ならOSPF検知までロス有 |
ASBR1/2とのOSPFダウンを検知 |
AS間(Inter-AS)直結リンク障害
ASBR間のeBGP/OSPFリンクの障害です。
ここはInter-AS OptionCの核心部であり、冗長ルートへの切り替わりが発生します。
| 障害箇所 | パケットロス(目安) | 挙動・ルート変化 | ログ・検知の特徴 |
|---|---|---|---|
| ASBR1 (eASBR1向け論理インタフェース) | 約33 packets | ・AルートがASBR2経由へ迂回 | eASBR1とのOSPFダウン後、eBGPもダウン |
| ASBR2 (eASBR2向け論理インタフェース) | 約39 packets | ・BルートがASBR1経由へ迂回 | eASBR2とのOSPFダウン後、eBGPもダウン |
| eASBR1 (ASBR1向け論理インタフェース) | 約37 packets | ・AルートがeASBR2経由へ迂回 | ASBR1とのOSPFダウン後、eBGPもダウン |
| eASBR2 (ASBR2向け論理インタフェース) | 約36 packets | ・BルートがeASBR1経由へ迂回 | ASBR2とのOSPFダウン後、eBGPもダウン |
結果
- インタフェースをダウンさせると対向装置から受け取る方向のトラフィックであった場合、OSPFネイバーダウンを検知後に切り替わるため、それまではパケットロスが発生しました。
- インタフェースをダウンさせた側で送っているルートであった場合、ロス無く切り替わります。
- 上記二点より、freeRouterでのOSPFプロトコルのECMP仕様は、上り、下りで分けていることが判明しました。
- トラフィック量に応じて、特定のトランジット経路へ動的に分散される挙動は見受けられませんでした。
- AS間直結のリンク(B1)をダウンさせるとパケットロスが発生し、ルートの切り替わりが発生しました。
- Lo1のeBGPはダウンし、Lo2で張ったeBGPのダウンは発生しないため想定通りです。
- 閉塞解除後は全てパケットロスは見受けられませんでした。
7.最後に
freeRouterは非常に高機能ですが、その独特な設計思想や特有の挙動に苦労しました。
しかし、Inter-AS OptionC も含め、一つずつ紐解くことで、設計方針 / ポイント に基づいたSR-MPLS網を構築することが出来ます。
そして、ACLを設定したことにより、結果として、別ユーザからの通信もPEルータが検閲して通さないです。
今回、構築した環境は git clone https://github.com/MizutoArakawa/freeRTR_InterAS_OptionC.git で試すことが出来ます。
containerlab、Docker、freeRouterイメージが搭載されていることが前提とはなりますが、是非見てみてください。
また、freeRouterを使ってみて素晴らしいと感じましたら、開発者にビールを奢ってあげてください。
PE_A#show version freeRouter v24.3.30-cur, done by sprscc13@mrn0b0dy. place on the web: http://www.freertr.org/ license: http://creativecommons.org/licenses/by-sa/4.0/ the beer-ware,abandon-ware license for selected group of people: sprscc13@mrn0b0dy wrote these files. as long as you retain this notice you can do whatever you want with this stuff. if we meet some day, and you think this stuff is worth it, you can buy me a beer in return
2026年4月時点では、格言が追加されていました
PE_A#show version freeRouter v26.4.28-cur, done by sprscc13@mrn0b0dy. place on the web: http://www.freertr.org/ license: http://creativecommons.org/licenses/by-sa/4.0/ the beer-ware license for selected group of people: sprscc13@mrn0b0dy wrote these files. as long as you retain this notice you can do whatever you want with this stuff. if we meet some day, and you think this stuff is worth it, you can buy me a beer in return quotes from devvies like sprscc13@mrn0b0dy: true random comes from weather forecasts and political announcements if a machine can learn the value of human life, maybe we can too be liberal in what you accept, and conservative in what you send rough consensus and running code, keep it stupid simple dont drive faster than your guardian angel can fly care about the bits and not the bits of the bits let bloom all the flowers, make the world better the great power comes great responsibility every tool could be used for good or bad do or not to do but dont try
今後の課題
私個人としては、どうしても「 RT(Route Target)による柔軟なVRF分離 」 でユーザ通信の分離を実現したいです。
その方が、美しいと考えるからです。
とはいえ、freeRouterの設計理念が脳裏によぎります。
no global routing table: every routed interface must be in a virtual routing table
freeRouterは1つのBGPプロセスに1つのVRFしか適用できませんし、そもそもグローバルルーティングテーブルを持ちません。
この点は、主流なNOSと大きく違う点です。
そのため、従来のVRFにおけるRT(Route Target)の概念をそのまま適用することには再考の余地があります。
如何に最適化されたコンフィグで再現が出来るか、今後も継続して検証を続けていきます。
更に、本構成内にL2VPNも含め、ユーザ通信を論理的に分離させることが可能か追加で取り組むことを検討しています。
- EVPNへの拡張: L2VPN(E-LAN方式)を設定追加することで、同一装置にてL3VPNとL2VPNと論理的に分割が可能か実験。
- 経路最適化: コントローラを用いたPCEP連携による、遅延に基づいた最適経路の動的制御。
執筆者
荒川 瑞斗(NTTフィールドテクノ サービスマネジメント部所属)
現在は、監視・保守業務に従事している方のためのツール、及び搭載しているVMの維持、メンテナンスに携わっています。
好きなラックサーバはHPE ProLiant DL360 Generation 9(初めて自宅に迎え入れた子なため)です。
参考資料・出典
本記事を執筆するにあたり、以下のサイトを参考にしました。
- Containerlab : https://containerlab.dev/
- freeRouter : http://www.freertr.org/
- freeRouter(GitHub) : https://github.com/rare-freertr/freeRtr-containerlab
- Inter-AS OptionC : https://www.cisco.com/c/en/us/support/docs/multiprotocol-label-switching-mpls/mpls/200523-Configuration-and-Verification-of-Layer.html
- Inter-AS OptionC : https://nsrc.org/workshops/2015/apricot2015/raw-attachment/wiki/Track3MPLS/9-Apriot_2015_Inter-AS.2.pdf
商標
- 「Cisco、Cisco IOS、Cisco IOS XR」は、米国およびその他の国における Cisco Systems, Inc. の商標または登録商標です。
- 「Docker」は、Docker, Inc.の米国およびその他の国における商標または登録商標です。
- 「freeRouter」は、Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) および作者独自の「Beer-ware License」に基づき提供されています。
- 「HPE ProLiant」は、Hewlett Packard Enterprise Development LPの商標です。
- その他、本記事に記載されている会社名、製品名は、各社の商標または登録商標です。
免責事項
本記事に掲載された手法を実施した結果発生する損失・損害については責任を負いかねます。
また、実際の通信事業用ネットワークを模擬する際、IPアドレスやホスト名、ポートコンベンション等は同じ、もしくは類似させるようなことはせず、推測されないような値にしてください。