シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

VPN構築でハマった話

技術部ネットワーク課の末吉と申します。

はじめに

とあるイベントで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を入れ替えることで実現可能でした。

まとめ

  • 設定投入は一つ一つ段階を踏んで設定していくことで、原因切り分けや設定内容の理解が深まると感じた
  • 構成図を見直すことは大事だと認識した