IPv6の仕組みとLinuxでのネットワーク設定入門

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つがあります:
- デュアルスタック:IPv4とIPv6を同時に動作させる最も一般的な方法
- トンネリング:IPv6パケットをIPv4ネットワークでカプセル化して転送
- トランスレーション: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:8329 | 2001:db8:0:0:0:ff00:42:8329 | 先行ゼロを省略 |
| 2001:db8::ff00:42:8329 | 2001:db8:0:0:0:ff00:42:8329 | 連続ゼロを::で省略 |
| ::1 | 0:0:0:0:0:0:0:1 | ループバックアドレス(IPv4の127.0.0.1に相当) |
| fe80::1 | fe80:0:0:0:0:0:0:1 | リンクローカルアドレス |
注意点:IPv6アドレスの表記は一意である必要があります。曖昧な省略は避け、明確な表記を心がけてください。
IPv6アドレスの種類と用途
IPv6アドレスは用途によって以下の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通りあります:
- ipコマンドを使用した一時的な設定
- ネットワーク設定ファイルを使用した永続的な設定
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. ネットワーク設定ファイルを使用した永続的な設定
ディストリビューションによって設定ファイルの場所が異なります。主な方法を紹介します:
- Debian/Ubuntu系(/etc/network/interfaces)
/etc/network/interfaces
auto eth0
iface eth0 inet6 static
address 2001:db8:1234::1
netmask 64
- 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
- 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つの方法があります:
- iptables(IPv4と共通)
- 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接続を設定できます。一般的な設定手順:
- ISPからの情報収集
- 割り当てられるIPv6プレフィックス(例:2001:db8:1234::/48)
- デフォルトゲートウェイ(例:2001:db8:1234::1)
- DNSサーバー(例:2001:4860:4860::8888)
- ネットワークインターフェースの設定
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
- 自動設定(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
- 接続の確認
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) |
| DHCPv6 | DHCPサーバーからアドレスを取得 | IPV6_AUTOCONF=no + dhclient -6 |
| 静的設定 | 手動でアドレスを設定 | IPV6ADDR=2001:db8::1/64 |
トンネルブローカーを使用した接続設定の手順
ISPがIPv6を提供していない場合、トンネルブローカーを使用してIPv6接続を確立できます。代表的なトンネルブローカーには以下があります:
Hurricane Electric Tunnel Brokerを使用した設定手順:
- トンネルの作成
- Hurricane Electricのサイト(https://tunnelbroker.net/)にアクセス
- アカウントを作成し、新しいトンネルを作成
- IPv4エンドポイント(自宅のグローバルIP)とIPv6エンドポイント(HE提供)を取得
- 例:IPv4 Endpoint: 198.51.100.100, IPv6 Endpoint: 2001:470:1f11:586::1/64
- 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編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。 編集ポリシーはこちら




