IPv6でサーバーを外部に公開する方法

インターネット

v6プラスでのポート開放を説明した記事が人気だったので、当記事ではIPv6でサーバーを公開する方法を説明します。

Minecraft JavaEditionを想定して話を進めますが、もちろん他のサーバーソフトウェアにも応用できます。

IPv6基礎知識

IPv6でポート開放?

まず、IPv6にはポート開放という概念がありません!

IPv4ではLANごとにグローバルIPアドレスが割り当てられるのに対し、IPv6ではLAN内の機器ごとにグローバルなIPアドレスが割り当てられます。
つまり、IPv6インターネットに接続されている機器は全て全世界で通用する固有のグローバルなIPアドレスを持っています。

従ってグローバルIPアドレスと公開ポート番号をローカルIPアドレスとポート番号に変換する必要が無いため、NAPT(ポート開放に関わるもの)を基本的に利用しません。
(NAPTを利用する場合はポート開放を行いますが、IPv6でNAPTを使う状況は非常に特殊です。)
その代わりにルーターのパケットフィルターの設定(後述)をします。
NAPTについては、ポート開放について解説している以下の記事で説明しています。

「IPv6 ポート開放」と調べるといくつかの記事が出てきますが、これらはIPv6とIPv4の併用環境において、IPv4でポート開放を設定する方法を紹介しているのであって、IPv6そのものとは関係がありません。

以下の記事は、v6プラス(MAP-E)というIPv4とIPv6の併用環境において、IPv4でポート開放する方法を説明している記事です。

IPv4とIPv6は互換性が無い

IPv4とIPv6は互換性が無く、直接相互通信することはできません。
つまり、IPv6のユーザーがIPv4のサーバーにアクセスしたり、逆にIPv4のユーザーがIPv6のサーバーにアクセスしたりすることはできません。

現在のインターネットはIPv4とIPv6の通信が混在していますが、ユーザーが意識せず両方を利用できるのは、ISPが提供するIPv4・IPv6共存技術と、サーバー側のIPv4・IPv6対応のおかげです。

したがって、IPv6オンリーのサーバーを構築した場合、接続できるのはIPv6を利用しているユーザーだけです。
IPv4オンリー(従来のポート開放をして公開する)サーバーは、ほぼ誰でも接続できます。(IPv6を利用できる場合、ほぼ必ずIPv4通信も利用できるため)
しかし、IPv6オンリーのサーバーはIPv6に対応していないIPv4ユーザーは接続することができません。
IPv6に対応するサーバーを構築する場合、多くの場合IPv4にも対応します。
ということで、実はIPv6に対応するメリットはほとんどありません。

IPv6オンリーのサーバーが有効なのは、以下の条件を満たすときです。

  • 固有のIPv4アドレスが割り当てられず、ポート開放できない
  • 接続するユーザーが全員IPv6に対応している(少人数の友人など)

※v6プラスは複数契約者が同じIPv4アドレスを共有していますが、割り当てられたポート番号ならポート開放できます。

IPv6におけるグローバルなIPアドレス

IPv6において、IPv4のグローバルIPアドレスに相当するものは「グローバルユニキャストアドレス(GUA)」、ローカルIPアドレスに相当するものは「ユニークローカルユニキャストアドレス(ULA)」となります。
わかりやすさのため、以降はGUAを(IPv6における)グローバルIPアドレスと表記します。(正確な用語ではありません)

IPv6アドレスはIPv4アドレスと同様に、Windowsの場合「ipconfig」コマンドで確認できます。

「IPv6 アドレス」と「一時 IPv6 アドレス」がグローバルIPアドレスです。
一般家庭のルーターではULAは自動で割り当てられませんが、手動で設定することもできます。

普段の通信では、再起動等で変動する「一時 IPv6 アドレス」を用います。
これは、発信者の特定を困難にしてプライバシーを保護するためです。

一方、サーバーを構築する場合はIPアドレスが変動すると困るので、変動しない「IPv6 アドレス」を用います。
IPv4のローカルアドレス同様に、手動で任意のIPv6アドレスを設定することもできます。

IPv6アドレスの構造

IPv4アドレスは、ご存じの通り0~225(10進数表記 8bit)の数字をドット「.」で4ブロックに区切った形式(合計 32bit)です。
IPv6アドレスは、0000~ffff(16進数表記 16bit)の数字をコロン「:」で8ブロックに区切った形式(合計 128bit)です。

IPv6アドレスの上位(左側)4ブロックはサブネットプレフィックス、下位(右側)4ブロックはインターフェース識別子と呼ばれます。

サブネットプレフィックスは、インターネット契約しているLANごとにISPから割り当てられる固有の数字です。(ユーザーが勝手に指定することはできません)
インターフェース識別子は、個々の機器で重複しないように自由に設定可能な数字です。(手動設定できるのはこの部分です)

IPv6でMinecraftのローカルサーバーを構築する

サーバー機と同じPCから接続

早速ですが、IPv6対応のMinecraftサーバーを立ててみましょう。

IPv6対応といっても、サーバー環境がIPv6通信に対応しているのならMinecraftサーバーは何も設定する必要はありません。
普通にMinecraftサーバーを起動します。(今回は公式server.jarを用いています)
他のサーバー(Webサーバーなど)では追加の設定が必要になるかもしれません。

サーバー参加時の「サーバーアドレス」は「localhost」の代わりに「::1」を指定します。

「localhost」は「::1(IPv6)」と「127.0.0.1(IPv4)」の両方を指し示しますが、Minecraftの場合IPv4が優先されるため、「::1」を接続先に指定することでIPv6で接続しています。

接続に成功すると、サーバーログにIPv6アドレスが表示されます。

サーバー機と別のPC(同一LAN内)から接続

IPv4とIPv6でファイアウォールの設定が別々の場合があるので、適切に設定されているか確認して下さい。
サーバー機と同じPCから接続できて、同一LAN内の別のPCからは接続できない場合、ファイアウォールが原因の場合が多いです。

「サーバーアドレス」に「IPv6 アドレス」を入力して接続します。
接続に成功すると、サーバーログに参加ユーザーのIPv6一時アドレスが表示されます。

ローカルサーバーを外部に公開する

では、次に外部(WAN側)からサーバーに接続できるようにしましょう!

最初のほうに、IPv6では個々の機器にグローバルIPアドレスが割り当てられているためポート開放は不要と書きました。
ですが、そのままでは外部から自由にアクセスできてしまうため、ルーターにはパケットフィルタリング機能がついており、外部からの通信を拒否するように設定されています。
IPv6ではポート開放の代わりにパケットフィルターの設定をする必要があります。

パケットフィルターの設定

Buffaloの「WXR-1750DHP2」ルーターにおける設定を紹介します。
他のルーターでも同様に設定できるはずです。

①ポート開放と同様にルーターの管理画面(私の環境では http://192.168.11.1/)にログインします。

②「詳細設定」を選択します。

③左のメニューから「セキュリティー」→「IPv6フィルター」を選択します。

④以下のように入力して「追加(先頭or終端)」をクリックします。

動作通過
方向Internet->LAN
IPアドレス送信元: 空白
宛先: サーバーのIPv6アドレス
プロトコル任意のTCPポート 25565

「プロトコル」を「全て」にすると外部が自由に通信できてしまうため、絶対に特定のポート番号のみ許可しましょう

これで設定は完了です。

パケットフィルターの設定を確認

ポート開放の確認と同じ手順ですが、多くのWebサービスはIPv4のチェックのみに対応しているので、IPv6でチェックできるサービスを利用しましょう。

当然ながらMinecraftサーバーを起動した状態で確認する必要があります。

パケットフィルターの設定が適切に行われていれば、Successと表示されます。

外部から接続する

LAN内から接続するときと同様に、「サーバーアドレス」に「IPv6 アドレス」を入力して接続します。
他のユーザーにもこのアドレスを伝えましょう。

まとめ

当記事ではIPv6でのサーバー公開方法を解説しました。

  • IPv6ではポート開放の代わりにパケットフィルターの設定をする
  • IPv6サーバーはIPv6ユーザーのみ接続できる
  • 接続アドレスは、グローバルユニキャストアドレス(GUA)を用いる

コメント

タイトルとURLをコピーしました