シナプス技術部ネットワーク課の末吉と申します。
ネットワーク課ではインターネットへの経路を受け取るために、トランジットやIXとBGP接続をしています。その中で設定変更を行ったところ、一部でBGP接続ができない状態が発生し、「update-source」の設定を削除することにより、BGP接続ができるようになった事例がありました。なぜBGP接続ができなくなったのか、「update-source」を消すことにより、BGP接続ができるようになったのかを自分なりに確認してみました。
事例内容
- BGP接続で利用しているIPアドレス範囲が変更になるとの連絡があり、現IPアドレスと新IPアドレスを併用運用することに
- 現IPアドレスを削除する作業を考慮し、新IPアドレスをプライマリアドレス、現IPアドレスをセカンダリアドレスとして設定
- IPアドレスの設定変更後、BGP接続を開始すると、新IPアドレスではBGP接続ができるが、現IPアドレスではBGP接続ができない状況が発生
- 他事業者様からのアドバイスを元にBGP設定の「update-source」を削除した所、新IPアドレス/現IPアドレスでBGP接続ができるようになった
確認する内容
「update-source」の削除前後で、どのような挙動をしていたのかを確認してみます。
検証環境
GNS3で検証します。
GNS3 IOS: 15.2(4)M11
ネットワーク構成
以下の構成でBGP接続します。
設定内容
- R1
interface GigabitEthernet0/0 no shutdown ! interface GigabitEthernet0/0.1 encapsulation dot1Q 100 ip address 192.168.1.1 255.255.255.0 ! router bgp 64996 neighbor 192.168.1.2 remote-as 64997 neighbor 192.168.1.2 update-source GigabitEthernet0/0.1
- R2
interface GigabitEthernet0/0 no shutdown ! interface GigabitEthernet0/0.1 encapsulation dot1Q 100 ip address 192.168.1.2 255.255.255.0 ! router bgp 64997 neighbor 192.168.1.1 remote-as 64996 neighbor 192.168.1.1 update-source GigabitEthernet0/0.1 neighbor 192.168.1.1 transport connection-mode passive
- サブインターフェイスを利用しVLAN100を利用
- transport connection-mode passiveは自分からBGPセッションを開始しないようにする設定
- パケットをキャプチャした際にみやすくするために設定を追加
BGP状態
R1#show ip bgp summary BGP router identifier 192.168.1.1, local AS number 64996 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.1.2 4 64997 2 2 1 0 0 00:00:00 0
- 問題なし
パケットキャプチャ
R1とSwitch1間のパケットキャプチャをしてみます。
- キャプチャ結果
- No.57〜59 R1から通信を開始し、3ウェイ・ハンドシェイクで通信が確立
- No.60, No.62 R1/R2相互にOPEN Messageを交換しBGP接続を開始
- No.67, No.70 UPDATE Messageにて経路交換
問題なくBGP接続ができました。
セカンダリアドレスを追加
では、今回BGP接続ができなかったパターンをやってみます。
- 新IPアドレス範囲を192.168.100.0/24とする
- 現IPアドレスでのBGP接続をshutdown
- 新IPアドレスをプライマリアドレス、現アドレスをセカンダリアドレスとして設定
- BGP設定には現アドレスで設定した内容を新IPアドレスに変更したものを新しく追加し、現IPアドレス向けのBGP接続を再開
ネットワーク構成
設定変更
R1
- BGP shutdown
router bgp 64996 neighbor 192.168.1.2 shutdown
- IPアドレスを付け替え
interface GigabitEthernet0/0.1 no ip address 192.168.1.1 255.255.255.0 ip address 192.168.100.1 255.255.255.0 ip address 192.168.1.1 255.255.255.0 secondary
- BGP設定
router bgp 64996 no neighbor 192.168.1.2 shutdown neighbor 192.168.100.2 remote-as 64997 neighbor 192.168.100.2 update-source GigabitEthernet0/0.1
R2
こちら側も同様に変更してみます。
- BGP shutdown
router bgp 64997 neighbor 192.168.1.1 shutdown
- IPアドレスを付け替え
interface GigabitEthernet0/0.1 no ip address 192.168.1.2 255.255.255.0 ip address 192.168.100.2 255.255.255.0 ip address 192.168.1.2 255.255.255.0 secondary
- BGP設定追加
router bgp 64997 no neighbor 192.168.1.1 shutdown neighbor 192.168.100.1 remote-as 64996 neighbor 192.168.100.1 update-source GigabitEthernet0/0.1 neighbor 192.168.100.1 transport connection-mode passive
BGP状態
R1#show ip bgp summary BGP router identifier 192.168.1.1, local AS number 64996 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.1.2 4 64997 0 0 1 0 0 00:01:06 Idle 192.168.100.2 4 64997 4 4 1 0 0 00:00:09 0
192.168.1.2とはBGP接続ができていませんが、192.168.100.2とはBGP接続ができています。
パケットキャプチャ
192.168.1.2向け ソースIPアドレスが「192.168.1.1」ではなく、「192.168.100.1」であることがわかります。
192.168.100.2向け 問題なく通信ができています。
update-sourceを削除
事業者様からアドバイスを頂いた通り、「update-source」を削除してみます。
設定内容
- R1
router bgp 64996 no neighbor 192.168.1.2 update-source GigabitEthernet0/0.1 no neighbor 192.168.100.2 update-source GigabitEthernet0/0.1
BGP状態
R1#show ip bgp summary BGP router identifier 192.168.1.1, local AS number 64996 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.1.2 4 64997 0 0 1 0 0 00:04:36 Idle 192.168.100.2 4 64997 7 7 1 0 0 00:03:39 0
パケットキャプチャ
- 192.168.1.2向け
- ソースIPアドレスが「192.168.100.1」から「192.168.1.1」に代わっていることを確認
- 192.168.1.1から3ウェイ・ハンドシェイクを開始
- 192.168.1.1からOPEN Messageを送信
- 192.168.1.2からRSTパケットを送信しリセット
- 1~3の繰り返し
192.168.1.2から送られてくるRSTパケットの内容を見てみます。 Resetが「set」となっている(BGP接続ができる場合は、「not set」)。
R2側でDebug
R2側で「update-source」を消せばBGP接続はできそうだとは思ったのですが、その前にdebugコマンドがあることを思い出したのでやってみました。本番環境でdebugを動かすのは躊躇しますが、検証環境なので実施してみます。
- R2 debugコマンド
debug bgp all
- 出力されたログ
BGP: 192.168.1.1 passive open to 192.168.1.2 BGP: 192.168.1.1 passive open failed - 192.168.1.2 is not update-source GigabitEthernet0/0.1's address (192.168.100.2) BGP: 192.168.1.1 remote connection attempt failed(due to session creation failure, local address 192.168.1.2
GigabitEthernet0/0.1のアドレスは「192.168.100.2」のため、セッション作成に失敗している様子。
R2 update-sourceを削除
R2側のセカンダリアドレスでの「update-source」を削除してみます。
router bgp 64997 no neighbor 192.168.1.1 update-source GigabitEthernet0/0.1
BGP状態
R1#show ip bgp summary BGP router identifier 192.168.1.1, local AS number 64996 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.1.2 4 64997 2 2 1 0 0 00:00:29 0 192.168.100.2 4 64997 18 18 1 0 0 00:13:17 0
パケットキャプチャ
BGP接続ができるようになりました。
参考情報
Cisco IOS IP Routing: BGP Command Reference
BGP Commands on Cisco IOS XR Software
BGP peering with secondary IP
まとめ
- セカンダリアドレスでBGP接続をする際に、update-sourceの設定を入れるとセカンダリアドレスではなくプライマリアドレスで通信が開始されるため、正常にBGP接続ができない。
- 想定していない動作をする場合は、パケットキャプチャにて実際の通信の中身を把握できるので、状況把握においてパケットキャプチャは有用だと感じた。