YAMAHA RTX1200のL2TP/IPSEC機能を使ってオンプレミスのサーバをIPアドレス変更なしにOCIへ移行してみた

### ■検証概要
オンプレミスからクラウドへの移行にあたり、クライアント及び移行対象の変更を極力少なくするために
移行対象のIPアドレスを変更したくない場合があると思います。

但し、オラクルクラウドを含むほとんどのパブリッククラウドサービスでは
L2延伸をサポートしていないため、オンプレミスと異なるサブネットをクラウド上に割り当てて
それに合わせて送信元クライアントにおけるアクセス先IPアドレスと移行対象のIPアドレス設計を
変更するのが一般的だと思います。

IPアドレスを引き継ぐことだけが要件なのであればL2TP/IPSECで満たせるのでは？と思い、検証してみました。

### ■クラウド化のシナリオ
①通信要件

- 既存のOn-Premises上にある「Client#1」から「Server#1」へは同セグメント(192.168.100.0/24)間での通信を
行っているが、「Server#1」をクラウド(OCI)上に移行する計画である。
その際、「Client#1」における通信先のIPアドレス変更及び移行対象「Server#1」のIPアドレス変更が発生しない
ネットワーク構成にしたい。

②検証構成について

- 既存のOn-Premises環境にあるインターネット接続ルータ(RTX1200)のL2TP/IPSECを利用、VPNサーバ化する。
- OCI上にOn-Premisesと同じPublic Subnetを作成、「Server#1」の移行先となるインスタンスにも
On-Premisesと同じIPアドレスを割り当てる。また移行先インスタンスにはインターネット間通信時に利用するPublic IP(固定)を割り当てる。
- OCI上に作成したインスタンスはWindows標準機能(L2TP/IPSEC接続)を利用、VPNクライアントとする。

③動作について(「Server#1」移行後を想定)

- VPNサーバ(RTX1200)はサーバ上のL2TPサーバ設定情報をもとにクライアント認証を行う。
認証に成功したクライアントに対しては認証情報に基づき、決められた固定IPアドレスを払い出す。
- 認証成功後はVPNクライアントにはL2TP/IPSEC通信用の仮想NICが生成され、VPNサーバから払い出されたIPアドレスが設定される。
- VPN接続後のVPNクライアントは2つのルーティングポイント(Default Gateway)を持つようになり、Windowsでは仮想NIC側のDefault Gateway(VPNサーバ)が優先的に使われる(Metric値による制御)。
- VPNサーバ(RTX1200)を経由して「Client#1」⇔OCI上の「Server#1」間の通信が可能になる。
※「Client#1」のARP RequestにVPNサーバが代理応答(Proxy-ARP)する仕組み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/87326b2c-e8c5-9501-5279-1de9c4fcbb80.png)


### ■VPNサーバ(RTX1200)コンフィグ
以下のURL記載情報をもとに作成しています
https://network.yamaha.com/setting/router_firewall/vpn/vpn_client/vpn-smartphone-setup_rtx1200

```shell-session
 [ゲートウェイの設定]
ip route default gateway pp 1

[LANインターフェースの設定]
ip lan1 address 192.168.100.251/24
ip lan1 proxyarp on

[L2TP接続を受け入れるための設定]
pp select 4
 pp bind tunnel3
 pp auth request chap-pap
 pp auth username ocitest3 password3
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ip pp remote address 192.168.100.203
 ip pp mtu 1258
 pp enable 4

[L2TP接続で使用するトンネルの設定]
tunnel select 3
 tunnel encapsulation l2tp
 tunnel endpoint address x.x.x.x
 ipsec tunnel 103
  ipsec sa policy 103 3 esp aes-cbc sha-hmac
  ipsec ike keepalive use 3 off
  ipsec ike local address 3 192.168.100.251
  ipsec ike nat-traversal 3 on
  ipsec ike pre-shared-key 3 text vpn3
  ipsec ike remote address 3 x.x.x.x
 l2tp tunnel disconnect time off
 l2tp keepalive use on 10 3
 l2tp keepalive log on
 l2tp syslog on
 ip tunnel tcp mss limit auto
 tunnel enable 3

[NATの設定]
nat descriptor type 1 masquerade
nat descriptor address outer 1 ipcp
nat descriptor address inner 1 auto
nat descriptor masquerade static 1 1 192.168.100.251 esp
nat descriptor masquerade static 1 2 192.168.100.251 udp 500
nat descriptor masquerade static 1 3 192.168.100.251 udp 4500

[IPsecのトランスポートモード設定]
ipsec auto refresh on
ipsec transport 3 103 udp 1701

[DNSの設定]
dns server 8.8.8.8
dns private address spoof on

[L2TPの設定]
l2tp service on
```
### ■VPNクライアント「Server#1」VPN設定
以下のURL記載情報をもとに作成しています
https://support.microsoft.com/ja-jp/help/20510/windows-10-connect-to-vpn

- [Control Panel] - [Network and Internet] - [Network and Sharing Center]に移動
![OCIインスタンス_VPN設定①-1_20191031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/e5ae4948-53b2-1ed7-653c-3a7ef08bac96.png)

![OCIインスタンス_VPN設定②-1_20191031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/a8fbdb9b-3e50-e277-1819-e7588054f9ac.png)

![OCIインスタンス_VPN設定③-1_20191031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/2d976691-2d93-728d-e033-452a7169a9b6.png)

- VPNサーバ(RTX1200)のPublic IPを入力
![OCIインスタンス_VPN設定④-1_20191031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/3129c251-29f0-33cc-ba3a-250ed1dd5d7c.png)

- 仮想NICを選択して右クリック、[Properties]を開く
![OCIインスタンス_VPN設定⑥-1_20191031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/7d501045-27a6-344b-2bda-d16432a5a32a.png)

- [Type of VPN]及び[Authentication]の設定を以下の通りに変更後、[Advanced settings]をクリック
![OCIインスタンス_VPN設定⑦-1_20191031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/7862c618-2552-d1ae-186c-74ab78e098b2.png)

- L2TPの認証方法を選択後、[Key]にPreShared keyを入力したらVPN設定が完了します
設定完了後は[Control Panel] - [Network and Internet] - [Network Connections]の画面に戻り仮想NICを右クリック、
[Connect/Disconnect]を選択して認証を行いVPN接続。
![OCIインスタンス_VPN設定⑧-1_20191031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/98560016-e5fb-6e4c-e8d4-b50f252cdcbb.png)

### ■VPNクライアント「Server#1」確認ログ

- ipconfig/all(VPN接続前)※一部編集


```shell-session
Ethernet adapter Ethernet 3:　★VPNクライアントの標準VNIC

   Connection-specific DNS Suffix  . : -
   Description . . . . . . . . . . . : Oracle VirtIO Ethernet Adapter #2
   Physical Address. . . . . . . . . : -
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : -
   IPv4 Address. . . . . . . . . . . : 192.168.100.201(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Lease Obtained. . . . . . . . . . : Thursday, October 31, 2019 1:13:07 AM
   Lease Expires . . . . . . . . . . : Friday, November 1, 2019 1:13:07 AM
   Default Gateway . . . . . . . . . : 192.168.100.1　★VPNクライアントが配置されているSubnetのDefaultGW(Oracle管理)
   DHCP Server . . . . . . . . . . . : 169.254.169.254
   DHCPv6 IAID . . . . . . . . . . . : -
   DHCPv6 Client DUID. . . . . . . . : -
   DNS Servers . . . . . . . . . . . : 169.254.169.254
   NetBIOS over Tcpip. . . . . . . . : Enabled

C:\Users\opc>
```

- ipconfig/all(VPN接続後)※一部編集


```shell-session
PPP adapter oci:　★VPN接続後に生成された仮想NIC

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : oci
   Physical Address. . . . . . . . . :
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : -
   IPv4 Address. . . . . . . . . . . : 192.168.100.203(Preferred)　★認証情報をもとにVPNサーバから払い出されたIPアドレス
   Subnet Mask . . . . . . . . . . . : 255.255.255.255
   Default Gateway . . . . . . . . . : 0.0.0.0
   DHCPv6 IAID . . . . . . . . . . . : 469893143
   DHCPv6 Client DUID. . . . . . . . : -
   DNS Servers . . . . . . . . . . . : 192.168.100.251
                                       8.8.8.8
   NetBIOS over Tcpip. . . . . . . . : Enabled

Ethernet adapter Ethernet 3:

   Connection-specific DNS Suffix  . : -
   Description . . . . . . . . . . . : Oracle VirtIO Ethernet Adapter #2
   Physical Address. . . . . . . . . : -
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : -
   IPv4 Address. . . . . . . . . . . : 192.168.100.201(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Lease Obtained. . . . . . . . . . : Thursday, October 31, 2019 1:13:07 AM
   Lease Expires . . . . . . . . . . : Friday, November 1, 2019 1:13:07 AM
   Default Gateway . . . . . . . . . : 192.168.100.1
   DHCP Server . . . . . . . . . . . : 169.254.169.254
   DHCPv6 IAID . . . . . . . . . . . : 151126039
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-25-4B-ED-1D-02-00-17-06-FC-AC
   DNS Servers . . . . . . . . . . . : 169.254.169.254
   NetBIOS over Tcpip. . . . . . . . : Enabled

C:\Users\opc>
```

- route print(VPN接続前)※一部編集

```shell-session
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    192.168.100.1  192.168.100.201     15　★Oracle管理のDefaultGWが使われている
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
      169.254.0.0      255.255.0.0         On-link   192.168.100.201     16
  169.254.169.254  255.255.255.255    192.168.100.1  192.168.100.201     16
  169.254.255.255  255.255.255.255         On-link   192.168.100.201    271
    192.168.100.0    255.255.255.0         On-link   192.168.100.201    271
  192.168.100.201  255.255.255.255         On-link   192.168.100.201    271
  192.168.100.255  255.255.255.255         On-link   192.168.100.201    271
       202.45.0.0      255.255.0.0    192.168.100.1  192.168.100.201     16
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link   192.168.100.201    271
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link   192.168.100.201    271
===========================================================================
Persistent Routes:
  None

C:\Users\opc>
```

- route print(VPN接続後)※一部編集

```shell-session
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    192.168.100.1  192.168.100.201   4240
          0.0.0.0          0.0.0.0         On-link   192.168.100.203     26　★VPNサーバがDefaultGWとして追加されている
        127.0.0.0        255.0.0.0         On-link         127.0.0.1   4556　　Oracle管理GW向けのDefault Routeより
        127.0.0.1  255.255.255.255         On-link         127.0.0.1   4556　　小さいMetric値になっているため、外部NWとの
  127.255.255.255  255.255.255.255         On-link         127.0.0.1   4556　　通信時はこちらのルーティングが優先的に
      169.254.0.0      255.255.0.0         On-link   192.168.100.201   4241　　使われることになる
  169.254.169.254  255.255.255.255    192.168.100.1  192.168.100.201   4241
  169.254.255.255  255.255.255.255         On-link   192.168.100.201   4496
    192.168.100.0    255.255.255.0         On-link   192.168.100.201   4496
  192.168.100.201  255.255.255.255         On-link   192.168.100.201   4496
  192.168.100.203  255.255.255.255         On-link   192.168.100.203    281
  192.168.100.255  255.255.255.255         On-link   192.168.100.201   4496
       202.45.0.0      255.255.0.0    192.168.100.1  192.168.100.201   4241
  210.156.169.138  255.255.255.255    192.168.100.1  192.168.100.201   4241
        224.0.0.0        240.0.0.0         On-link         127.0.0.1   4556
        224.0.0.0        240.0.0.0         On-link   192.168.100.201   4496
        224.0.0.0        240.0.0.0         On-link   192.168.100.203     26
  255.255.255.255  255.255.255.255         On-link         127.0.0.1   4556
  255.255.255.255  255.255.255.255         On-link   192.168.100.201   4496
  255.255.255.255  255.255.255.255         On-link   192.168.100.203    281
===========================================================================
Persistent Routes:
  None

C:\Users\opc>
```

### ■「Client#1」疎通確認ログ

- pingによる疎通確認

※インターネット環境にLTEを使用したため応答速度が遅いです。

```shell-session
ping 192.168.100.203

192.168.100.203 に ping を送信しています 32 バイトのデータ:
192.168.100.203 からの応答: バイト数 =32 時間 =92ms TTL=127
192.168.100.203 からの応答: バイト数 =32 時間 =148ms TTL=127
192.168.100.203 からの応答: バイト数 =32 時間 =53ms TTL=127
192.168.100.203 からの応答: バイト数 =32 時間 =54ms TTL=127

192.168.100.203 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 53ms、最大 = 148ms、平均 = 86ms
```

- arp確認

```shell-session

arp -a

インターフェイス: 192.168.100.253 --- 0xc
  インターネット アドレス 物理アドレス           種類
  192.168.100.203       00-a0-de-6b-37-b6     動的　★VPNサーバ(192.168.100.251)が「Server#1」へのARPリクエストに
  192.168.100.251       00-a0-de-6b-37-b6     動的   代理応答(Proxy ARP)しているため「Server#1」のARPアドレスが
  192.168.100.255       ff-ff-ff-ff-ff-ff     静的　 VPNサーバのものと同じになっている
  224.0.0.22            01-00-5e-00-00-16     静的
  224.0.0.251           01-00-5e-00-00-fb     静的
  224.0.0.252           01-00-5e-00-00-fc     静的
  239.255.255.250       01-00-5e-7f-ff-fa     静的
```

- Remote Desktop接続

![コメント 2019-10-31 193142.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/c86df935-dfba-cb1c-c018-9fe872b458a9.png)

### ■VPNサーバ「RTX1200」確認ログ(Client接続後)

※一部編集あり

```shell-session

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

sa   sgw isakmp connection   dir  life[s] remote-id
-----------------------------------------------------------------------------
1     3    -    isakmp       -    28696   x.x.x.x
2     3    1    tra[003]esp  send 3496    x.x.x.x
3     3    1    tra[003]esp  recv 3496    x.x.x.x

#
# show status l2tp
------------------- L2TP INFORMATION -------------------
L2TP情報テーブル
  L2TPトンネル数: 1, L2TPセッション数: 1
TUNNEL[3]:
  トンネルの状態: established
  バージョン: L2TPv2
  自機側トンネルID: 6424
  相手側トンネルID: 4
  自機側IPアドレス: 192.168.100.251
  相手側IPアドレス: x.x.x.x
  自機側送信元ポート: 1701
  相手側送信元ポート: 1701
  PPインタフェース: PP[04]
  ベンダ名: Microsoft
  ホスト名: tokyo-vcn3-pub1
  Next Transmit sequence(Ns): 13
  Next Receive sequence(Nr) : 4
  トンネル内のセッション数: 1 session
  セッション情報:
    セッションの状態: established
    自機側セッションID: 45522
    相手側セッションID: 1
    通信時間: 1分51秒
    受信: 272 パケット [92904 オクテット]
    送信: 231 パケット [72474 オクテット]
#
# show ip route
宛先ネットワーク    ゲートウェイ     インタフェース  種別  付加情報
default             -                    PP[01]    static
192.168.100.203/32  -                    PP[04]  implicit
y.y.y.y/32          -                    PP[01]  implicit
#
```

###■その他

- OCI上に移行するサーバの台数が多い場合は一台ずつVPNクライアントの設定が必要になるため設定・運用が面倒になりそう。
- 基本動作として、VPN接続後は全ての外部との通信(0.0.0.0/0)についてVPNサーバがDefaultGWになるため
OCI上のインスタンス間の通信もVPNサーバ折り返しになってしまう。
対策としてクラウド内の通信に関してはOCIのGW(Subnetのネットワークアドレス+1)をDefaultGWにするルーティングを追加。
- OCI上のインスタンスの実IPアドレスとVPNクライアントとして割り当てられるIPアドレスが同じ設計になっており
1台の仮想サーバが持つ2つのNICに同じIPアドレスが設定可能かという不安もあったが、ルーティングを注意すれば特に問題なさそう。


###■最後に
- 本文章は個人で検証した内容の記録であり、検証方法及び結果を保証するものではないことを
あらかじめご了承・ご理解いただけますようお願い致します。