技術部ネットワーク課の末吉と申します。
はじめに
とあるイベントでVPN構築をすることになり検証をした際にハマった時の話をしたいと思います。
構築する内容
構築する内容を見ていきます。
拠点間にVPN設定をしてセグメントを延伸
Router1~Router3間でVPN設定をし、セグメントを延伸
延伸したセグメントを利用してBGP接続
延伸したセグメントを利用してRouter2〜Router4でBGP接続
通信経路
Router4からRouter2へ通信する経路は以下の図の赤線のようになります。
疑問
- 今まで構築したことあるパターン
- 今回
今までの構築ではVPN終端機器が前に出でていましたが、今回Router3はRouter2の内側に存在しており、VPN接続ができるのかわからないため、検証環境でテストをしてみました。
検証
以下の環境で検証を実施しました。
検証環境では以下のことを実施しました。
- RT01~RT03間でVPN設定をし、192.168.200.0/24を延伸
- VPNで延伸したセグメントを利用し、RT02とRT04でBGP接続
検証環境で試してみた所、以下の通りでした。
- RT01〜RT03でVPN接続 NG
- RT02〜RT04でBGP接続 NG
原因に関して確認をする
検証環境で設定した内容は他でVPN構築したコンフィグを読み替えて流用し、一気に設定を流し込んでから確認したのでどこが原因なのかわからない状態でした。一つずつ設定を入れながら確認していきます。
RT01〜RT02間の疎通確認
RT01とRT02間でお互いに疎通が取れるよう設定を追加
RT01
console prompt RT01 ip route default gateway 192.168.1.2 ip lan2 address 192.168.1.1/30
RT02
console prompt RT02 ip lan2 address 192.168.1.2/30
疎通確認
- RT01
RT01# ping -c 5 192.168.1.2 192.168.1.2から受信: シーケンス番号=0 ttl=254 時間=0.225ミリ秒 192.168.1.2から受信: シーケンス番号=1 ttl=254 時間=0.183ミリ秒 192.168.1.2から受信: シーケンス番号=2 ttl=254 時間=0.181ミリ秒 192.168.1.2から受信: シーケンス番号=3 ttl=254 時間=0.176ミリ秒 192.168.1.2から受信: シーケンス番号=4 ttl=254 時間=0.176ミリ秒 5個のパケットを送信し、5個のパケットを受信しました。0.0%パケットロス 往復遅延 最低/平均/最大 = 0.176/0.188/0.225 ミリ秒
- RT02
RT02# ping -c 5 192.168.1.1 192.168.1.1から受信: シーケンス番号=0 ttl=254 時間=0.415ミリ秒 192.168.1.1から受信: シーケンス番号=1 ttl=254 時間=0.196ミリ秒 192.168.1.1から受信: シーケンス番号=2 ttl=254 時間=0.185ミリ秒 192.168.1.1から受信: シーケンス番号=3 ttl=254 時間=0.182ミリ秒 192.168.1.1から受信: シーケンス番号=4 ttl=254 時間=0.181ミリ秒 5個のパケットを送信し、5個のパケットを受信しました。0.0%パケットロス 往復遅延 最低/平均/最大 = 0.181/0.231/0.415 ミリ秒
RT01〜RT02間の疎通は問題ありませんでした。
RT01〜RT03 VPN接続
RT01〜RT03間の疎通
RT01とRT03の疎通が取れるように設定を追加
RT02
ip lan1 address 192.168.200.2/24
RT03
console prompt RT03 ip route default gateway 192.168.200.2 ip lan2 address 192.168.200.3/24
疎通確認
- RT01
RT01# ping -c 5 192.168.200.3 192.168.200.3から受信: シーケンス番号=0 ttl=253 時間=0.405ミリ秒 192.168.200.3から受信: シーケンス番号=1 ttl=253 時間=0.350ミリ秒 192.168.200.3から受信: シーケンス番号=2 ttl=253 時間=0.347ミリ秒 192.168.200.3から受信: シーケンス番号=3 ttl=253 時間=0.344ミリ秒 192.168.200.3から受信: シーケンス番号=4 ttl=253 時間=0.346ミリ秒 5個のパケットを送信し、5個のパケットを受信しました。0.0%パケットロス 往復遅延 最低/平均/最大 = 0.344/0.358/0.405 ミリ秒
- RT03
RT03# ping -c 5 192.168.1.1 192.168.1.1から受信: シーケンス番号=0 ttl=253 時間=0.392ミリ秒 192.168.1.1から受信: シーケンス番号=1 ttl=253 時間=0.349ミリ秒 192.168.1.1から受信: シーケンス番号=2 ttl=253 時間=0.349ミリ秒 192.168.1.1から受信: シーケンス番号=3 ttl=253 時間=0.348ミリ秒 192.168.1.1から受信: シーケンス番号=4 ttl=253 時間=0.348ミリ秒 5個のパケットを送信し、5個のパケットを受信しました。0.0%パケットロス 往復遅延 最低/平均/最大 = 0.348/0.357/0.392 ミリ秒
RT01〜RT03間の疎通は問題ありませんでした。
VPN接続
RT01とRT03にVPN設定を追加します。
RT01
tunnel select 1 tunnel encapsulation l2tpv3-raw tunnel endpoint address 192.168.1.1 192.168.200.3 l2tp always-on on l2tp hostname RT01 l2tp tunnel disconnect time off l2tp keepalive use on 60 3 l2tp keepalive log on l2tp syslog on l2tp local router-id 192.168.1.1 l2tp remote router-id 192.168.200.3 l2tp remote end-id TEST ip tunnel tcp mss limit auto tunnel enable 1 l2tp service on l2tpv3
RT03
tunnel select 1 tunnel encapsulation l2tpv3-raw tunnel endpoint address 192.168.200.3 192.168.1.1 l2tp always-on on l2tp hostname RT03 l2tp tunnel disconnect time off l2tp keepalive use on 60 3 l2tp keepalive log on l2tp syslog on l2tp local router-id 192.168.200.3 l2tp remote router-id 192.168.1.1 l2tp remote end-id TEST ip tunnel tcp mss limit auto tunnel enable 1 l2tp service on l2tpv3
VPN確認
- RT01
RT01tunnel1# show status l2tp ------------------- L2TP INFORMATION ------------------- L2TP情報テーブル L2TPトンネル数: 1, L2TPセッション数: 1 TUNNEL[1]: トンネルの状態: established バージョン: L2TPv3 自機側トンネルID: 7677 相手側トンネルID: 24987 自機側IPアドレス: 192.168.1.1 相手側IPアドレス: 192.168.200.3 自機側送信元ポート: 1701 相手側送信元ポート: 1701 ベンダ名: YAMAHA Corporation ホスト名: RT03 Next Transmit sequence(Ns): 2 Next Receive sequence(Nr) : 4 トンネル内のセッション数: 1 session セッション情報: セッションの状態: established 自機側セッションID: 18450 相手側セッションID: 34000 Circuit Status 自機側:UP 相手側:UP 通信時間: 26秒 受信: 0 パケット [0 オクテット] 送信: 0 パケット [0 オクテット]
- RT03
RT03tunnel1# show status l2tp ------------------- L2TP INFORMATION ------------------- L2TP情報テーブル L2TPトンネル数: 1, L2TPセッション数: 1 TUNNEL[1]: トンネルの状態: established バージョン: L2TPv3 自機側トンネルID: 24987 相手側トンネルID: 7677 自機側IPアドレス: 192.168.200.3 相手側IPアドレス: 192.168.1.1 自機側送信元ポート: 1701 相手側送信元ポート: 1701 ベンダ名: YAMAHA Corporation ホスト名: RT01 Next Transmit sequence(Ns): 4 Next Receive sequence(Nr) : 2 トンネル内のセッション数: 1 session セッション情報: セッションの状態: established 自機側セッションID: 34000 相手側セッションID: 18450 Circuit Status 自機側:UP 相手側:UP 通信時間: 7秒 受信: 0 パケット [0 オクテット] 送信: 0 パケット [0 オクテット]
RT01/RT03ともに「トンネルの状態: established」となっているので問題なさそうです。
RT01〜RT03 延伸セグメント疎通確認
192.168.200.0/24の延伸セグメントで疎通が取れるか設定を追加して確認します。トンネルインターフェイスと物理インターフェイスを紐づけるため、bridgeメンバーを作成しbridge1にIPアドレスを割り当てます。
RT01
bridge member bridge1 lan1 tunnel1 ip bridge1 address 192.168.200.1/24
RT03
bridge member bridge1 lan2 tunnel1 no ip lan2 address 192.168.200.3/24 ip bridge1 address 192.168.200.3/24
疎通確認
- RT01
RT01# ping -c 5 192.168.200.3 5個のパケットを送信し、0個のパケットを受信しました。100.0%パケットロス
- RT03
RT03# ping -c 5 192.168.200.1 5個のパケットを送信し、0個のパケットを受信しました。100.0%パケットロス
RT01~RT03間の疎通は取れませんでした。
VPN確認
- RT01
RT01# show status l2tp ------------------- L2TP INFORMATION ------------------- L2TP情報テーブル L2TPトンネル数: 1, L2TPセッション数: 0 TUNNEL[1]: トンネルの状態: wait_ctl_reply バージョン: L2TPv3 自機側トンネルID: 56446 相手側トンネルID: 0 自機側IPアドレス: 192.168.1.1 相手側IPアドレス: 192.168.200.3 自機側送信元ポート: 1701 相手側送信元ポート: 1701 ベンダ名: ホスト名: Next Transmit sequence(Ns): 1 Next Receive sequence(Nr) : 0 トンネル内のセッション数: 0 session
- RT03
RT03# show status l2tp ------------------- L2TP INFORMATION ------------------- L2TP情報テーブル L2TPトンネル数: 1, L2TPセッション数: 0 TUNNEL[1]: トンネルの状態: wait_ctl_reply バージョン: L2TPv3 自機側トンネルID: 20634 相手側トンネルID: 0 自機側IPアドレス: 192.168.200.3 相手側IPアドレス: 192.168.1.1 自機側送信元ポート: 1701 相手側送信元ポート: 1701 ベンダ名: ホスト名: Next Transmit sequence(Ns): 1 Next Receive sequence(Nr) : 0 トンネル内のセッション数: 0 session
RT01~RT03間で「トンネルの状態: wait_ctl_reply」となっており、VPN接続ができなくなっていました。bridge関連の設定を入れるとVPNが接続できなくなるようなのでこの辺りが原因のようです。
原因調査
RT01から疎通確認を実施していきます。
RT01〜RT02疎通確認
RT01とRT02の疎通確認を行います。
RT01# ping -c 5 192.168.1.2 192.168.1.2から受信: シーケンス番号=0 ttl=254 時間=0.402ミリ秒 192.168.1.2から受信: シーケンス番号=1 ttl=254 時間=0.192ミリ秒 192.168.1.2から受信: シーケンス番号=2 ttl=254 時間=0.184ミリ秒 192.168.1.2から受信: シーケンス番号=3 ttl=254 時間=0.184ミリ秒 192.168.1.2から受信: シーケンス番号=4 ttl=254 時間=0.194ミリ秒 5個のパケットを送信し、5個のパケットを受信しました。0.0%パケットロス 往復遅延 最低/平均/最大 = 0.184/0.231/0.402 ミリ秒
RT01〜RT02の疎通は問題ありませんでした。
RT01〜RT03疎通確認
RT01とRT03の疎通確認を行います。
RT01# ping -c 5 192.168.200.3 5個のパケットを送信し、0個のパケットを受信しました。100.0%パケットロス
RT01〜RT03で疎通が取れないためVPN接続ができないと判断。
RT01 bridge1 IPアドレス削除
直前にRT01へ設定したbridge1のIPアドレスを削除してから、疎通確認を実施してみます。
RT01
no ip bridge1 address 192.168.200.1/24
疎通確認
- RT01〜RT02
RT01# ping -c 5 192.168.1.2 192.168.1.2から受信: シーケンス番号=0 ttl=254 時間=0.402ミリ秒 192.168.1.2から受信: シーケンス番号=1 ttl=254 時間=0.192ミリ秒 192.168.1.2から受信: シーケンス番号=2 ttl=254 時間=0.184ミリ秒 192.168.1.2から受信: シーケンス番号=3 ttl=254 時間=0.184ミリ秒 192.168.1.2から受信: シーケンス番号=4 ttl=254 時間=0.194ミリ秒 5個のパケットを送信し、5個のパケットを受信しました。0.0%パケットロス 往復遅延 最低/平均/最大 = 0.184/0.231/0.402 ミリ秒
- RT01〜RT03
RT01# ping -c 5 192.168.200.3 192.168.200.3から受信: シーケンス番号=0 ttl=253 時間=0.394ミリ秒 192.168.200.3から受信: シーケンス番号=1 ttl=253 時間=0.353ミリ秒 192.168.200.3から受信: シーケンス番号=2 ttl=253 時間=0.345ミリ秒 192.168.200.3から受信: シーケンス番号=3 ttl=253 時間=0.346ミリ秒 192.168.200.3から受信: シーケンス番号=4 ttl=253 時間=0.345ミリ秒 5個のパケットを送信し、5個のパケットを受信しました。0.0%パケットロス 往復遅延 最低/平均/最大 = 0.345/0.356/0.394 ミリ秒
RT01〜RT03間の疎通が取れるようになりました。
VPN確認
- RT01
RT01# show status l2tp ------------------- L2TP INFORMATION ------------------- L2TP情報テーブル L2TPトンネル数: 1, L2TPセッション数: 1 TUNNEL[1]: トンネルの状態: established バージョン: L2TPv3 自機側トンネルID: 26047 相手側トンネルID: 10070 自機側IPアドレス: 192.168.1.1 相手側IPアドレス: 192.168.200.3 自機側送信元ポート: 1701 相手側送信元ポート: 1701 ベンダ名: YAMAHA Corporation ホスト名: RT03 Next Transmit sequence(Ns): 2 Next Receive sequence(Nr) : 4 トンネル内のセッション数: 1 session セッション情報: セッションの状態: established 自機側セッションID: 28604 相手側セッションID: 53593 Circuit Status 自機側:UP 相手側:UP 通信時間: 36秒 受信: 0 パケット [0 オクテット] 送信: 9 パケット [378 オクテット]
- RT03
RT03# show status l2tp ------------------- L2TP INFORMATION ------------------- L2TP情報テーブル L2TPトンネル数: 1, L2TPセッション数: 1 TUNNEL[1]: トンネルの状態: established バージョン: L2TPv3 自機側トンネルID: 10070 相手側トンネルID: 26047 自機側IPアドレス: 192.168.200.3 相手側IPアドレス: 192.168.1.1 自機側送信元ポート: 1701 相手側送信元ポート: 1701 ベンダ名: YAMAHA Corporation ホスト名: RT01 Next Transmit sequence(Ns): 4 Next Receive sequence(Nr) : 2 トンネル内のセッション数: 1 session セッション情報: セッションの状態: established 自機側セッションID: 53593 相手側セッションID: 28604 Circuit Status 自機側:UP 相手側:UP 通信時間: 44秒 受信: 0 パケット [0 オクテット] 送信: 0 パケット [0 オクテット]
RT01~RT03間で「トンネルの状態: established」となり、VPN接続ができるようになりました。 RT01のbridge1にIPアドレスを割り当てた影響のようでした。
なぜRT01〜RT03は通信ができなくなったか?
セグメント
改めて構成を確認するとRT01から見たVPN接続先と延伸セグメントは同じセグメントです。
- VPN接続先 : 192.168.200.3/24
- 延伸セグメント: 192.168.200.0/24
ルーティング
bridge1にIPアドレスを割り当てる前後でRT01のルーティングテーブルを見てみます。
- bridge1にIPアドレスを割り当てる前
RT01# show ip route 宛先ネットワーク ゲートウェイ インタフェース 種別 付加情報 default 192.168.1.2 LAN2 static 192.168.1.0/30 192.168.1.1 LAN2 implicit
- bridge1にIPアドレスを割り当てた後
RT01# show ip route 宛先ネットワーク ゲートウェイ インタフェース 種別 付加情報 default 192.168.1.2 LAN2 static 192.168.1.0/30 192.168.1.1 LAN2 implicit 192.168.200.0/24 192.168.200.1 BRIDGE1 implicit
bridge1にIPアドレスを割り当てたことによりRT01としては192.168.200.0/24は自分が接続されているセグメントだと認識するため、VPN先の192.168.200.3向けの通信はbridge1に送信され、結果的にRT03と通信できない状態でした。
対応内容
RT01のbridge1にIPアドレスを割り当てないように変更することで、RT02〜RT04でBGP接続ができることを確認できました。
RT02
RT02# show status bgp neighbor BGP neighbor is 192.168.200.4, remote AS 64004, local AS 64002, external link BGP version 4, remote router ID 192.168.200.2 BGP state = Established, up for 00:00:10 Last read 00:00:10, hold time is 180, keepalive interval is 60 seconds Received 5 messages, 0 notifications, 0 in queue Sent 10 messages, 1 notifications, 0 in queue Connection established 2; dropped 1 Last reset 00:00:20 Local host: 192.168.200.2, Local port: 1025 Foreign host: 192.168.200.4, Foreign port: 179
RT04
RT04# show status bgp neighbor BGP neighbor is 192.168.200.2, remote AS 64002, local AS 64004, external link BGP version 4, remote router ID 192.168.200.2 BGP state = Established, up for 00:00:09 Last read 00:00:09, hold time is 180, keepalive interval is 60 seconds Received 1 messages, 0 notifications, 0 in queue Sent 3 messages, 0 notifications, 0 in queue Connection established 1; dropped 0 Last reset never Local host: 192.168.200.4, Local port: 1024 Foreign host: 192.168.200.2, Foreign port: 179
最終的な運用時の構成
RT01のbridge1のIPアドレスを削除することによりRT02〜RT04はBGP接続することができましたが、RT01のbridge1のIPアドレスを削除すると、VPN接続後の動作確認/監視、問題発生時の原因切り分けが難しくなるという理由からRT02~RT03間にVPN接続用のセグメントを追加し、延伸セグメントとは分ける構成に変更しました。検証環境では以下のようになります。
検証環境のRT02はRTX830でありポートの関係で上記の構成はできないですが、RT04のRTX1000とRT02を入れ替えることで実現可能でした。
まとめ
- 設定投入は一つ一つ段階を踏んで設定していくことで、原因切り分けや設定内容の理解が深まると感じた
- 構成図を見直すことは大事だと認識した