RTX1200によるNGN網L2TPv3トンネル

# はじめに
この記事は、以下ドクセルで公開したスライドのconfig掲示用です。
ここだけ見ても意味不明になってしまいますので、まずは以下スライドをお読みください。
<script async class="docswell-embed" src="https://www.docswell.com/assets/libs/docswell-embed/docswell-embed.min.js" data-src="https://www.docswell.com/slide/KVV6EX/embed" data-aspect="0.7073"></script><div class="docswell-link"><a href="https://www.docswell.com/s/earis/KVV6EX-2023-06-12-025004">ひかりTVを遠隔地で見れるようにした by @earis</a></div>

# 物理図とアドレス
本来論理図を書くべきなんですが、 ~~面倒なので~~ 多目にみてください。
ヤマハルータのLAN2はWANポート、LAN1はLANポートとして利用されますが、
物理ポートと混同しやすいので記載は物理ポートで統一しています。
スライドでも説明している通り、RTX1200 LAN2で取得するIPv6アドレスは
L2TPv3トンネルを確立するためだけに利用し、LAN1側にはRAしておりません。
![RTX記事用2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484467/155b4610-98d2-39f4-6837-fd3c402b41a7.png)

# 最終的なconfig
まずは結果から。だいぶ長いので展開して確認ください。
<details><summary>実家RTX1200#1(ひかり電話=HGWあり)</summary>

```config: 実家RTX1200#1(ひかり電話=HGWあり)
login password encrypted *
administrator password *
login user admin *
security class 1 on off on
console lines infinity
console prompt RTX1200_1
login timer 900
ip route default gateway pp 1
ip filter source-route on
ip filter directed-broadcast on
ipv6 route default gateway dhcp lan2
ipv6 prefix 1 dhcp-prefix@lan2::/64
bridge member bridge1 lan1 tunnel1
ip bridge1 address 10.0.0.1/24
ip lan1 address 10.0.1.1/24
ip lan1 proxyarp on
ipv6 lan1 mld router version=2
ipv6 lan2 address dhcp
ipv6 lan2 secure filter in 1 2 3 4 5 100
ipv6 lan2 secure filter out 200 dynamic 81 98 99
ipv6 lan2 dhcp service client
ipv6 lan2 mld host version=2
ngn type lan2 ntt
pp select 1
 description pp PRV/PPPoE/0:
 pp always-on on
 pppoe use lan3
 pppoe auto connect on
 pppoe auto disconnect on
 pp auth accept pap chap
 pp auth myname 「PPPoEアカウント名」 「PPPoEパスワード」
 ppp lcp mru on 1454
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ip pp mtu 1454
 ip pp secure filter in 1020 1021 1030 1031 1040 1050 1060 1070 2000
 ip pp secure filter out 1010 1011 1012 1013 1014 1015 3000 dynamic 100 101 102 103 104 105 106 107
 ip pp nat descriptor 1
 netvolante-dns use pp server=1 auto
 netvolante-dns hostname host pp server=1 「DDNSホスト名」.aa0.netvolante.jp
 pp enable 1
pp select anonymous
 pp bind tunnel3
 pp auth request mschap-v2
 pp auth username 「リモートVPNアカウント名」 「リモートVPNパスワード」
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ip pp remote address pool 10.0.1.10-10.0.1.20
 ip pp mtu 1258
 pp enable anonymous
tunnel select 1
 tunnel encapsulation l2tpv3-raw
 tunnel endpoint address 「ローカルIPv6アドレス」 「対向IPv6アドレス」
 l2tp always-on on
 l2tp hostname RTX1200_1
 l2tp tunnel auth on 「L2TPパスワード①」
 l2tp tunnel disconnect time off
 l2tp keepalive use on 60 3
 l2tp keepalive log off
 l2tp syslog off
 l2tp local router-id 10.0.0.1
 l2tp remote router-id 10.0.0.2
 l2tp remote end-id 「L2TPパスワード①」
 ip tunnel tcp mss limit auto
 tunnel enable 1
tunnel select 3
 tunnel encapsulation l2tp
 ipsec tunnel 103
  ipsec sa policy 103 3 esp 3des-cbc sha-hmac
  ipsec ike keepalive use 3 off
  ipsec ike local address 3 10.0.1.1
  ipsec ike nat-traversal 3 on
  ipsec ike pre-shared-key 3 text 「L2TPパスワード②」
  ipsec ike remote address 3 any
 l2tp tunnel disconnect time off
 l2tp keepalive use on 10 3
 l2tp keepalive log off
 l2tp syslog off
 ip tunnel tcp mss limit auto
 tunnel enable 3
ip filter 1010 reject * * udp,tcp 135 *
ip filter 1011 reject * * udp,tcp * 135
ip filter 1012 reject * * udp,tcp netbios_ns-netbios_ssn *
ip filter 1013 reject * * udp,tcp * netbios_ns-netbios_ssn
ip filter 1014 reject * * udp,tcp 445 *
ip filter 1015 reject * * udp,tcp * 445
ip filter 1020 reject-nolog 10.0.0.0/24 * * * *
ip filter 1021 reject-nolog 10.0.1.0/24 * * * *
ip filter 1030 pass * 10.0.0.0/24 icmp * *
ip filter 1031 pass * 10.0.1.0/24 icmp * *
ip filter 1040 pass-log * * esp * *
ip filter 1050 pass-log * * udp * 500
ip filter 1060 pass-log * * udp * 1701
ip filter 1070 pass-log * * udp * 4500
ip filter 2000 reject-nolog * * * * *
ip filter 3000 pass * * * * *
ip filter dynamic 100 * * ftp
ip filter dynamic 101 * * www
ip filter dynamic 102 * * domain
ip filter dynamic 103 * * smtp
ip filter dynamic 104 * * pop3
ip filter dynamic 105 * * submission
ip filter dynamic 106 * * tcp
ip filter dynamic 107 * * udp
nat descriptor type 1 masquerade
nat descriptor address outer 1 ipcp
nat descriptor address inner 1 auto
nat descriptor masquerade static 1 1 10.0.1.1 esp
nat descriptor masquerade static 1 2 10.0.1.1 udp 500
nat descriptor masquerade static 1 3 10.0.1.1 udp 4500
ipsec auto refresh on
ipsec transport 3 103 udp 1701
ipv6 filter 1 pass * * icmp6 * *
ipv6 filter 2 pass * * esp * *
ipv6 filter 3 pass * * udp * 500
ipv6 filter 4 pass * * udp * 1701
ipv6 filter 5 pass * * udp * 546
ipv6 filter 100 reject * * * * *
ipv6 filter 200 pass * * * * *
ipv6 filter dynamic 81 * * domain
ipv6 filter dynamic 98 * * tcp
ipv6 filter dynamic 99 * * udp
syslog notice on
syslog debug off
telnetd service off
dns server select 1 dhcp lan2 aaaa .
dns server select 2 pp 1 any . restrict pp 1
dns private address spoof on
schedule at 1 */* *:00 * ntpdate ntp.jst.mfeed.ad.jp syslog
l2tp service on
httpd service on
httpd timeout 180
httpd host any
netvolante-dns register timer server=1 28800
sshd service on
sshd host any
sshd host key generate *
statistics cpu on
statistics memory on
statistics flow off
statistics route off
statistics nat off
statistics filter off
```

</details>

<details><summary>自宅RTX1200#2(ひかり電話なし)</summary>

```config: 自宅RTX1200#2(ひかり電話なし)
login password *
administrator password *
login user admin *
security class 1 on off on
console lines infinity
console prompt RTX1200_2
login timer 900
ip route default gateway pp 1
ip filter source-route on
ip filter directed-broadcast on
bridge member bridge1 lan1 tunnel1
ip bridge1 address 10.0.0.2/24
ip lan1 address 10.0.1.2/24
ip lan1 proxyarp on
ipv6 lan1 mld router version=2
ipv6 lan2 address ra-prefix@lan2::1/64
ipv6 lan2 secure filter in 1 2 3 4 5 100
ipv6 lan2 secure filter out 200 dynamic 81 98 99
ipv6 lan2 dhcp service client ir=on
ipv6 lan2 mld host version=2
pp select 1
 description pp PPPoE
 pp always-on on
 pppoe use lan3
 pppoe auto connect on
 pppoe auto disconnect on
 pp auth accept pap chap
 pp auth myname 「PPPoEアカウント名」 「PPPoEパスワード」
 ppp lcp mru on 1454
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ip pp mtu 1454
 ip pp secure filter in 1020 1021 1030 1031 1040 1050 1060 1070 2000
 ip pp secure filter out 1010 1011 1012 1013 1014 1015 3000 dynamic 100 101 102 103 104 105 106 107
 ip pp nat descriptor 1
 netvolante-dns use pp server=1 auto
 netvolante-dns hostname host pp server=1 「DDNSホスト名」.aa0.netvolante.jp
 pp enable 1
pp select anonymous
 pp bind tunnel3
 pp auth request mschap-v2
 pp auth username 「リモートVPNアカウント名」 「リモートVPNパスワード」
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ip pp remote address pool 10.0.1.10-10.0.1.20
 ip pp mtu 1258
 pp enable anonymous
tunnel select 1
 tunnel encapsulation l2tpv3-raw
 tunnel endpoint address 「ローカルIPv6アドレス」 「対向IPv6アドレス」
 l2tp always-on on
 l2tp hostname RTX1200_2
 l2tp tunnel auth on 「L2TPパスワード①」
 l2tp tunnel disconnect time off
 l2tp keepalive use on 60 3
 l2tp keepalive log off
 l2tp syslog off
 l2tp local router-id 10.0.0.2
 l2tp remote router-id 10.0.0.1
 l2tp remote end-id 「L2TPパスワード①」
 ip tunnel tcp mss limit auto
 tunnel enable 1
tunnel select 3
 tunnel encapsulation l2tp
 ipsec tunnel 103
  ipsec sa policy 103 3 esp 3des-cbc sha-hmac
  ipsec ike keepalive use 3 off
  ipsec ike local address 3 10.0.1.2
  ipsec ike log 3 key-info message-info payload-info
  ipsec ike nat-traversal 3 on
  ipsec ike pre-shared-key 3 text 「L2TPパスワード②」
  ipsec ike remote address 3 any
 l2tp tunnel disconnect time off
 l2tp keepalive use on 10 3
 l2tp keepalive log off
 l2tp syslog off
 ip tunnel tcp mss limit auto
 tunnel enable 3
ip filter 1010 reject * * udp,tcp 135 *
ip filter 1011 reject * * udp,tcp * 135
ip filter 1012 reject * * udp,tcp netbios_ns-netbios_ssn *
ip filter 1013 reject * * udp,tcp * netbios_ns-netbios_ssn
ip filter 1014 reject * * udp,tcp 445 *
ip filter 1015 reject * * udp,tcp * 445
ip filter 1020 reject-nolog 10.0.0.0/24 * * * *
ip filter 1021 reject-nolog 10.0.1.0/24 * * * *
ip filter 1030 pass * 10.0.0.0/24 icmp * *
ip filter 1031 pass * 10.0.1.0/24 icmp * *
ip filter 1040 pass-log * * esp * *
ip filter 1050 pass-log * * udp * 500
ip filter 1060 pass-log * * udp * 1701
ip filter 1070 pass-log * * udp * 4500
ip filter 2000 reject-nolog * * * * *
ip filter 3000 pass * * * * *
ip filter dynamic 100 * * ftp
ip filter dynamic 101 * * www
ip filter dynamic 102 * * domain
ip filter dynamic 103 * * smtp
ip filter dynamic 104 * * pop3
ip filter dynamic 105 * * submission
ip filter dynamic 106 * * tcp
ip filter dynamic 107 * * udp
nat descriptor type 1 masquerade
nat descriptor address outer 1 ipcp
nat descriptor address inner 1 auto
nat descriptor masquerade static 1 1 10.0.1.2 esp
nat descriptor masquerade static 1 2 10.0.1.2 udp 500
nat descriptor masquerade static 1 3 10.0.1.2 udp 4500
ipsec auto refresh on
ipsec transport 3 103 udp 1701
ipv6 filter 1 pass * * icmp6 * *
ipv6 filter 2 pass * * esp * *
ipv6 filter 3 pass * * udp * 500
ipv6 filter 4 pass * * udp * 1701
ipv6 filter 5 pass * * udp * 546
ipv6 filter 100 reject * * * * *
ipv6 filter 200 pass * * * * *
ipv6 filter dynamic 81 * * domain
ipv6 filter dynamic 98 * * tcp
ipv6 filter dynamic 99 * * udp
syslog notice on
syslog debug off
telnetd service off
dns server select 1 dhcp lan2 aaaa .
dns server select 2 pp 1 any . restrict pp 1
dns private address spoof on
schedule at 1 */* *:00 * ntpdate ntp.jst.mfeed.ad.jp syslog
l2tp service on
httpd service on
httpd timeout 180
httpd host any
netvolante-dns register timer server=1 28800
sshd service on
sshd host any
sshd host key generate *
statistics cpu on
statistics memory on
statistics flow off
statistics route off
statistics nat off
statistics filter off
```

</details>

# configのポイント
```config: IPv4デフォルトゲートウェイ(実家RTX1200#1、自宅RTX1200#2共通)
ip route default gateway pp 1
```
ここはリモートVPNおよびmfeedへの時刻同期用にPPPoEをデフォゲしています。
RTX1200配下のクライアントはSoftbank BBルータからDHCPでIP取得するため、
RTX1200のデフォゲには抜けていきません。
```config: LAN2 NGN(ひかりTV)接続設定 (実家RTX1200#1(ひかり電話=HGWあり))
ipv6 route default gateway dhcp lan2
ipv6 prefix 1 dhcp-prefix@lan2::/64
ipv6 lan1 mld router version=2
ipv6 lan2 address dhcp
ipv6 lan2 secure filter in 1 2 3 4 5 100
ipv6 lan2 secure filter out 200 dynamic 81 98 99
ipv6 lan2 dhcp service client
ipv6 lan2 mld host version=2
ngn type lan2 ntt
```
```config: LAN2 NGN(ひかりTV)接続設定 (自宅RTX1200#2(ひかり電話なし))
ipv6 lan1 mld router version=2
ipv6 lan2 address ra-prefix@lan2::1/64
ipv6 lan2 secure filter in 1 2 3 4 5 100
ipv6 lan2 secure filter out 200 dynamic 81 98 99
ipv6 lan2 dhcp service client ir=on
ipv6 lan2 mld host version=2
```
ひかりTVへの接続設定はヤマハ公式を参考に設定しました。
[ひかりTV接続設定方法](https://network.yamaha.com/setting/router_firewall/flets/flets_other_service/television "ひかりTVへの接続") 


```config: LAN1へのIPv6配布OFF (実家RTX1200#1(ひかり電話=HGWあり))
ipv6 lan1 address dhcp-prefix@lan2::1/64
ipv6 lan1 rtadv send 1 o_flag=on
```
```config: LAN1へのIPv6配布OFF (自宅RTX1200#2(ひかり電話なし))
ipv6 lan1 address ra-prefix@lan2::1/64
ipv6 lan1 rtadv send 1 o_flag=on
```

スライドで説明しているLAN1側へRAさせない、とは上記設定を消しているからです。
そもそもRTX1200の仕様上、ブリッジインターフェースはRA応答しないようです。
[ブリッジインタフェース(ブリッジ機能)](http://www.rtpro.yamaha.co.jp/RT/docs/bridge/index.html "ブリッジインタフェース(ブリッジ機能)")
> RAによるIPv6プレフィックスの配布機能には対応していません。

また、ND-Proxyのような機能もないようでした。

```config: L2TPv3設定(実家RTX1200#1、自宅RTX1200#2共通)
bridge member bridge1 lan1 tunnel1
ip bridge1 address 10.0.0.1/24　(自宅側:10.0.0.2/24)
tunnel select 1
 tunnel encapsulation l2tpv3-raw
 tunnel endpoint address 「ローカルIPv6アドレス」 「対向IPv6アドレス」
 l2tp always-on on
 l2tp hostname RTX1200_1
 l2tp tunnel auth on 「L2TPパスワード①」
 l2tp tunnel disconnect time off
 l2tp keepalive use on 60 3
 l2tp keepalive log off
 l2tp syslog off
 l2tp local router-id 10.0.0.1 (自宅側:10.0.0.2/24)
 l2tp remote router-id 10.0.0.2 (自宅側:10.0.0.1/24)
 l2tp remote end-id 「L2TPパスワード①」
 ip tunnel tcp mss limit auto
 tunnel enable 1
l2tp service on l2tpv3
```
L2TPv3トンネルの接続設定もヤマハ公式を参考に設定しました。
[設定例7：2拠点間でのL2TPv3/IPsecを用いたL2VPNの構築(NGN網内折り返し、フレッツ・v6オプション契約使用)](
http://www.rtpro.yamaha.co.jp/RT/docs/l2tpv3/#setting7 "設定例7：2拠点間でのL2TPv3/IPsecを用いたL2VPNの構築(NGN網内折り返し、フレッツ・v6オプション契約使用)")
スライドで説明している通り、IPSec有効だとDLNA(DTCP-IP)のRTT/TTLの制限を超えられなかったため、
IPSec設定を削除してL2TPv3で直接トンネルを張るように変更しています。
また、スライドでは触れていませんが、当初ヤマハ公式通りにフレッツv6ネーム機能を利用し、
L2TPv3トンネルとしていたのですが、SoftBank BBルータをE-WMTA2.4へ交換してもらった際に
ネームに登録していたIPv6アドレスが変わってしまったため、面倒なのでアドレス指定に変更しています。
NTT東日本地域にお住まいの方でしたら、[登大遊さん](https://twitter.com/dnobori "登大遊さん") が提供している、
[OPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト](https://i.open.ad.jp/ "OPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト") およびRTX1200のRuaスクリプトを利用し、
FQDNで管理した方がメンテナンス性向上すると思います。
私は残念ながらNTT西日本地区在住ですので、こちらの方法は利用できませんでした。


```config: リモートVPN (実家RTX1200#1、自宅RTX1200#2共通)
ip lan1 address 10.0.1.1/24 (自宅:10.0.1.2/24)
ip lan1 proxyarp on
pp select anonymous
 pp bind tunnel3
 pp auth request mschap-v2
 pp auth username 「リモートVPNアカウント名」 「リモートVPNパスワード」
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ip pp remote address pool 10.0.1.10-10.0.1.20
 ip pp mtu 1258
 pp enable anonymous
tunnel select 3
 tunnel encapsulation l2tp
 ipsec tunnel 103
  ipsec sa policy 103 3 esp 3des-cbc sha-hmac
  ipsec ike keepalive use 3 off
  ipsec ike local address 3 10.0.1.1 (自宅:10.0.1.2)
  ipsec ike nat-traversal 3 on
  ipsec ike pre-shared-key 3 text 「L2TPパスワード②」
  ipsec ike remote address 3 any
 l2tp tunnel disconnect time off
 l2tp keepalive use on 10 3
 l2tp keepalive log off
 l2tp syslog off
 ip tunnel tcp mss limit auto
 tunnel enable 3
```
スライドで説明している通り、リモートVPNにて機器自身にSSHログインするためには
当たり前ですがLAN1にアドレスが必要となります。
ヤマハ公式ではLAN1をブリッジインターフェースメンバーにしている場合、
LAN1にアドレスを付与しても動作しない、のような記述がありますが、実際のところは動作しました。
[ブリッジインタフェース(ブリッジ機能)](http://www.rtpro.yamaha.co.jp/RT/docs/bridge/index.html "ブリッジインタフェース(ブリッジ機能)")

> 収容するLANインタフェースについて
収容した実インタフェースにIPv4,IPv6アドレスを付与しては ならない。収容した実インタフェースのIPv6リンクローカルアドレスは 削除される。

リモートVPNは全世界公開となるため、念のためL2TP over IPSecとしています。
ChiperSuiteは3des-cbc sha-hmacとあまり強固なものではありませんが、
下手に強固なもの(マイナーなもの)を利用すると、接続する端末側が対応しておらず、
トラブルシュートにものすごく時間を要することになります。（実際ハマりましたｗ）
ちなみにトンネル3にしている深い理由は特にありません。

# まとめ
RTX1200のブリッジインターフェースがRA応答しないことを逆手に
NGN網でIPv6 L2TPv3トンネルを張り、トンネル内をDHCPv6でNGNアドレスを無理矢理付与する、
といったかなり強引な手法によってですが、目的を達成できています。
今回はSoftbank BBルータがそのような仕様だったために動作したといっても過言じゃありません。
以前にいくつかソフトウェアルータを試してみましたが、
DHCPv6 Serverを立てれる機器は世の中にそうそう多くないため、
今回のようなことをする場合はSoftbank光を契約してしまうのが早いかもしれません。

# コメント歓迎です！
今回は思いつくまま構築してみましたが、他にこんな方法あるよ！だとか
ここの設定はこうした方がいいのでは？などコメントいただけると嬉しいです。