投稿カテゴリー:自宅サーバ投稿コメント:0件のコメントこの記事は技術同人誌「きつねまち1」に収録しています。ちゃんこと佐々木です。先日、自宅ネットワークのルータを買い換えて、IPv6対応となりました。通信速度が上がって万々歳でしたが、1つ問題が。うちは自宅webサーバを動かしています。この自宅サーバに対して、IPv4環境からアクセスできなくなってしまいました。IPv6(IPoE)用ルータとIPv4(PPPoE)用ルータの2台構成にすることでなんとか問題解決となったので、詳細を書き記しておきます。背景・環境うちには自宅webサーバがあります。常時電源ONで、ラックみたいな置き場に置いています。Ubuntuの上でWordPressが動いていて、外向けにブログを公開しています。本記事もこのサーバから提供しています。先にリンクを張りましたが、回線自体はIPv6対応済みで、ルータをIPv6対応のものに交換したことでIPv6が疎通しました。WSR-3200AX4Sその他、自作PCやスマホPixel3などの端末が有線や無線でインターネット接続しているルータ交換前ネットワーク図IPv4しか使えなかった頃です。ルータのNAPT機能を使用し、宛先ポート番号が80番(http)・443番(https)のアクセスは自宅webサーバに向くように設定しています。今回の問題が起きていた環境です。機器的にはルータが代わっただけですね。外からIPv6で繋げられる環境では自宅webサーバにアクセスできたはずですが、IPv4だと繋がりません(「はず」としたのは、外からIPv6接続を確認できる機器がなかったため)。実はIPv6環境下(厳密にはMAP-E環境下?)では使えるポートに制限がかかります。webサーバですので、当ブログを閲覧しようとした人はhttpの80番ポートやhttpsの443番ポートを宛先ポート番号としてアクセスを試みますが、恐らくプロバイダ管理の機器で弾かれてしまいます。80や443といったwell-knownポートが弾かれるのは何かの間違いでは!?と思ったのですが、正しいっぽいです。してIPv6環境下でポート制限をかけているかというと、IPv6環境下でIPv4通信するときの接続端末の特定には「IPv4+ポート番号」が使われるからです。ポート番号も端末特定に必要なので、ポート番号の管理もプロバイダ側持ちとなり、人によって使えるポートが異なることとなり、筆者のところには80や443が割り振られないこととなったのですね。別の言い方ですと、IPv4環境では端末の特定は単にグローバルIPv4アドレスだけでしたが、IPv6環境ではIPv4アドレス単体でグローバルとは呼べなくなりました。MAP-E限定かもですが、IPv6アドレスとIPv4アドレス+使用可能ポート群は1:1で紐づいています。IPv6アドレスからIPv4アドレス+使用可能ポートを引けるサイトもあります。ここでちょっとよく分かっていないことがあって、「IPv6環境下のポート制限はIPv6アドレスにも適用されるか?」ということです。表にすると以下になります。ポート制限あり?なし?たぶん、「ポート制限なし」だとは思っています。IPv6は割り振れる数が潤沢で、端末ごと(厳密にはインターフェースごと?)にグローバルIPアドレスが割り振られるので、端末の特定はポート番号を使用せずできますからね...。いろいろなサイトを見て、使用できるポートに制限がかかることは分かったのですが、それがIPv4通信のみに適用されるのかIPv6通信にも適用されるのかまでは書かれていなくて、明確には分かりません。IPv6でhttp(s)アクセスを受付できているので、きっと「書くまでもなくIPv4のみ」ってことなんだろうなぁ...。対策案IPv6環境下でIPv4でも自宅サーバを公開するためには、以下の方法があります。自宅サーバとのIPv4通信は今までどおりPPPoEセッションを使用するルータを2台用意し、片方をPPPoE専用とする案サーバが自力でPPPoEセッションを張る案サーバ側でPPPoEの設定をする(サーバがPPPoEルータを兼ねるイメージ)サーバにあらゆるアクセスが来るため、ファイアウォール設定もして必要な通信だけ通るように防御するIPoEとPPPoEの両方をさばける高機能ルータを使うヤマハの数万円のルータが対応しているらしい?やったことサーバが自力でPPPoEセッションを張るための設定が難しそうだったため(PPPoEとIPoEの自動切り替えとか)、「ルータを2台用意し、片方をPPPoE専用とする案」を採用しました。手元に残していた交換前のルータをPPPoE用に転用することにしました。最終的に、以下のネットワーク図の構成となりました。新旧2つのルータを使用しています。新しい方のルータがメイン的な立ち位置で、IPoE通信はこのルータで処理し、配下の端末に流します。PPPoE通信は新しいルータにはスルーさせ、古いルータに処理させます。2台のルータ間には2本のLANケーブルで結ばれており、ループ感がありますが、「新ルータの配下の単なるアクセスポイント」としてのIPoE線と、旧ルータのWANポートに入り旧ルータでルーティング処理させるPPPoE線で仕事が分かれています。「使用する通信規約と通信する端末ごとの通信方式表」も用意しました。左が通信規約、上が通信端末です。通信相手の端末やそこまで到達するための経路が全てIPv6対応しているなら「IPv6」が、それ以外は「IPv4」が自動で採用されます。IPoEIPv6で通信できる場合は、家の普通のPC・スマホの通信も自宅サーバの通信もIPoEを通ります。それができない場合はIPv4で通信しますが、家の普通のPC・スマホの通信はIPv4でもIPoEの中を通し、自宅サーバの通信はPPPoEを通すようにします。IPoEを通せるものは極力IPoEを通すことで、なるべく高速通信が適用されるようにしています。見栄えがよくないですが、写真も撮ってみました。左端がONU、その右が新ルータ、一番右が旧ルータ。ルータの設定ルータが2台になりますが、両方ともDHCP機能がONだと、ネットワーク内でIPアドレスが重複してしまい、うまく通信できません。DHCP機能はIPoEルータだけにおまかせするようにしましょう。ルータ自身のIPアドレスが2台で重複しないようにも注意してください。私は見事にやらかしましたのでね...。明示的に指定しましょう。IPoE用ルータポイントは以下2点です。PPPoEパススルー機能をONにしてPPPoE通信はPPPoEルータに流すDHCP機能はONのままだが割り振るアドレスを厳しめに制御するスクリーンショット撮りました。IPアドレス取得方法はOCNバーチャルコネクト指定です。自動だとインターネット@スタートになると思いますが、直接指定の方がいいかなーって。あと、MACアドレスの変更もここでできますが、IPoE側はそのままにしています。PPPoE接続の設定はなし。IPv6接続方法はあまりよく分かっていませんが、とりあえずセキュリティ的に「NDプロキシ」が良いらしく、これで。