IPv6はインターネットの未来を支える次世代プロトコルであり、Linuxサーバーで確実に設定できるようになることがインフラエンジニアにとって必須のスキルです。グローバルIPアドレス枯渇問題の解決だけでなく、セキュリティ機能や自動設定機能の向上により、現代のネットワーク基盤に不可欠な技術となっています。

目次

  • IPv6の基礎知識と重要性
  • IPv6のアドレス構造と種類
  • LinuxにおけるIPv6アドレスの設定手順
  • 実践的なIPv6ネットワーク接続の設定例

IPv6の基礎知識と重要性

IPv6の歴史的背景と必要性

IPv6は1998年にIETFによって標準化されたプロトコルで、IPv4アドレスの枯渇問題を解決するために開発されました。2011年にはIANA(Internet Assigned Numbers Authority)によってIPv4アドレス在庫が枯渇し、その後も地域レジストリの在庫が減少を続けています(出典: IANA IPv4 Exhaustion Report 2011)。

IPv6導入の主な理由は以下の通りです:

  • グローバルIPアドレスの枯渇問題の解決
  • 自動設定機能(SLAAC)による運用コストの削減
  • セキュリティ機能(IPsecの標準実装)の向上
  • ヘッダーフォーマットの簡素化によるルーティング効率の向上
  • 新しいアプリケーション(IoT、モバイルデバイス)への対応

IPv6の主な特徴とメリット

IPv6の主な特徴を具体的に解説します:

特徴IPv4との比較具体的なメリット
アドレス空間32ビット(約43億アドレス) → 128ビット(約3.4×1038アドレス)事実上無限のアドレス空間により、IoTデバイスの普及に対応
ヘッダー構造可変長ヘッダー(オプションフィールド)固定長ヘッダーによりルータ処理が高速化
自動設定手動設定またはDHCP必須SLAAC(Stateless Address Autoconfiguration)により即時ネットワーク接続可能
セキュリティIPsecはオプション実装IPsecが標準実装され、エンドツーエンドの暗号化が容易
マルチキャスト限定的なサポート効率的なグループ通信が可能

特に注目すべきはアドレス空間の拡大です。IPv6では128ビットのアドレス空間により、地球上の全人口に対して1人あたり約6.6×1023個のIPアドレスを割り当てることが可能です。これにより、個々のデバイスにグローバルIPアドレスを割り当てることが現実的になりました。

IPv4との互換性と移行戦略

IPv6とIPv4は直接互換性がないため、移行戦略が重要です。主な移行技術には以下の3つがあります:

  1. デュアルスタック:IPv4とIPv6を同時に動作させる最も一般的な方法
  2. トンネリング:IPv6パケットをIPv4ネットワークでカプセル化して転送
  3. トランスレーション:IPv4とIPv6間でアドレス・プロトコルを変換

デュアルスタックが推奨される理由は、既存のIPv4インフラを活かしつつ、段階的にIPv6を導入できるためです。2023年現在、主要なOS(Linux、Windows、macOS)とネットワーク機器のほとんどがデュアルスタックに対応しています(出典: IETF RFC 4213)。

IPv6のアドレス構造と種類

IPv6アドレスの表記方法

IPv6アドレスは128ビットを8つの16進数(4桁)に分割して表記します。各グループはコロン(:)で区切られます。

具体的な表記ルール:

  • 各グループは16進数(0-9, a-f)で表記
  • グループ内の先行ゼロは省略可能
  • 連続するゼログループは「::」で1回だけ省略可能
  • 大文字小文字は区別されない(a-fは大文字でも可)
表記例展開形説明
2001:0db8:0000:0000:0000:ff00:0042:83292001:db8:0:0:0:ff00:42:8329先行ゼロを省略
2001:db8::ff00:42:83292001:db8:0:0:0:ff00:42:8329連続ゼロを::で省略
::10:0:0:0:0:0:0:1ループバックアドレス(IPv4の127.0.0.1に相当)
fe80::1fe80:0:0:0:0:0:0:1リンクローカルアドレス

注意点:IPv6アドレスの表記は一意である必要があります。曖昧な省略は避け、明確な表記を心がけてください。

IPv6アドレスの種類と用途

IPv6アドレスは用途によって以下の3つの主要な種類に分類されます:

  1. ユニキャストアドレス:単一のインターフェースに割り当てられるアドレス
  2. マルチキャストアドレス:複数のインターフェースに同時に送信されるアドレス
  3. エニーキャストアドレス:複数のインターフェースに割り当てられ、最も近い(ルーティング距離が短い)インターフェースに送信されるアドレス

このうち、ユニキャストアドレスが最も一般的で、さらに以下のサブタイプに分類されます:

アドレスタイププレフィックス用途
グローバルユニキャスト2000::/3インターネット上でルーティング可能なアドレス2001:db8:1234::1
リンクローカルfe80::/10同一リンク内でのみ有効なアドレスfe80::a9f:1234:5678:9abc
ユニークローカルfc00::/7ローカルネットワーク内で使用されるプライベートアドレスfc00:1234::1
ループバック::1/128ローカルホスト間通信用::1
未指定::/128アドレス未割り当てを示す::

重要:リンクローカルアドレス(fe80::/10)は、同一リンク内での通信にのみ使用されます。ルーティングテーブルには載りません。

サブネットマスクとプレフィックス長の表記方法

IPv6ではサブネットマスクの代わりにプレフィックス長を使用します。プレフィックス長はネットワーク部のビット数を示し、スラッシュ(/)の後に数値で表記します。

具体例:

  • 2001:db8:1234::/48 → 最初の48ビットがネットワーク部
  • 2001:db8:1234:5678::/64 → 最初の64ビットがネットワーク部

プレフィックス長の推奨値:

  • ISPから割り当てられるグローバルアドレス:通常/48
  • ローカルネットワーク:/64(SLAACで自動設定される標準サイズ)
  • サーバーやルータ:/128(単一アドレス)

注意:IPv6では/64が標準的なサブネットサイズです。/64未満のサブネットは非推奨であり、セキュリティ上の問題が発生する可能性があります(出典: RFC 5375)。

LinuxにおけるIPv6アドレスの設定手順

ネットワークインターフェースとIPv6状態の確認

LinuxでIPv6を設定する前に、現在のネットワークインターフェースとIPv6の状態を確認します。以下のコマンドを使用します:

bash

ネットワークインターフェースの一覧

ip link show

IPv6アドレスの確認

ip -6 addr show

IPv6ルーティングテーブルの確認

ip -6 route show

IPv6接続性のテスト

ping6 ipv6.google.com

具体的な出力例:

$ ip -6 addr show eth0
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    inet6 2001:db8:1234::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::a9f:1234:5678:9abc/64 scope link
       valid_lft forever preferred_lft forever

出力から読み取れる情報:

  • eth0インターフェースがUP状態
  • グローバルIPv6アドレス:2001:db8:1234::1/64
  • リンクローカルアドレス:fe80::a9f:1234:5678:9abc/64

IPv6アドレスの手動設定

LinuxでIPv6アドレスを手動設定する方法は2通りあります:

  1. ipコマンドを使用した一時的な設定
  2. ネットワーク設定ファイルを使用した永続的な設定

1. ipコマンドを使用した一時的な設定

bash

IPv6アドレスの追加

sudo ip -6 addr add 2001:db8:1234::1/64 dev eth0

設定の確認

ip -6 addr show eth0

設定の削除

sudo ip -6 addr del 2001:db8:1234::1/64 dev eth0

2. ネットワーク設定ファイルを使用した永続的な設定

ディストリビューションによって設定ファイルの場所が異なります。主な方法を紹介します:

  1. Debian/Ubuntu系(/etc/network/interfaces)
/etc/network/interfaces
auto eth0
iface eth0 inet6 static
    address 2001:db8:1234::1
    netmask 64
  1. RHEL/CentOS系(/etc/sysconfig/network-scripts/ifcfg-eth0)
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPV6INIT=yes
IPV6ADDR=2001:db8:1234::1/64
IPV6_DEFAULTGW=2001:db8:1234::ffff
  1. systemd-networkdを使用する場合(/etc/systemd/network/10-eth0.network)
/etc/systemd/network/10-eth0.network
[Match]
Name=eth0

[Network]
Address=2001:db8:1234::1/64
Gateway=2001:db8:1234::ffff

注意:設定ファイルの変更後はネットワークサービスを再起動する必要があります:

bash

Debian/Ubuntu

sudo systemctl restart networking

RHEL/CentOS

sudo systemctl restart network

systemd-networkd

sudo systemctl restart systemd-networkd

IPv6ルーティングの設定

IPv6ルーティングを設定するには、デフォルトゲートウェイと静的ルートを定義します:

1. デフォルトゲートウェイの設定

bash

一時的な設定

sudo ip -6 route add default via 2001:db8:1234::ffff dev eth0

永続的な設定(RHEL/CentOSの場合)

echo “IPV6_DEFAULTGW=2001:db8:1234::ffff” >> /etc/sysconfig/network-scripts/ifcfg-eth0

Debian/Ubuntuの場合は/etc/network/interfacesに以下を追加

up ip -6 route add default via 2001:db8:1234::ffff

2. 静的ルートの追加

bash

特定のネットワークへのルート

sudo ip -6 route add 2001:db8:5678::/48 via 2001:db8:1234::1234 dev eth0

永続的な設定(systemd-networkdの場合)

/etc/systemd/network/10-eth0.networkに以下を追加

[Route]
Destination=2001:db8:5678::/48
Gateway=2001:db8:1234::1234

3. ルーティングテーブルの確認

bash
ip -6 route show

出力例:

2001:db8:1234::/64 dev eth0 proto kernel metric 256 pref medium
2001:db8:5678::/48 via 2001:db8:1234::1234 dev eth0 metric 100 pref medium
default via 2001:db8:1234::ffff dev eth0 metric 1024 pref medium

IPv6ファイアウォールの設定

LinuxでIPv6ファイアウォールを設定するには、主に以下の2つの方法があります:

  1. iptables(IPv4と共通)
  2. ip6tables(IPv6専用)

1. ip6tablesの基本設定

ip6tablesはIPv6専用のファイアウォールツールです。基本的な設定手順を紹介します:

bash

ip6tablesのインストール(RHEL/CentOSの場合)

sudo yum install ip6tables-services

既存ルールの確認

sudo ip6tables -L -n -v

ポリシーの初期化

sudo ip6tables -F
sudo ip6tables -X
sudo ip6tables -Z

デフォルトポリシーの設定(DROPを推奨)

sudo ip6tables -P INPUT DROP
sudo ip6tables -P FORWARD DROP
sudo ip6tables -P OUTPUT ACCEPT

ループバックインターフェースの許可

sudo ip6tables -A INPUT -i lo -j ACCEPT
sudo ip6tables -A OUTPUT -o lo -j ACCEPT

既存のESTABLISHED接続の許可

sudo ip6tables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT

ICMPv6の許可(必須)

sudo ip6tables -A INPUT -p icmpv6 –icmpv6-type echo-request -j ACCEPT
sudo ip6tables -A INPUT -p icmpv6 –icmpv6-type echo-reply -j ACCEPT
sudo ip6tables -A INPUT -p icmpv6 –icmpv6-type destination-unreachable -j ACCEPT
sudo ip6tables -A INPUT -p icmpv6 –icmpv6-type packet-too-big -j ACCEPT
sudo ip6tables -A INPUT -p icmpv6 –icmpv6-type time-exceeded -j ACCEPT
sudo ip6tables -A INPUT -p icmpv6 –icmpv6-type parameter-problem -j ACCEPT

SSHの許可(必要に応じて)

sudo ip6tables -A INPUT -p tcp –dport 22 -j ACCEPT

HTTP/HTTPSの許可(Webサーバーの場合)

sudo ip6tables -A INPUT -p tcp –dport 80 -j ACCEPT
sudo ip6tables -A INPUT -p tcp –dport 443 -j ACCEPT

ルールの保存(RHEL/CentOSの場合)

sudo service ip6tables save
sudo systemctl enable ip6tables
sudo systemctl start ip6tables

2. nftablesを使用したIPv6ファイアウォール

近年ではiptablesよりも柔軟なnftablesが推奨されています。nftablesを使用したIPv6ファイアウォールの設定例:

bash

nftablesのインストール

sudo apt install nftables # Debian/Ubuntu
sudo yum install nftables # RHEL/CentOS

設定ファイルの作成

sudo nano /etc/nftables.conf

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        # ループバックインターフェースの許可
        iif "lo" accept

        # 既存のESTABLISHED接続の許可
        ct state established,related accept

        # ICMPv6の許可
        meta l4proto icmpv6 accept

        # SSHの許可
        tcp dport 22 accept

        # HTTP/HTTPSの許可
        tcp dport { http, https } accept
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

bash

nftablesの有効化と起動

sudo systemctl enable nftables
sudo systemctl start nftables

注意:ファイアウォールの設定はシステムのセキュリティに直結します。設定変更前には必ずバックアップを取り、慎重に行ってください。また、リモートからの設定変更はSSH経由で行い、接続が切断されないように注意してください。

実践的なIPv6ネットワーク接続の設定例

デュアルスタック環境の構築

デュアルスタック環境はIPv4とIPv6を同時に動作させる最も一般的な移行戦略です。Linuxでデュアルスタック環境を構築する手順を解説します:

1. IPv4とIPv6の同時設定

デュアルスタック環境では、インターフェースにIPv4アドレスとIPv6アドレスの両方を割り当てます:

bash

一時的な設定

sudo ip addr add 192.168.1.100/24 dev eth0
sudo ip -6 addr add 2001:db8:1234::100/64 dev eth0
sudo ip route add default via 192.168.1.1
sudo ip -6 route add default via 2001:db8:1234::ffff

2. 永続的な設定(Debian/Ubuntu)

/etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1

iface eth0 inet6 static
    address 2001:db8:1234::100
    netmask 64
    gateway 2001:db8:1234::ffff

3. 永続的な設定(RHEL/CentOS)

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
IPV6INIT=yes
IPV6ADDR=2001:db8:1234::100/64
IPV6_DEFAULTGW=2001:db8:1234::ffff

4. 接続性の確認

bash

IPv4接続の確認

ping 8.8.8.8

IPv6接続の確認

ping6 2001:4860:4860::8888

両方の接続を確認

curl -6 ifconfig.co
curl ifconfig.co

デュアルスタック環境のメリット:

  • IPv4とIPv6の両方を同時に利用可能
  • 段階的なIPv6移行が可能
  • 既存のIPv4インフラを活用できる
  • アプリケーションの互換性が高い

IPv6ネイティブ接続の設定

ISPからIPv6アドレスが割り当てられている場合、ネイティブIPv6接続を設定できます。一般的な設定手順:

  1. ISPからの情報収集
    • 割り当てられるIPv6プレフィックス(例:2001:db8:1234::/48)
    • デフォルトゲートウェイ(例:2001:db8:1234::1)
    • DNSサーバー(例:2001:4860:4860::8888)
  2. ネットワークインターフェースの設定

RHEL/CentOSの場合:

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6ADDR=2001:db8:1234::1/64
IPV6_DEFAULTGW=2001:db8:1234::1
IPV6_PEERDNS=yes
IPV6_DNS1=2001:4860:4860::8888
IPV6_DNS2=2001:4860:4860::8844

Debian/Ubuntuの場合:

/etc/network/interfaces
auto eth0
iface eth0 inet6 static
    address 2001:db8:1234::1
    netmask 64
    gateway 2001:db8:1234::1
    dns-nameservers 2001:4860:4860::8888 2001:4860:4860::8844
  1. 自動設定(SLAAC)の有効化

IPv6ではSLAAC(Stateless Address Autoconfiguration)により、ルータ広告を受信して自動的にアドレスを設定できます:

bash

SLAACを有効化(RHEL/CentOS)

echo “IPV6_AUTOCONF=yes” >> /etc/sysconfig/network-scripts/ifcfg-eth0

SLAACを有効化(Debian/Ubuntu)

/etc/network/interfacesに以下を追加

iface eth0 inet6 auto

  1. 接続の確認

bash

アドレスの確認

ip -6 addr show eth0

ルーティングの確認

ip -6 route show

接続性のテスト

ping6 ipv6.google.com

DNSの確認

cat /etc/resolv.conf

ISPによるIPv6接続の種類:

接続タイプ説明設定方法
SLAACルータ広告を受信して自動設定IPV6_AUTOCONF=yes(RHEL)またはinet6 auto(Debian)
DHCPv6DHCPサーバーからアドレスを取得IPV6_AUTOCONF=no + dhclient -6
静的設定手動でアドレスを設定IPV6ADDR=2001:db8::1/64

トンネルブローカーを使用した接続設定の手順

ISPがIPv6を提供していない場合、トンネルブローカーを使用してIPv6接続を確立できます。代表的なトンネルブローカーには以下があります:

Hurricane Electric Tunnel Brokerを使用した設定手順:

  1. トンネルの作成
    • Hurricane Electricのサイト(https://tunnelbroker.net/)にアクセス
    • アカウントを作成し、新しいトンネルを作成
    • IPv4エンドポイント(自宅のグローバルIP)とIPv6エンドポイント(HE提供)を取得
    • 例:IPv4 Endpoint: 198.51.100.100, IPv6 Endpoint: 2001:470:1f11:586::1/64
  2. Linuxでのトンネル設定

“`bash

トンネルインターフェースの作成

sudo ip tunnel add he-ipv6 mode sit remote 2001:470:1f11:586::1 local 198.51.100.100 ttl 255
sudo ip link set he-ipv6 up

【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。 編集ポリシーはこちら
ABOUT ME
たから
フリーランスIT講師/エンジニア。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900//サーティファイC言語/情報処理技術者 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営