NGN網内折り返しのL2TPv3/IPsecをYamaha RTXで構築してみた

## はじめに
　本記事は検証目的で構築したL2VPNについて、つくれぽとしてしたためたものです。検証で確かめた項目は2つあります。1つめは拠点Aから拠点Bのファイルサーバにアクセスできることです。2つめはIPアドレス制限をしているシステムに拠点AのクライアントPCから接続するため、拠点Bの固定IPv4アドレスを使用してインターネットに接続できることです。また、本記事ではある程度難しいと思われる単語について、参考となるURLを記載しておきます。記事を読んでいただけている方へのお願いになりますが、ネットワークについては初学者のため、気になった部分については、優しいマサカリをお願いします。

## 構成
![Qiita用構成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012925/a18a473c-18bf-43d4-85a2-5b5b6a635e35.jpeg)

　構成を図に示します。拠点AのオフィスでルータはRTX830を使用し、クライアントPCや無線APを収容します。拠点Bはデータセンタで、ルータはRTX1300を使用し、DHCP・DNS・ファイルサーバを収容します。

　次に、WAN側の説明です。拠点間はNGN[^1]を介して接続します。このとき、RTX830とNGN間はフレッツ 光ネクスト[^2]で接続し、WAN側のIPv6アドレスはRA[^3]を利用して割り当てるものとします。そして、RTX1300とNGN間はフレッツ 光クロス[^4]で接続します。WAN側のIPv6アドレスはDHCPv6-PD[^3]を利用し、IPv4アドレスは固定のものがMAP-E[^5]によって割り当てられるものとします。なお、本記事では例示用のIPアドレスに置き換えて示します。

　続いて、LAN側の説明です。RTX830とRTX1300間はL2TPv3/IPsec[^6]を利用してL2VPN接続します。このとき、NGN網内での折り返しを実現するため、トンネルのIPアドレスにIPv6を指定することがポイントです。これにより、パケットがISPやインターネットを経由せず、ファイルサーバのアクセス時に遅延を減らす効果が期待できます。拠点AのクライアントPCは無線APに接続した後、拠点BのDHCPサーバからIPv4アドレスを割り当てられます。そして、DNSサーバは拠点Bのものを使用し、デフォルトゲートウェイはRTX1300のアドレス(192.168.2.1)となるように設定されます。これで、検証項目の1つめが達成されます。また、クライアントPCがインターネットを通信する際には、RTX1300によってNATされます。これによって検証項目の2つめも達成されます。

## 設定
　RTX830とRTX1300のそれぞれの設定を掲載します。なお、単純化するために直接関係ない部分は省略します。

### RTX830の設定
```
bridge member bridge1 lan1 tunnel1
ip bridge1 address 192.168.2.2/24
ipv6 lan2 address auto
ipv6 lan2 dhcp service client ir=on
tunnel select 1
 tunnel encapsulation l2tpv3
 tunnel endpoint address 3fff::200:5eff:fe00:5300
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes256-cbc sha256-hmac
  ipsec ike keepalive log 1 on
  ipsec ike keepalive use 1 on
  ipsec ike local address 1 2001:db8::1:200:5eff:fe00:53ff
  ipsec ike pre-shared-key 1 text himitsu_ike
  ipsec ike remote address 1 3fff::200:5eff:fe00:5300
 l2tp always-on on
 l2tp hostname rtx830
 l2tp tunnel auth on himitsu_l2tp
 l2tp tunnel disconnect time off
 l2tp keepalive use on 60 3
 l2tp keepalive log on
 l2tp syslog on
 l2tp local router-id 192.168.2.2
 l2tp remote router-id 192.168.2.1
 l2tp remote end-id l2vpn
 ip tunnel tcp mss limit auto
 tunnel enable 1
ipsec auto refresh on
ipsec transport 1 101 udp 1701
l2tp service on l2tpv3
```

### RTX1300の設定
```
ip route default gateway tunnel 1
ipv6 route default gateway dhcp lan2
ipv6 source address selection rule lifetime
bridge member bridge1 lan3 tunnel1-tunnel2
ip bridge1 address 192.168.2.1/24
ipv6 lan2 address dhcp
ipv6 lan2 dhcp service client
tunnel select 1
 tunnel encapsulation map-e
 tunnel map-e type ocn
 ip tunnel mtu 1460
 ip tunnel nat descriptor 1
 tunnel enable 1
tunnel select 2
 tunnel encapsulation l2tpv3
 tunnel endpoint address 3fff::200:5eff:fe00:5300 2001:db8::200:5eff:fe00:53ff
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes256-cbc sha256-hmac
  ipsec ike keepalive log 1 on
  ipsec ike keepalive use 1 on
  ipsec ike local address 1 3fff::200:5eff:fe00:5300
  ipsec ike pre-shared-key 1 text himitsu_ike
  ipsec ike remote address 1 2001:db8::200:5eff:fe00:53ff
 l2tp always-on on
 l2tp hostname rtx1300
 l2tp tunnel auth on himitsu_l2tp
 l2tp tunnel disconnect time off
 l2tp keepalive use on 60 3
 l2tp keepalive log on
 l2tp syslog on
 l2tp local router-id 192.168.2.1
 l2tp remote router-id 192.168.2.2
 l2tp remote end-id l2vpn
 ip tunnel tcp mss limit auto
 tunnel enable 2
nat descriptor type 1 masquerade
nat descriptor address outer 1 map-e
nat descriptor masquerade incoming 1 reject
ipsec auto refresh on
ipsec transport 1 101 udp 1701
l2tp service on l2tpv3
```

## 気づいた点
　検証中に気づいた点を挙げます。
- 構成図では省略していますが、RTX1300にIPv6アドレスが意図せず2つ割り当てられた状態になっていました
    - LAN2に`3fff::200:5eff:fe00:5300`と`3fff::6b:e133:8800:0`が割り当てられた状態です
    - `3fff::200:5eff:fe00:5300`はEUI-64で生成されたアドレスです
    - `3fff::6b:e133:8800:0`はよくわかりませんでした… 
        - `show ipv6 address lan2`の出力に`lifetime: INFINITY`と表示されるのでこれがヒントにはなりそうです
- RTX1300の`tunnel endpoint address`設定において、自分側のトンネルインタフェース端点のIPアドレスを明示的に指定する必要がありました
    - おそらく上記の項目に起因するものと考えられます

## 今後の課題
　現在は管理コストの問題からL2VPNの接続性を監視するシステムが存在しないですが、切断されたとき、すぐに気づける仕組みがあるとよさそうです。いろいろと方法は考えられますが、RTXのLuaスクリプト機能[^7]でSlackのWebhookを呼び出すのが簡単でしょうか。さらに、拠点BのIPアドレスで制限しているシステムにはアクセスできなくなりますが、L2VPNが復旧するまでの間はRTX830のDHCP/DNSサーバを有効化し、クライアントPCにインターネットへの接続を提供できたらよりよさそうです。
　ほかには、IPv6アドレスの変更に追従できるとよさそうです。現在はIPv6アドレスを指定してL2VPNを構築しているため、NTTの工事等でIPv6アドレスが変更された場合に手動で設定をし直す必要があります。これは、IPv6ダイナミックDNS[^8]やネットボランチDNSサービス[^9]を利用することで実現できそうです。ただし、IPv6アドレスの変更はほとんど起きないはずで、問題になることはなさそうです。

## おわりに
　本記事ではNGN網内折り返しのL2TPv3/IPsecをYamaha RTXで構築した際の設定例を掲載しました。どこかで誰かの参考になれば幸いです。

## 参考URL
- [ヤマハ株式会社 作ネットワーク構成図 作成用アイコン](https://network.yamaha.com/support/download/tool)
- [L2TPv3を用いたL2VPN](https://www.rtpro.yamaha.co.jp/RT/docs/l2tpv3/index.html)

[^1]: [NGN（次世代ネットワーク） | NTT東日本について | 企業情報 | NTT東日本](https://www.ntt-east.co.jp/aboutus/ngn.html)
[^2]: [フレッツ 光ネクスト ビジネスタイプ｜法人向け光回線｜法人のお客さま｜NTT東日本](https://business.ntt-east.co.jp/service/flets-business/)
[^3]: [DHCPv6サーバー](https://www.rtpro.yamaha.co.jp/SW/docs/swx3220/Rev_4_02_17/ap/ap_dhcpv6_server.html?rev=4.02.16&category=ap)
[^4]: [10ギガ回線サービス「フレッツ光クロス」【公式NTT東日本】](https://business.ntt-east.co.jp/service/flets-hikari/cross/)
[^5]: [OCNバーチャルコネクト対応機能](https://www.rtpro.yamaha.co.jp/RT/docs/ocn_map_e/index.html)
[^6]: [L2TPv3を用いたL2VPN](https://www.rtpro.yamaha.co.jp/RT/docs/l2tpv3/index.html)
[^7]: [Lua スクリプト機能](https://www.rtpro.yamaha.co.jp/RT/docs/lua/index.html)
[^8]: [IPv6 ダイナミック DNS](https://business.ntt-east.co.jp/service/ddns/)
[^9]: [ネットボランチDNSサービス](https://network.yamaha.com/knowledge/netvolantedns)