ER-X(Edgerouter) でInterlinkの固定IPサービスを利用する (ひかり電話なし)

[transix IPv4接続（固定IP）](https://www.mfeed.ad.jp/transix/staticip/)を利用したInterlink [ZOOT NATIVE-固定IPサービス](https://www.interlink.or.jp/service/zootnative/koteiip.html)が、ようやく提供され、NATテーブル不足に嘆いていた私の光明が見えてきたのでとっとと切り替えました。

というか、とっとと切り替えたかったのにIIJのtransix切り替えに時間かかって約2週間のおあづけです。

EdgeRouterで、ひとまず動かすという方向で設定をしたら思ったよりすんなり動いたので、ここに記録しておきます。

## 前提条件

- フレッツ光クロス、フレッツ光ネクスト、またはフレッツ光ライトなど NTT東日本・西日本のNGN回線引き込み済み
- 「フレッツ・v6オプション」契約済み
- [ZOOT NATIVE-固定IPサービス](https://www.interlink.or.jp/service/zootnative/koteiip.html) 契約済み
- [nd proxy(ndppd)](https://qiita.com/sho7650/items/f0d90957e860456f4481) インストール&実行済み

※ firewallやsystemなどの設定はすっ飛ばしています。必要に応じて追加・設定しましょう。

## RA Prefix の取得と、内部LAN側の IPv6の定義

契約が済んだら Router Advertisement を取得して、Interlink側から提供されるIPv6のPrefixを取得します。次のように `sudo radvdump` コマンドを打ってしばらく(数分)放置すると、`radvd.conf`形式の定義が手に入ります。ここで欲しいのは `prefix 2409:xxxx:xxxx:xxxx::/64` です(EdgeRouterだと定義ファイルそのまま使えないですからね)。

```bash
$ sudo radvdump
#
# radvd configuration generated by radvdump 2.16
# based on Router Advertisement from fe80:xxxx:xxxx:xxxx:xxxx
# received by interface eth0
#

interface eth0
{
        AdvSendAdvert on;
        # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
        AdvManagedFlag off;
        AdvOtherConfigFlag on;
        AdvReachableTime 300000;
        AdvRetransTimer 10000;
        AdvCurHopLimit 64;
        AdvDefaultLifetime 1800;
        AdvHomeAgentFlag off;
        AdvDefaultPreference medium;
        AdvSourceLLAddress on;

        prefix 2409:xxxx:xxxx:xxxx::/64
        {
                AdvValidLifetime 2592000;
                AdvPreferredLifetime 604800;
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        }; # End of prefix definition

}; # End of interface definition
```

これをもとに、`router-advert` をせっせと定義します。我が家では`switch0`が内部LANのInterfaceなので、こちらに定義します。`eui64`部分と`prefix`の設定が必要です。

- `eui64` = `RA Prefix` + `【インターフェースID】` (【インターフェースID】は Interlinkから登録完了通知が来たときに定義されています)
- `prefix` = `RA Prefix`

に書き換えて設定します。

```
set interfaces switch switch0 ipv6 address eui64 '2409:xxxx:xxxx:xxxx::feed/64'
set interfaces switch switch0 ipv6 dup-addr-detect-transmits 1
set interfaces switch switch0 ipv6 router-advert cur-hop-limit 64
set interfaces switch switch0 ipv6 router-advert link-mtu 1500
set interfaces switch switch0 ipv6 router-advert managed-flag false
set interfaces switch switch0 ipv6 router-advert max-interval 600
set interfaces switch switch0 ipv6 router-advert other-config-flag true
set interfaces switch switch0 ipv6 router-advert prefix '2409:xxxx:xxxx:xxxx::/64' autonomous-flag true
set interfaces switch switch0 ipv6 router-advert prefix '2409:xxxx:xxxx:xxxx::/64' on-link-flag true
set interfaces switch switch0 ipv6 router-advert prefix '2409:xxxx:xxxx:xxxx::/64' valid-lifetime 2592000
set interfaces switch switch0 ipv6 router-advert reachable-time 0
set interfaces switch switch0 ipv6 router-advert retrans-timer 0
set interfaces switch switch0 ipv6 router-advert send-advert true
set interfaces switch switch0 mtu 1500
```

この `eui64` で定義したIPアドレスはWAN側のIPv6アドレスでもあります。次のようにWAN側のIPv6アドレスも設定しましょう。

```
set interfaces ethernet eth0 address '2409:xxxx:xxxx:xxxx::feed/64'
```

ここまで設定できたらIPv6アドレスでの接続が可能です。

## IPv4 接続部分の設定(IPIPトンネリング/NAT/ルーティング)

IPv4 での接続には、IPIPトンネリングとNAT、ルーティング、mss-clampの定義が必要です。

### IPIPトンネリングの設定

`firewall`のところはお任せです。IPIPトンネリングは次のように定義します。各々のアドレスは次のとおりです。

- address `【グローバル固定IPv4アドレス】`
- local-ip `RA Prefix` + `【インターフェースID】`
- remote-ip `【固定IPトンネル終端装置 IPv6アドレス】`

```
set interfaces ipv6-tunnel v6tun0 address xxx.xxx.xxx.xxx/32
set interfaces ipv6-tunnel v6tun0 encapsulation ipip6
set interfaces ipv6-tunnel v6tun0 firewall in name WAN_IN
set interfaces ipv6-tunnel v6tun0 firewall local name WAN_LOCAL
set interfaces ipv6-tunnel v6tun0 local-ip '2409:xxxx:xxxx:xxxx::feed'
set interfaces ipv6-tunnel v6tun0 mtu 1452
set interfaces ipv6-tunnel v6tun0 multicast disable
set interfaces ipv6-tunnel v6tun0 remote-ip '2404:xxxx::feed:xxxx'
set interfaces ipv6-tunnel v6tun0 ttl 64
```

### NATの構成

内部LANからトンネルを経由してアクセスする場合に必要なNATの定義です。`outbound-interface`はIPIPトンネルで定義したものを割り当てます。

```
set service nat rule 5010 outbound-interface v6tun0
set service nat rule 5010 type masquerade

```

### ルーティングの設定

ここまで来たら後少しです。IPv4のルーティングを追加します。言わずもがなの定義方法ですね。

```
set protocols static interface-route 0.0.0.0/0 next-hop-interface v6tun0
```

### mss-clamp の設定

最後にこれを忘れていて、我が家からは speedtest.net アクセスできなくて泣きました。`interface-type all` にしときましょう。`tun`だけでいいかと思ったのですが、ダメでした。

```
set firewall options mss-clamp interface-type all
set firewall options mss-clamp mss 1412
```

## 速度を測ろう

やりました。ついに我々はNAT1024ポート制限を忘れ、IPv4でもアクセスし放題の環境を手に入れることができました。IPoE化バンザイ。

<img width="732" alt="Screen Shot 2020-06-20 at 20.17.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37263/64a91729-5721-82c2-5157-954787bf1b5f.png">

えっ遅くね...(IPv6はふつーです)。

### 追記(2020/6/21)

朝の空いてるだろう時間帯に再計測。制限ついてそうだな。はやく世の中が IPv6化しますように(-人-)

<img width="732" alt="Screen Shot 2020-06-21 at 7.46.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37263/3c0cd99f-46d9-2bfe-f357-3a62653725ca.png">

## おわりに

Interlink側なのか、transix側なのかわかりませんが、ある程度の速度規制なりなのはかかってるように見受けられます。IPv4固定とか、個別にアドレスを分けているようなので、IPトンネル終端装置側はある程度のリソース制限がありそうです。とは言え、なにも考えずにアクセスできることと、国内IPアドレスが割り当てられていることで、余計なことを考えずに済むのは本当に助かります。

ひとまず設定しましたが、今のままだとIPv6のPrefixが変わった瞬間に接続できなくなるので、うまいこと取得したRA Prefixを自動的に更新・定義することは必要不可欠でしょう。あとDDNSも、気が向いたら設定してみようかなというとこです。

何かあったときようにELECOMの安いルータ買っといたけど、EdgeRouterでなんとか構成できてよかった...。

## 参考情報

- [設定例集#80: transix IPv4接続（固定IP）サービスによるIPv4・IPv6インターネットへの同時接続（ひかり電話なし）](https://www.allied-telesis.co.jp/support/list/awp/rel/5.4.9-1.1/613-002735_C/docs/overview-381.html)
- [【設定例10：IPv4 over IPv6 IPIPトンネル接続 インターネットマルチフィード株式会社 transix IPv4接続（固定IP）】](http://www.rtpro.yamaha.co.jp/RT/docs/ipip/index.html#setting10)
- [Edgerouter (ER-X) で IPoE + DS-lite で IPv6/IPv4 環境を構築する (ひかり電話なし)](https://qiita.com/sho7650/items/6dd4c8145411686d012d)
- [Edgerouter (ER-X) で NDプロキシを使って IPv6通信を行う (ひかり電話なし)](https://qiita.com/sho7650/items/f0d90957e860456f4481)
- [Edgerouter (ER-X) で DS-lite だけしてみる (ひかり電話なし)](https://qiita.com/sho7650/items/23d668d246166338c398)