自宅のネット回線がIPoE(IPv6)に変わったので自宅サーバにアクセスできず、サーバをIPv6化してみた

**※ご注意※**
**ここで実施する設定は本来想定されない使用方法であり、一般のご家庭などで実施された場合、情報漏洩やネットワーク機器の破壊等のリスクにさらされ、万が一には甚大な害を被る可能性が大いにあります。
あくまで専門的な知識と対処法をわきまえ、自己責任の上で以降をお読み下さい。**


## :link: 背景

我が家ではプロバイダーのOCN社のOCN光を契約してインターネット回線を引いています。この度この回線において、2020年6月に従来のPPPoE通信方式からIPoE通信方式に変わりました。

この変更で、HGW(ホームゲートウェイ)として使用している終端装置「NTT PR-400MI」のファームウェアが急に自動更新され、今までWAN(外出先などの外のインターネット)から接続できていた自宅サーバに接続できなくなりました。

PPPoEによりIPv4形式でインターネット回線と接続し外出先から自宅サーバにアクセスしていましたが、IPoE(IPv6)に切り替わり、IPv6形式でしか外出先から接続できなくなってしまったのです。

さらに、自宅ネット環境ではIPv4グローバルIPアドレスで受けたパケットをHGWのNAPT(IPマスカレード)を使用してLAN側のサーバにパケットを分配していたのですが、ファームウェアの更新でNAPTの機能が使用できなくなりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/4d66bb35-3e55-c9a2-6c6f-eb156f75d0f7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/04eec15b-0277-baa1-c304-822439bad23d.png)



## :link: この記事で目指すもの

新しいインターネット回線環境(IPoE)では、HGW配下の各ノードにIPv6アドレスが割り当てられます。このIPv6アドレスへ外出先からアクセスできるようにしてサーバ公開をすることにしました。

この記事では、細かい用語や設定内容までは踏み込みませんが、IPv6を利用したネットワーク環境とサーバ公開の概要などをご紹介できればと思います。

## :link: IPoE(IPv6)とは何か?

詳細な説明は専門書に譲ります。ここでは、主な特徴を箇条書きに記します。

1. IPoE方式は設定が簡単で複雑な機器が不要で、シンプルにインターネットへ接続できる。
2. 通信規格が「イーサネット」(Ethernet)で直接インターネットに接続するため、「ネイティブ方式」と呼ばれる。
3. PPPoE方式に比べて接続設備の大容量化など、通信設備に関してゆとりを持たせた設計になっており、安定した通信を実現している。
4. PPPoE方式はIDとパスワードによるユーザー認証が必要である一方、IPoE方式ではアクセスしてきた回線による回線認証のみでIDとパスワードによる認証は不要。
5. IPv4アドレス形式では、グローバルアドレスを持つWAN側のネットワークと、社内や宅内にプライベートアドレスを配置したLAN側のネットワークとの区別があったが、IPv6形式ではそれがない。すべての接続ノードに対してグローバルなIPv6アドレスが振られる。
6. IPv6グローバルアドレスはISP(インターネットサービスプロバイダー)からプレフィックス(IPv6アドレスの前方固定文字列)が与えられ、このプレフィックスと、自己マックアドレスから生成した文字列を結合してIPv6アドレスを生成する。
7. 全てのノードにIPv6アドレスが割り振られ、理論的にはインターネットからどのノードにもアクセスできる。ただし、それではセキュリティに問題があるため、HGWで配下のノードに対してアクセスできないようにパケットフィルタリングを行い、防衛する。
8. IPv6形式同士のノードが直接通信するには、相手もIPv6形式に対応している必要がある。

以下のサイトも参考情報となりますので、ご参考にして頂ければと思います。
▼IPoE接続とPPPoE接続との違い(NTT Comunication)
https://www.ntt.com/business/services/network/internet-connect/ocn-business/bocn/knowledge/archive_13.html



## :link: IPoE(IPv6)接続すると何が起こっているのか?

IPoE環境でIPv6アドレスを取得して接続している場合、どのような状態になっているでしょうか?「ipconfig」(Linux系の場合は「ifconfig」)コマンドで確認してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/99bb2dc2-ee90-80ab-b186-fec82fd502a1.png)


黄色下線部分がIPv6アドレスで、自動的に設定されています。
一時IPv6アドレスというのは、セキュリティ面を考慮しノードの位置を隠ぺいするために一時的に使用されるアドレスです。

IPv6アドレス形式でネットワークに接続した場合、IPv6アドレスの設定やDNSの設定が行われます。この仕組みについて説明します。(ただし、IPv6アドレスの一般的な流れです。プロバイダーやシステムの様式により多少異なります)


IPv6形式でネットワークにつながる際の一連の手続きを「IPv6アドレス自動設定(IPv6 addressing)」と呼びます。

IPv6アドレス自動設定は、ノードが自分のIPv6アドレスをルータに通知する**RS(Router Solicitation)：ルータ要請**と、ルータから定期的なアドレス配布を行う**RA(Router Advertisement)：ルータ広告**という仕組みで実行されます。
IPアドレスの設定が行われた後は、DNSサーバの設定が行われます。

上記の自動設定は一般的な流れです。
実際には以下の3種類の方式があります。

　**1. テートレス自動設定**
　**2. ステートフル自動設定**
　**3. DHCPv6-PDによるIPv6アドレス配布**

これらの説明については割愛します。以下のサイトに詳細の説明が書かれています。

▼IPv6 addressing - Stateless / Statefull / DHCPv6
https://www.infraexpert.com/study/ipv6z5.html

これに関して、NTT東日本・NTT西日本のフレッツ光ネクスト回線では、以下のような案内がWEBサイトに書かれていました(2020/07/07現在)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/778c0704-497c-93cd-d09b-7da7eeb3ba06.png)

我が家では、OCN光(ひかり電話あり)の契約なので上図の後者にあたります。
よって、IPv6アドレス自動設定はDHCPv6-PD(prefix delegation)によることがわかりました。

我が家のIPv6アドレス自動設定後のネットワークは下図の構成となりました。
(IPv6アドレスは仮のものです)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/449e64ee-2e6e-390b-5814-aa48d8977cbe.png)



## :link: パケットフィルタリングによるセキュリティとポートの開放

このパケットフィルタリングは、ファイアウォールと言ったりもします。上掲のアクセス経路図内の「フィルタリング」と記載した部分です。

「IPoE(IPv6)とは何か?」章の7.で書いたセキュリティについて把握する必要があります。
IPv6アドレスを取得すると、インターネット上からそのアドレスに対してアクセスできることになります。つまり、インターネットにさらされるわけです。

この危険性から守るために、標準の設定ではインターネットからアクセスできないようにHGWにパケットフィルタリング設定がされています。
逆に言うと、このフィルタリング設定において、自宅サーバにアクセスする経路を開けておく必要があります。これを「ポートの開放」と言ったり、「穴を開ける」と表現したりします。

我が家で使っているHGWでは、以下がその設定画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/8633f8f6-0e7d-fff3-159f-642b4316625f.png)


例えば、自宅サーバにSSH接続できるようにしたい場合は、以下の項目について設定を登録します。(IPv6アドレスは仮のものです)

>宛先IPアドレス：2400:4052:16a2:7500:aaa1:bbb1:ccc1:ddd1
>プロトコル：TCP
>宛先ポート番号：22

では、具体的に設定を行っていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/c836f036-be20-e66d-7af1-be5c246c31f2.png)


これでポートの開放ができました。

## :link: 外出先から自宅サーバにアクセスしてみる

これまでの設定で、自宅サーバにアクセスするためのIPv6アドレスと、経路設定である「ポートの開放」が終わりましたので、これで自宅サーバにアクセスする準備が整いました。

そこで、実際に外のインターネット環境から自宅サーバへアクセスし、接続できるかどうかを試してみます。

ここで注意点があります。

**自宅サーバはIPv6アドレスを割り当てられており、相互のIPv6通信でないとアクセスできない**点です。
例えば、カフェなどの公衆無線LAN(Wifi)からインターネットに接続したとしても、その公衆無線LANがIPv4しかサポートしていない場合は、自宅サーバへ通信できません。これについては、ipconfigコマンド(Linux系はifconfigコマンド)でネットワーク状態を表示したときに、IPv6アドレスが配布されているかどうかを確認すればわかります。

例を見てみましょう。
以下のIPアドレス配布状態を見てください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/f8ffa6ee-2aec-44ba-cf67-11d134b8c4ff.png)

このネットワークでは、WANに対してはIPv4アドレスしか取得できていません。
リンクローカルIPv6アドレスというものがありますが、これは同一セグメント上の他の端末と通信する場合に使用するIPv6アドレスで、インターフェース機器が自動で生成したアドレスです。
このような状況では、IPv6インターネットに接続できません。

また、スマートフォンでテザリングによりインターネットに接続する方法もありますが、IPv6接続に関しては同様です。Androidの場合は、Android Version7以降でないとIPv6接続に対応していないようです。

下図は、IPv6接続環境で自宅サーバにSSH接続する様子です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/222ed38c-cc48-71c6-5e40-fc5b05d7d9ff.png)


無事に接続できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/f7832531-caed-d739-ea87-3e95f5b8da08.png)


## :link: 補足

今回の我が家の例では、IPv4形式によるインターネット回線接続のPPPoEが完全にIPoEに切り替わり、IPv4形式による接続ができなくなった例でしたが、IPv6 PPPoE方式（トンネル方式）が選択できるプロバイダであれば、引き続きIPv4形式による接続もできるようです。

これに関しては、以下のサイトを書かれている方により詳しく説明がありますので、併せてご覧下さい。

▼薩摩藩中仙道蕨宿別邸
https://satsumahomeserver.com/blog/14132


## :link: ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。