「v6プラスにしたらポート開放ができなくなった」という話をよく聞くが、これは半分だけ正しい。MAP-E方式では割り当てられた240個のポートに限ってポート開放ができる。
制限の中身と、実際に使えるポート番号の調べ方をまとめる。
なぜ制限があるのか
MAP-Eでは1つのグローバルIPv4アドレスを複数の契約者で共有している。同じIPアドレスを何人かで使う以上、ポート番号も分け合う必要がある。
その結果、1契約あたりに割り当てられるのが240個になる。
DS-Lite方式はそもそもユーザ側にグローバルIPv4アドレスが割り当てられないため、ポート開放は一切できない。この点でMAP-Eのほうが自由度は高い。
使えるポート番号のルール
割り当てられるポートは連続した番号ではなく、16個ずつの連続した範囲が15セットという形で飛び飛びに配置される。合計で240個になる。
どの範囲が割り当てられるかは、契約者のグローバルIPv6アドレスによって決まる。ルールはRFC7597で定義されている。
0〜1023番のWell-knownポートは、どのIPv6アドレスであっても割り当てられない。したがって、以下は使用できない。
| ポート | 用途 |
|---|---|
| 80 | HTTP |
| 443 | HTTPS |
| 25 | SMTP |
| 22 | SSH |
| 53 | DNS |
Webサーバやメールサーバを公開したい場合、MAP-Eでは実現できない。この用途では固定IP契約が必要になる。
自分に割り当てられたポートを調べる
グローバルIPv6アドレスから計算できるが、手計算は現実的ではない。MAP-E方式の使用可能ポートを確認できるWebツールが公開されているので、それを使うのが早い。
割り当ての当たり外れはない。どのIPv6アドレスでも240個で、Well-knownポートは含まれない。
ポート開放の設定例
ヤマハルータの場合
外側9980番を、内側の192.168.100.2の同ポートへ転送する例。
nat descriptor masquerade static 1200 1 192.168.100.2 tcp 9980
ip filter 201001 pass * 192.168.100.2 tcp * 9980
NATディスクリプタ番号は、外側アドレスがMAP-Eのものを指定する。GUIの「詳細設定 > NAT > NATディスクリプターの一覧」から確認できる。
外側と内側でポート番号を変えることもできる。内側80番のWebサーバを、外側9090番で公開する場合は次のようになる。
nat descriptor masquerade static 1200 1 192.168.100.2 tcp 9090=80
これで http://グローバルIPv4:9090/ でアクセスできる。内側は80番のままでよいので、サーバ側の設定を変える必要はない。
対応状況の注意点
IPv6が使えていても、v6プラスとは限らない。
「ぷららv6エクスプレス」はOCNバーチャルコネクトで、v6プラスとは別のサービスになる。同じMAP-E方式なので理論上は同じことができるはずだが、ルータの設定画面が異なり、機種によってはポート開放できないことがある。
契約しているサービス名を先に確認すること。
ポートが枯渇することがある
240個という数字は、ポート開放だけでなく通常の通信でも消費される。
NATセッションが大量に張られると240個を使い切り、新規の接続ができなくなる。名前解決がタイムアウトしたり、インターネットに繋がらなくなったりする。
ヤマハルータには「ポートセービングIPマスカレード」という、少ないポートで多くのセッションを扱う機能がある。ただしTCPにのみ適用され、UDPには効かない。UDPを多用する環境(コンテナ環境、大量のDNSクエリなど)では枯渇が起きやすい。
家庭での通常利用ならまず問題にならないが、自宅にサーバやKubernetesクラスタを置いているような環境では現実に起こりうる。
まとめ
| やりたいこと | MAP-Eで可能か |
|---|---|
| ゲームのポート開放(ポート指定自由) | ○ |
| NAS・監視カメラの公開(ポート番号を選べる) | ○ |
| Webサーバの公開(80/443) | × |
| メールサーバの運用 | × |
| 大量のUDPセッションを張る | △(枯渇の可能性) |
80番や443番が必要なら、固定IP契約に切り替えるのが唯一の解決策になる。