シナプス技術者ブログ

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

YAMAHA(RTX830) でL2TPv3/IPsec のVPN接続を検証した話

皆さまこんにちは。ネットワーク課の岩元です。

YAMAHAルータを使用したVPN環境の構築に携わらせていただく機会があり、その事前検証として、弊社に余っているRTX830を使って、2点間のVPN環境を構築・検証をしてみました。

network.yamaha.com

検証環境

使用機器 台数
YAMAHA RTX830 2台

YAMAHA01 YAMAHA02
lan1 192.168.100.1 /24 192.168.100.2/24
lan2 192.168.1.1/24 192.168.2.1/24
デフォルトGW 192.168.1.2 192.168.2.2
DHCP範囲 192.168.100.10∼15 192.168.100.16∼20

事前準備

RTX830 が工場出荷状態であれば既存で以下の設定が入っています。

ip lan1 address 192.168.100.1/24
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24

ですので、もし出荷状態なら事前に削除しておきましょう。

no ip lan1 address 192.168.100.1/24
no dhcp service server
no dhcp server rfc2131 compliant except remain-silent
no dhcp scope 1 192.168.100.2-192.168.100.191/24
save

検証1 WAN側IPアドレスとの疎通確認

bridgeメンバー(bridge1)を作成

トンネルインタフェースと物理インタフェースを紐づけます。 bridge1 にはLAN インタフェースの実 MAC アドレスを利用させるために 代理ARP動作も設定させます。

【YAMAHA01】
bridge member bridge1 lan1 tunnel1
ip bridge1 proxyarp on
【YAMAHA02】
bridge member bridge1 lan1 tunnel1
ip bridge1 proxyarp on

IFにIPアドレスを設定・デフォルトゲートウェイを設定

【YAMAHA01】
ip route default gateway 192.168.1.2
ip bridge1 address 192.168.100.1/24
ip lan2 address 192.168.1.1/24
【YAMAHA02】
ip route default gateway 192.168.2.2
ip bridge1 address 192.168.100.2/24
ip lan2 address 192.168.2.1/24

NATの処理を定義

【YAMAHA01】
nat descriptor type 1 masquerade
nat descriptor address outer 1 192.168.1.1
nat descriptor address inner 1 auto
【YAMAHA02】
nat descriptor type 1 masquerade
nat descriptor address outer 1 192.168.2.1
nat descriptor address inner 1 auto

LAN2(WAN側インタフェース)にNATの定義を適用

【YAMAHA01】
ip lan2 nat descriptor 1
【YAMAHA02】
ip lan2 nat descriptor 1

DHCPを設定

【YAMAHA01】
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.10-192.168.100.15/24
【YAMAHA02】
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.16-192.168.100.20/24

接続確認

互いのWAN側IPアドレスに疎通確認

【YAMAHA01】
yamaha01# ping -c 5 192.168.2.1
received from 192.168.2.1: icmp_seq=0 ttl=252 time=0.288ms
received from 192.168.2.1: icmp_seq=1 ttl=252 time=0.245ms
received from 192.168.2.1: icmp_seq=2 ttl=252 time=0.241ms
received from 192.168.2.1: icmp_seq=3 ttl=252 time=0.234ms
received from 192.168.2.1: icmp_seq=4 ttl=252 time=0.234ms

5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max = 0.234/0.248/0.288 ms
【YAMAHA02】
yamaha02# ping -c 5 192.168.1.1
received from 192.168.1.1: icmp_seq=0 ttl=252 time=0.302ms
received from 192.168.1.1: icmp_seq=1 ttl=252 time=0.262ms
received from 192.168.1.1: icmp_seq=2 ttl=252 time=0.244ms
received from 192.168.1.1: icmp_seq=3 ttl=252 time=0.240ms
received from 192.168.1.1: icmp_seq=4 ttl=252 time=0.239ms

5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max = 0.239/0.257/0.302 ms

検証2 L2TPv3トンネル設定

L2TPv3トンネリングの設定を入れます。

L2TPv3はL2フレームをL2TPv3ヘッダでカプセル化してデータを通信します。

  • トンネルインタフェースをl2tpv3-rawに指定
  • L2TPv3の各種設定を追加
  • L2TPv3の有効化
【YAMAHA01】
tunnel select 1
 tunnel encapsulation l2tpv3-raw
 tunnel endpoint address 192.168.100.1 192.168.2.1
 l2tp always-on on
 l2tp tunnel auth on test1234
 l2tp keepalive use on 60 3
 l2tp keepalive log on
 l2tp syslog on
 l2tp local router-id 192.168.100.1
 l2tp remote router-id 192.168.100.2
 l2tp remote end-id TESTEND
 tunnel enable 1
l2tp service on l2tpv3
【YAMAHA02】
tunnel select 1
 tunnel encapsulation l2tpv3-raw
 tunnel endpoint address 192.168.100.2 192.168.1.1
 l2tp always-on on
 l2tp tunnel auth on test1234
 l2tp keepalive use on 60 3
 l2tp keepalive log on
 l2tp syslog on
 l2tp local router-id 192.168.100.2
 l2tp remote router-id 192.168.100.1
 l2tp remote end-id TESTEND
 tunnel enable 1
l2tp service on l2tpv3

この設定だけでは、まだL2TPv3のトンネル接続は出来ません。 状態を確認すると「Tunnel State: wait_ctl_reply」と出ます。 (wait_ctl_reply:手の応答待ちという意味です)

yamaha01tunnel1# show status l2tp
------------------- L2TP INFORMATION -------------------
Number of control table using
  Tunnel Control: 1, Session Control: 0
TUNNEL[1]:
  Tunnel State: wait_ctl_reply
~省略~

NATの定義を追加

L2TPv3トンネルのみ接続させる場合は、明示的にNATの定義に、 L2TPv3用のUDPポート(1701番)は変換せず通過させる設定を入れてあげます。

【YAMAHA01】
nat descriptor masquerade static 1 5 192.168.100.1 udp 1701
【YAMAHA02】
nat descriptor masquerade static 1 5 192.168.100.2 udp 1701

接続確認

L2TPv3トンネルが繋がると、お互いのローカルIP(lan1のIP)と疎通がとれるようになります。

yamaha01# ping -c 5 192.168.100.2
received from 192.168.100.2: icmp_seq=0 ttl=254 time=0.463ms
received from 192.168.100.2: icmp_seq=1 ttl=254 time=0.372ms
received from 192.168.100.2: icmp_seq=2 ttl=254 time=0.361ms
received from 192.168.100.2: icmp_seq=3 ttl=254 time=0.337ms
received from 192.168.100.2: icmp_seq=4 ttl=254 time=0.385ms

5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max = 0.337/0.383/0.463 ms
yamaha02# ping -c 5 192.168.100.1
received from 192.168.100.1: icmp_seq=0 ttl=254 time=0.436ms
received from 192.168.100.1: icmp_seq=1 ttl=254 time=0.354ms
received from 192.168.100.1: icmp_seq=2 ttl=254 time=0.342ms
received from 192.168.100.1: icmp_seq=3 ttl=254 time=0.337ms
received from 192.168.100.1: icmp_seq=4 ttl=254 time=0.337ms

5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max = 0.337/0.361/0.436 ms

接続できた時の状態は以下のように確認できます(YAMAHA01側)

yamaha01# show status l2tp
------------------- L2TP INFORMATION -------------------
Number of control table using
  Tunnel Control: 1, Session Control: 1
TUNNEL[1]:
  Tunnel State: established <- 接続できている状態
  Version: L2TPv3
  Local  Tunnel ID: 51998
  Remote Tunnel ID: 27105
  Local  IP Address: 192.168.100.1  <- 自分のローカル(lan1)アドレス
  Remote IP Address: 192.168.2.1    <- 相手のWAN側(lan2)アドレス
  Local  Src port: 1701
  Remote Src port: 1701
  Vendor: YAMAHA Corporation
  Hostname: RTX830
  Next Transmit sequence(Ns): 4
  Next Receive sequence(Nr) : 2
  Tunnel has 1 session.
  Session Information
    Session State: established  <- 接続できている状態
    Local  Session ID: 38520
    Remote Session ID: 25157
    Circuit Status local:UP peer:UP <- 接続できている状態
    56 seconds  connection.
    Received: 0 packet [0 octet]
    Transmitted: 0 packet [0 octet]

検証3 IPsec設定

L2TPv3のトンネルを通るデータを、IPsecにより暗号化させることで、 「L2TPv3/IPsec」 によるVPN接続を実現できます。

L2TPv3のパケットのうちUDP(1701番)以上をIPsecで暗号化して、 新しくESPヘッダを付けたパケットで通信させています。

IPsec の通信モードには「トランスポートモード」と「トンネルモード」の2種類があります。 一般的に L2TP/IPsec で扱う際は「トランスポートモード」になります。

トンネルインタフェースの種別を変更

検証2では、l2tpv3-raw でしたがIPsecを併用する場合は、L2TPv3 で設定する必要があります。

設定値 説明
l2tpv3-raw L2TPv3トンネル
l2tpv3 L2TPv3/IPsec トンネル

従って、インタフェースの種別を「L2TPv3/IPsec」に変更しておきましょう。

【YAMAHA01 / YAMAHA02】
tunnel select 1
 tunnel encapsulation l2tpv3

IPsec の設定を追加

【YAMAHA01】
tunnel select 1
 ipsec tunnel 100
  ipsec sa policy 100 1 esp aes-cbc sha-hmac
  ipsec ike keepalive log 1 on
  ipsec ike keepalive use 1 on
  ipsec ike local address 1 192.168.100.1
  ipsec ike pre-shared-key 1 text test1234
  ipsec ike remote address 1 192.168.2.1
ipsec auto refresh on
ipsec transport 1 100 udp 1701
【YAMAHA02】
tunnel select 1
 ipsec tunnel 100
  ipsec sa policy 100 1 esp aes-cbc sha-hmac
  ipsec ike keepalive log 1 on
  ipsec ike keepalive use 1 on
  ipsec ike local address 1 192.168.100.2
  ipsec ike pre-shared-key 1 text test1234
  ipsec ike remote address 1 192.168.1.1
ipsec auto refresh on
ipsec transport 1 100 udp 1701

NATの設定に定義を追加

鍵交換をISAKMPメッセージのやり取り行いますが、この時使うポート「500」と、 NAT越えのためにポート「4500」を通過させるために定義を追加させます。

【YAMAHA01】
nat descriptor masquerade static 1 1 192.168.100.1 udp 500
nat descriptor masquerade static 1 2 192.168.100.1 esp
nat descriptor masquerade static 1 3 192.168.100.1 udp 4500
【YAMAHA02】
nat descriptor masquerade static 1 1 192.168.100.2 udp 500
nat descriptor masquerade static 1 2 192.168.100.2 esp
nat descriptor masquerade static 1 3 192.168.100.2 udp 4500

IPsecによる暗号化が正常に行われると、SA(Security Association)の状態は次のように表示されます。

yamaha01# show ipsec sa
Total: isakmp:1 send:2 recv:2

sa    sgw isakmp connection     dir       life[s]     remote-id
-----------------------------------------------------------------------------
2     1      6          tra[0001]esp   send   28777   192.168.2.1
3     1      6          tra[0001]esp   recv    28777   192.168.2.1
4     1      6          tra[0001]esp   send   28778   192.168.2.1
5     1      6          tra[0001]esp   recv    28778   192.168.2.1
6     1      -          isakmp            -         28775   192.168.2.1

暗号化に失敗した際の挙動

L2TPv3/IPsec で接続時、IPsecによる暗号化に失敗すると、L2TPv3によるトンネル接続も出来なくなります。 以下で試しに暗号化を失敗させてみます。

■暗号化方式の設定を削除
yamaha01# tunnel select 1
yamaha01tunnel1# ipsec tunnel 100
yamaha01tunnel1# no ipsec sa policy 100 1 esp aes-cbc sha-hmac

■SAの状態確認
yamaha01tunnel1# show ipsec sa
yamaha01tunnel1#
(何も表示されない)

L2TPv3トンネルの接続確認

■状態確認
yamaha01# show status l2tp
------------------- L2TP INFORMATION -------------------
Number of control table using
  Tunnel Control: 1, Session Control: 0
TUNNEL[1]:
  Tunnel State: wait_ctl_reply
~省略~

■疎通確認
yamaha01# ping -c 5 192.168.100.2

5 packets transmitted, 0 packets received, 100.0% packet loss

「L2TPv3/IPsec」では、暗号化に失敗してしまったあと、意図せずに平データでやり取りされてしまうことを防ぐために トンネルも接続できなくなります。

まとめ

 VPNの接続方式にはさまざまな種類がありますが、その代表例の一つであるL2TPv3/IPsecについて詳しく学ぶことができ、大変勉強になりました。 合わせて、これまで触れる機会がなかったYAMAHA製のVPNルータの設定にも触れ、コマンド体系や設定ファイルの書き方が他社製品と異なる点を実感しました。設定項目や、デフォルトの挙動、ログの見方など、実機で試すことで様々な違いについて把握できて良かったです。

参考