【工事中のお知らせ】 現在、ウェブサイトの多言語対応および機能拡張のため、改修作業を行っております。このため、一部のコンテンツやUIが一時的にご利用いただけない場合がございます。改修後には、再び全てのコンテンツと機能をご利用いただけますので、どうぞご安心ください。ご不便をおかけしますが、何卒ご理解のほどよろしくお願い申し上げます。

IPv6設定ガイド:Nginxでの設定方法とメリット

IPv6設定ガイド:Nginxでの設定方法とメリット

2024年3月14日

IPv6の設定方法は、結論から言うと、Nginxなどのサーバー設定ファイルのポート番号の前に [::]: を追記する、というものになります。具体的には、[::]:80や[::]:443といった具合です。詳しい手順を以下で説明します。

IPv6の設定方法

IPv6の設定方法は、NginxとApacheとで少し異なりますが、基本的な手順は似ています。以下に、NginxでIPv6を設定する方法を示します。

なお最新の設定手順については

Nginxの公式ドキュメントの当該ページ

も参照するようにしてください。

NginxでのIPv6の設定

1. Nginxの設定ファイルを編集する

NginxでIPv6を有効にするには、サーバーブロック内の**listen**ディレクティブにIPv6アドレスを追加します。設定ファイルは通常、/etc/nginx/sites-available/ディレクトリ内のドメイン名に関連するファイルです。

基本的な原則は、IPv6での通信を扱う場合、listen [::]:ポート番号; と書き、IPv4での通信を扱う場合、listen ポート番号;の形で書きます。ポート番号はHTTP通信の場合80ですし、HTTPS通信の場合443となり、それぞれ書く必要があります。HTTPSは必須ですので、接続をListenするポート指定は、基本的には4つ書くことになります。

具体的には、以下が基本的な構成です。

  1. ポート80でのIPv4通信(HTTPでのIPv4): listen 80;
  2. ポート80でのIPv6通信(HTTPでのIPv6): listen [::]:80;
  3. ポート443でのIPv4通信(HTTPSでのIPv4): listen 443;
  4. ポート443でのIPv6通信(HTTPSでのIPv6): listen [::]:443;

以降で具体的に見ていきましょう。

【ポート80でのIPv4とIPv6の設定】

server {
    listen [::]:80; # [::]:をポート番号80の前に追加。IPv6での通信を扱う。
    listen 8080; # IPv4での通信を扱う。
    server_name example.com; # サーバー名を設定
    # ...その他の設定...
}

この設定は、ポート80でIPv6接続を受け付けるようにNginxを設定します。対応範囲を最大にするため、IPv4とIPv6の両方をListenするデュアルスタックでの設定です。listen 80;でIPv4通信を、listen [::]:80; でIPv6通信を、対応しており、両方(デュアル)の通信形式に対応できます。

【ポート443でのIPv4とIPv6の設定】

HTTPS対応する場合ポート443を使いますから、ポート443でもIPv6接続を受け付けるようにするには、以下のようにポート443の前に[::]:を追記します。

server {
    listen [::]:443; # [::]:をポート番号443の前に追加 IPv6での通信を扱う。
    listen 443; # IPv4での通信を扱う。
    server_name example.com; # サーバー名を設定
    # ...その他の設定...
}

こちらも同じくデュアルスタックでの設定となり、listen 443;でIPv4通信を、listen [::]:443;でIPv6通信を、対応しており、両方に対応できます。

Nginxの設定をテストする

設定ファイルを編集した後、構文が正しいかどうかを確認します。

sudo nginx -t

Nginxを再起動する

設定に問題がなければ、Nginxを再起動して変更を適用します。

sudo systemctl restart nginx

【IPv6のみの設定とデュアルスタック(IPv4とIPv6の併用)について】

上記の手順はIPv4とIPv6の両方での通信を受け付ける設定です。これは通称デュアルスタックと呼ばれます。一方IPv4での通信を排除し、完全にIpv6のみでの通信を行いたい場合、ipv6only=onを追記し設定する必要があります。具体的には以下のようになります。

【ポート80でのIPv6のみでの設定】

server {
    listen [::]:80 ipv6only=on; 
    # listen 80;が削除されている、これはipv4での通信を排除するため。
    server_name example.com;
    # その他の設定...
}

listen [::]:80がIPv6での通信対応、listen 80;がIPv4での通信対応をハンドリングするため、IPv4を排除しIPv6のみでの通信を行うためには、listen 80;の行を削除する必要があります。その上で、listen [::]:80;の行に ipv6only=on を追記し、listen [::]:80 ipv6only=on; とします。これにより、IPv6のみでの通信を強制できます。

【ポート443でのIPv6のみでの設定】

server {
    listen [::]:443 ipv6only=on; 
    # listen 443;が削除されている、これはipv4での通信を排除するため。
    server_name example.com;
    # その他の設定...
}

listen [::]:443がIPv6での通信対応、listen 443;がIPv4での通信対応をハンドリングするため、IPv4を排除しIPv6のみでの通信を行うためには、listen 443;の行を削除する必要があります。その上で、listen [::]:443;の行に ipv6only=on を追記し、listen [::]:443 ipv6only=on; とします。これにより、IPv6のみでの通信を強制できます。listen 443;を削除することで、IPv4での通信をListenしないわけです。

IPv6対応のサーバー構成ファイルを自動生成する方法:Mozilla SSL Configuration Generator

Mozilla SSL Configuration Generatorを使うことでIPv6に対応したサーバー設定テンプレートを簡単に生成することができます。

Server Softwareから当該サーバーソフトを選択し、Mozilla ConfigurationからModernもしくはIntermediateを選択することで、可能です。以下は、最も汎用性が高い、Intermediateで生成した例です。

Mozilla SSL Configuration Generator IPv6対応コード Nginx Intermediate設定 80と443の両方でIPv6対応のデュアルスタック

# generated 2024-03-11, Mozilla Guideline v5.7, nginx 1.17.7, OpenSSL 1.1.1k, intermediate configuration
# https://ssl-config.mozilla.org/#server=nginx&version=1.17.7&config=intermediate&openssl=1.1.1k&guideline=5.7
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
    ssl_dhparam /path/to/dhparam;

    # intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    # verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

    # replace with the IP address of your resolver
    resolver 127.0.0.1;
}

IPv6とは何か

IPv6(Internet Protocol version 6)は、インターネット通信で使用されるプロトコルの一つで、インターネットプロトコル(IP)の新しいバージョンです。IPv6は、IPv4が抱える問題点を解決するために開発されました。主な特徴として、以下の点があります:

  1. アドレス空間の拡大: IPv4では約43億のIPアドレスしか提供できませんでしたが、IPv6では128ビットのアドレス構造を採用しており、約340澗(3.4×10^38)個のユニークなIPアドレスを提供できます。これにより、インターネット接続デバイスの増加に伴うIPアドレス不足の問題を解決しています。
  2. セキュリティの強化: IPv6では、IPsec(IP Security)がプロトコルの一部として組み込まれており、データの暗号化や認証が標準でサポートされています。これにより、通信の安全性が向上します。
  3. パケット処理の効率化: IPv6ではヘッダーの構造が簡素化されており、ルーターでのパケット処理が効率的になっています。また、IPv6ではフラグメント化の処理が送信元で行われるため、ネットワークの負担が軽減されます。
  4. 自動設定機能: IPv6には、ステートレスアドレス自動設定(SLAAC)など、デバイスが自動的にIPアドレスを割り当てる機能があります。これにより、ネットワーク管理者の設定作業が軽減されます。

IPv6の導入は徐々に進んでいますが、まだ全てのネットワークやサービスで広く採用されているわけではありません。IPv4とIPv6は直接互換性がないため、移行期間中はデュアルスタックと呼ばれる技術を使って、両方のプロトコルを同時に使用する場合が多いです。

IPアドレス枯渇問題とセキュリティの向上

IPアドレス枯渇問題とセキュリティの向上という観点からIPv4とIPv6を考えると、次のように理解できます:

IPアドレス枯渇問題

IPv4:

  • IPv4アドレスは約43億個のみであり、インターネットの急速な拡大によりアドレスの枯渇が進んでいます。これはインターネットの成長に制限をもたらし、新しいデバイスやサービスのオンライン接続に障害を生じさせる可能性があります。
  • アドレス枯渇に対応するために、ネットワークアドレス変換(NAT)が広く使われていますが、これは一時的な対策に過ぎず、セキュリティや接続性の問題を引き起こすことがあります。

IPv6:

  • IPv6は128ビットのアドレス長を持ち、ほぼ無限に近いアドレス空間(約340澗)を提供します。これにより、IPアドレス枯渇の問題は根本的に解決され、将来的にはどんなに多くのデバイスがインターネットに接続されても十分に対応可能です。
  • IPv6の広範な導入は、インターネットの成長を持続可能にし、新しい技術やサービスの発展を促進する基盤を提供します。

セキュリティの向上

IPv4:

  • IPv4ではセキュリティは後付けの概念であり、IPsecなどのセキュリティプロトコルはオプションとして追加されました。これにより、セキュリティはネットワークの設計や設定に大きく依存することになります。
  • NATの使用はプライベートネットワークを一定程度保護しますが、エンドツーエンドのセキュリティや透過性には問題があります。

IPv6:

  • IPv6は設計段階からセキュリティを重視しており、IPsecがプロトコルの必須部分として組み込まれています。これにより、データの機密性、完全性、認証が保証され、より安全なインターネット通信が可能になります。
  • IPv6ではNATの必要性が低減されるため、エンドツーエンドの接続性とセキュリティが改善されます。デバイス間の直接的な通信が容易になり、セキュリティポリシーと監視が効果的に実施できるようになります。

総じて、IPv6はIPアドレス枯渇の問題を解決し、インターネットのセキュリティを向上させることで、インターネットの未来を支えるための重要なステップとなります。ただし、IPv6への完全な移行は世界的な努力と時間を要するため、中期的にはIPv4とIPv6が共存する状況が続くと予想されます。

日本の上場企業のウェブサイトのIPv6対応率:9.53%

日本の上場企業のウェブサイト3715件のTLS1.3対応状況についての調査によると、 日本の上場企業のウェブサイトのIPv6対応率は9.53%となっています。9割が未対応という状況です。(2023年7月時点)

出典: 日本の上場企業3715社の公式サイトのSSL/TLSセキュリティ脆弱性ダッシュボード

業界別のIPv6対応状況は以下のようになります(画像右から2番目のis_ipv6_on列がIPv6に対応しているか否かを示します)。

最もIPv6対応率の高い石油石炭業界で27%であり、他はそれ以下といった状況です。

機密性の高い情報を扱う業界である、銀行業で5%、証券商品業で8%、情報通信業で14%という状況です。業界全体での対応率が0%という業界も散見されます。

出典: 日本の上場企業3715社の公式サイトのSSL/TLSセキュリティ脆弱性ダッシュボード

IPv6への対応はセキュリティスコアとも関連があり、対応が推奨されます。

出典: 日本の上場企業3715社の公式サイトのSSL/TLSセキュリティ脆弱性ダッシュボード

自社サイトでIPv6に対応するメリット

多くの現代のWi-FiルーターがすでにIPv6をサポートしており、ユーザー側での準備は既に整っています。企業が自社のウェブサイトやサービスでIPv6に対応することで、IPv6を利用するデバイスからのアクセスをより効率的に処理し、セキュリティを強化することが可能です。IPv6への対応は単に設定を変更するだけではなく、ネットワークの再設計やセキュリティポリシーの更新を含むことが多いため、計画的なアプローチが求められます。

特に、IoTデバイスの増加に伴いIPアドレスが枯渇する可能性が高まっている現在、IPv6への移行準備を早期に行うことは、長期的なスケーラビリティとセキュリティの向上に繋がります。

結論としては、IPv6への対応はポート番号の前に [::]: を追記するだけで設定できるので、ぜひやってみてください。