はじめに
この記事は Ansible Advent Calendar 2023 23日目の記事です。
OSS FRRoutingを使った、BGP設定をやってみた系の内容となります。
また、昨今、IPv4が枯渇しており、状況によってはIPv6にてpeeringすることがあるかと思います。
動作環境によっては正常に動作しない場合がございます。
目的
- BGPルートをBGPピアにアドバタイズする
- AS間にて経路交換ができること
- advertiseできること
- neighbor ping疎通可能なこと
ASN番号
グローバルASはインターネットを構成する個々の独立したネットワーク(AS:自律システム)に対して割り当てられている、一意の識別番号。2バイト(16ビット)または4バイト(32ビット)の値で、各国のネットワークインフォメーションセンター(NIC)が発行している。
asn | 範囲 | 備考 |
---|---|---|
グローバルAS | 1~64511 | インターネット全体で一意のAS番号 |
プライベートAS | 64512~65535 | 組織内部で自由に使用できるAS番号 |
前提条件
- ansibleを理解していること
- BGP関連の知識があること
- ipv6を理解していること
環境
使用したバージョンは以下のとおりです。
Device | version | Comments |
---|---|---|
Rockylinux | 9.3 | ansible, frr |
ansible | 2.14.9 | - |
python | 3.9.18 | ansible |
FRRouting | 8.3.1 | - |
- FRRoutingとは
- FRRoutingは、さまざまなIPv4およびIPv6ルーティングを実装および管理するフリー ソフトウェアです
- プロトコルは、BGP,OSPFv2,OSPFv3,RIPv1,RIPv2,RIPng,IS-ISなどに対応しております。
- 詳しくはFRRoutingを参照願います。
Parameters
Parameter | Comments | |
---|---|---|
ASN | 65001 | 自組織 |
router_id | 172.16.255.254 | |
peer ASN | 65010 | 他組織 |
neighbors | 20xx:20xx:0:xxxx::1 | 他組織neighbor |
advertise prefix | 20xx:9xxx:0:xxxx::1 | 広報するprefix |
構成 イメージ
詳細
1.サンプルPlaybook
- name: configure global bgp as 65001
frr.frr.frr_bgp:
config:
bgp_as: 65001
router_id: 172.16.255.254
log_neighbor_changes: true
neighbors:
- neighbor: 20xx:20xx:0:xxxx::1
remote_as: 65010
2.実行結果
# ansible-playbook -i hosts frr.yaml
PLAY ****************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************
ok:xxxxxxxxx
TASK [configure BGP] *********************************************************************************************************************************
ok:xxxxxxxxx
PLAY RECAP *******************************************************************************************************************************************
ansible_connection=network_cli : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
確認
1.neighbor状態
# show bgp summary
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc
20xx:20xx:0:xxxx::1 4 65010 1564780 2273 0 0 0 1d13h48m 24 1
Total number of neighbors 1
2.BGP受信経路確認
# show bgp ipv6 neighbors 20xx:20xx:0:xxxx::1 advertised-routes
BGP table version is 628048, local router ID is 172.16.255.254, vrf id 0
Default local pref 100, local AS 1xxx4xxx
Status codes: s suppressed, d damped, h history, * 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
*> 20xx:9xxx:0:xxxx::/48
20xx:20xx:0:xxxx::1
0 65010 ?
Total number of prefixes 1
3.別ノードよりPING確認
# ping6 -c 5 20xx:20xx:0:xxxx::1
PING 20xx:20xx:0:xxxx::1(20xx:20xx:0:xxxx::1) 56 data bytes
64 バイト応答 送信元 20xx:20xx:0:xxxx::1: icmp_seq=1 ttl=64 時間=0.887ミリ秒
64 バイト応答 送信元 20xx:20xx:0:xxxx::1: icmp_seq=2 ttl=64 時間=1.02ミリ秒
64 バイト応答 送信元 20xx:20xx:0:xxxx::1: icmp_seq=3 ttl=64 時間=1.11ミリ秒
64 バイト応答 送信元 20xx:20xx:0:xxxx::1: icmp_seq=4 ttl=64 時間=0.921ミリ秒
64 バイト応答 送信元 20xx:20xx:0:xxxx::1: icmp_seq=5 ttl=64 時間=1.10ミリ秒
--- 20xx:20xx:0:xxxx::1 ping 統計 ---
送信パケット数 5, 受信パケット数 5, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 0.887/1.005/1.108/0.089 ms
まとめ
手動にてconfigを投入することが一般的ですが、ansibleから投入したところ、正常に投入及び動作確認をすることが可能なため、今後構築の自動化などの可能性が広がりました。
番外編
グローバルASNからのprefix list作成する場合には、以下ツールを利用すると便利です。
参考