IPv6 IPoE と IPv4 PPPoE 併用でポートを開放する

# あらすじ
IPv4 と IPv6 のインターネットが混在する世界。
この v4 → v6 転換期で混沌を極めたネットワークの中でポートを開けるまでのお話
(ほぼ個人的な設定備忘録)

## 環境
契約しているのは[So-net光プラスマンション東日本](https://www.so-net.ne.jp/access/hikari/collabo/)
v6プラス(MAP-E)対応！！
これはPPPoEより比較的混雑してなくて速い！
当時ワイ「はぇ～～～～速いんだ！じゃあこれで！」
...
詳細や歴史的背景は後述しますが、この環境では任意のポート開放はできません。
まぁこの記事を読んでるってことは知ってますよね。



## v6プラス接続環境においての開放可能なポートの調査
ちなみにv6プラスで自分で開放できるポートは以下アルゴリズムで求めることが可能です。
でも、ググると自分のIPv6アドレスから開放可能なポートを調べてくれる便利なサイトがあるから
わざわざ計算しなくても良いよ。

AAAA : BBBB : CCCC : DDDD : EEEE : FFFF : GGGG : HHHH
っていうIPv6アドレスの場合、4ブロック目の部分の頭文字2文字を使う。ここでは「DD」のこと。

X=1～F、Y=0～Fとすると開放可能なポートは以下の範囲になります。
0xXDD0 ～ 0xYDDF

| 開放可能ポート(HEX)       |
|:-----------------:|
| 1DD0 ～ 1DDF             |
|   2DD0 ～ 2DDF        |
|...               |
|  EDD0 ～ EDDF           |
|   FDD0 ～ FDDF        |

```python:

def print_openable_port(v6_address):
    address_block = v6_address.split(':')
    block4        = address_block[3][0:2]
    
    for X in range(1,15):
        lower = int("{0:x}{1}0".format(X, block4), 16)
        upper = int("{0:x}{1}f".format(X, block4), 16)
        print("{0} ~ {1}".format(lower, upper))

```

# 要件
IPoE接続による恩恵は最大限受けて、任意のポート開放を行いたい

# 実現する方法
考えられる方法は以下のいずれかだと思います。

1. ルータ2台で実現する
2. YAMAHAルータ RTX830 で実現する

# ルータ2台で実現する(おすすめ)
家庭用ルータを2台使ってゴリ押す方法です。必要機材は以下3点です。
 - v6プラス対応ルータ1台 (L3SW-A)
 - v6プラス非対応（もちろん対応でもいい）ルータ1台(L3SW-B)
 - スイッチングハブ1台 (L2SW)

以下を構成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/1320293c-50e8-73e8-05a6-d38a08c329ab.png)


1. L3SW-AはIPoE(VNE経由)でインターネットへ接続します。
2. L3DW-BはPPPoE(ISP経由)でインターネットへ接続します。
3. IPアドレスの払い出しがおかしくなるので、ここではDHCP機能はL3SW-Aに任せ、L3SW-Bでは無効にしておきます。
開けたいポート設定はL3SW-Bに対して行います。

ネットワークの設定は以上です。これ以降配線を変える必要はないです。
ゲートウェイの切り替え時はクライアントで決定してあげるだけです。

特に指定しないと、デフォルトゲートウェイはIPアドレスを振ってくれたルータに設定されると思いますが、
意図通りにならないかもしれないので、手動で設定しておきます。

IPoE接続でインターネットに出たい場合は、
デフォルトゲートウェイを192.168.100.1に設定します。

任意のポートを開放したいクライアントは、PPPoE接続でインターネットに出る必要があるので、
デフォルトゲートウェイを192.168.100.2に設定すれば良いです。

### メリット
- 安い。理解しやすい。

### デメリット
- クライアントのデフォルトゲートウェイを静的に決めるのが手間。
- 1クライアントに対して特定のポートだけPPPoEでそのほかはIPoEで、とはできない。
- ダサい。足が遅そう。

# RTX830 で実現する
業務用ルータを使う。最終手段。
フィルター型ルーティングにより、開放するポートの接続のみPPPoEで行うようにします。
以下を構成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/446f14bd-43cb-d01d-9a10-c0051e405c31.png)



手順は次の通りです。

1.接続優先度をIPoE接続、PPPoE接続の順にしておきます。
以下ページの②までの手順を参考にIPoE接続とPPPoE接続を併用するためのフィルター設定をします。
これによりIPoE接続優先のPPPoEとの同時接続を行います。
[【RTX830】IPoE v6プラス+IPv4 PPPoEを併用してVPNする話。｜STK｜note](https://note.com/ks_ronronchi/n/nbf649ac2a8ea)

:::note info
ヒント
上記ページのフィルター番号で接続設定をしておくことをオススメします。
後述する拠点間VPNも行う場合、GUI上で2つのプロバイダー接続を行うと、
自動で設定されるフィルター番号のバッティングが発生するおそれがあります。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/31f617a6-4f02-509b-af99-6ae9ea480462.png)


2.PPPoEで、フィルター型ルーティング設定を行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/2a89290a-bab5-80b2-b03a-0520723d711d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/5deda6c5-ec40-5923-8448-e88da8584929.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/00934b81-f5f5-347d-c313-5af28f57c418.png)


3.NATディスクリプター設定を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/d84ae600-73e9-d73e-5d2a-ecd7c10b8e4b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/4bfbe54a-cd58-0abf-cfb1-bd63c3e766ab.png)

### デメリット
- 高すぎる。私が入手したときは2台で6.8万円しました。(2023年2月現在)
### メリット
- ルータが１台で済む。
- 特定のポートに対してのみゲートウェイを変えるということができるので、複雑な設定が可能となる（YoutubeはIPoE、P2PゲームはPPPoEなど）
- かっこいい。良い匂いがしそう。

# 雑談～～～～～～
### v4とv6が混在している日本の環境
現在のインターネットでは、IPv4 と IPv6 という、2種類の異なる方式のIPが利用されています。
IPv4を使って構築されているIPv4インターネットと、IPv6を使って構築されているIPv6インターネットという、
互いに異なる方式の2種類のインターネットが存在しています。
日本ではユーザが新規申し込みを行って提供されるサービスは、
NTT東西がIPv6を使って構築した通信網であるNGN網です。(2019～)

NGN網は、IPv6 インターネットとは切り離された閉域網になっています。
これは日本電信電話株式会社等に関する法律(NTT法)による制限により、NTT東西はユーザに対して直接インターネット接続サービスを提供できないので、
フレッツ網はIPv6インターネットとは直接やり取りができないような設計になっています。

### IPv4 PPPoE によるv4インターネット接続
ん？提供されるフレッツ網はIPv6閉域網なのにIPv4インターネットにはどうやって行くんだって話なんですけど、
そこでPPPoEという技術により、上記フレッツ網をトンネリングしてISPと接続し、その後ろにあるIPv4インターネットに接続します。

### IPv6 IPoE によるv6インターネット接続
IPv6 IPoE はISPがIPv6による通信データを直接扱わないという特徴があります。
NTT東西と契約してIPv6 IPoEによるインターネット接続を提供するのは、
VNEです。ISPは、VNEからIPv6 IPoEインターネット接続サービスの卸提供を受けて
自社のユーザに対してこれを自社のサービスとして提供します。

### 誰のせいでポートを共有するハメになっているのか
1分で描いた図が以下です。
IPv6トンネルの割当にMAP-Eという仕組みが使われており、ベースにNATが使われているらしい。
結果、ポートの共有も行われるハメになった。と。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/cfc84526-32fc-3fcd-ee08-26b46e2c7d65.png)


### v6プラスって何
v6プラスは、VNEであるJPNEが提供する、IPv6 IPoEによるインターネット接続サービスにプラスして、
IPv4インターネットへの接続サービスも使えるというサービスです。
v6プラスでIPv4パケットを運ぶIPv6トンネルには、MAP-Eという方式が採用されていて、
JPNEはそのパケットをBorder Relayという機器を通すことでIPv4インターネットへ接続できます。

### RTX830 2台による拠点間VPNも IPoE と PPPoE併用環境でできる....ってコト？！
できます。
L2TP / IPSec によるVPN接続にはudpでポート500, 1701, 4500 を開放する必要があるけど、
もちろんこれもv6プラスだと開放できないと思うので、これらをフィルターしてあげればOK。

[【RTX830】IPoE v6プラス+IPv4 PPPoEを併用してVPNする話。｜STK｜note](https://note.com/ks_ronronchi/n/nbf649ac2a8ea)

### フィルター型ルーティングの適用タイミングっていつ
最初、フィルター設定をPPPoEゲートウェイに設定したところで、PPPoEゲートウェイに接続優先度的に到達するのか...???
初期に到達するのはIPoEだから、そこにフィルター設定を設けるべきなのでは...
とか思ってたけど全然適用タイミングが違った。

公式リファレンスに記述がありました。そのまま引用します。
[NATディスクリプター機能 概要](http://www.rtpro.yamaha.co.jp/RT/docs/nat-descriptor/nat-abstruct.html)

>NATディスクリプター機能が動作するタイミングは、パケットをインターフェースへ送信するときと、インターフェースから受信するときです。
インターフェースの種類は問わず、LAN、PP、TUNNELインターフェースで動作します。
PP Anonymousインターフェースでも動作しますが、相手ごとにポリシーを変えることはできないので、使い方は限られます。
フィルタリングやルーティングとの位置関係は下図のようになっています。
特に、フィルタリングとNATディスクリプターの位置関係が重要です。
インターフェースへ送信するパケットは、先にフィルタリングの処理を受けてから、NATディスクリプターの処理を受けます。
逆に、受信するパケットは、NATディスクリプターの処理を先に受けます。
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/78ce157f-aaab-e5db-b4cb-f1f16cf2bd6f.png)

つまりout方向にパケットを送信するときは、送信先インタフェースの決定前にフィルターは一括で確認している。
逆にin方向では先にパケットのルーティングを決定してからフィルタを適用する。

# 参考
[NATディスクリプター機能 概要](http://www.rtpro.yamaha.co.jp/RT/docs/nat-descriptor/nat-abstruct.html)
[【RTX830】IPoE v6プラス+IPv4 PPPoEを併用してVPNする話。｜STK｜note](https://note.com/ks_ronronchi/n/nbf649ac2a8ea)
[【設定記録】ヤマハルーターのRTX830 ポート開放設定｜リスク・マネジメント委員会@一般社員｜note](https://note.com/security_iot/n/n5523b7c0159f)