こんにちは、たびとです。
仕事で IPv6 を使う機会がありましたが、これまで使ったことがないため、右も左もわかりません。 インターネットで調べてみても、難しい説明ばかりで何をすればいいのか、よく理解できません。
結局、いろいろなサイトを調べて、試行錯誤しながら IPv6 の動作環境を作りあげることができました。 この時の備忘録として、Hyper-V 上に作った CentOS 7 と Windows 11 に IPv6 を設定して、通信してみたいと思います。
この記事の対象者
- IPv6 のアドレスを使ってみたいけど、よくわからない。
- 説明や理論はいいから、とにかく直ぐに試せるサンプルがほしい。
IPv6 について
IPv6 のアドレスは以下の3種類があります。
- リンクローカル(同一セグメント)
- ユニークローカル(組織内ネットワーク)
- グローバル(グローバルネットワーク)
今回は、ユニークローカルアドレスを使ってみたいと思います。 調べてみると、以下の 2通りあるようなので、fd00::8 の方を使うことをします。
アドレス | 説明 |
---|---|
fc00::/8 | 将来の定義用 |
fd00::/8 | 40ビットのグローバル識別子+16ビットのサブネット |
結局、fd の後ろ 56ビットに適当な数値を当てはめて、残り 64 ビットが一意になるように割り振ります。 アドレス表記は以下のような特徴があります。
- 先頭の 0 は省略することができる
- 連続した 0:0: の繰り返しは一度だけ、:: に省略することができる
例えば、fd00:0010:0020:0030:0000:0000:0000:0001 という IPv6 アドレスがあった場合、 1 を適用し、fd00:10:20:30:0:0:0:1 になり、2を適用し、fd00:10:20:30::1 と省略することができます。
ということで、上記の fd00:10:20:30::/64 を使って IPv6 アドレスを割り当ててみます。
CentOS 7 に IPv6 を設定する
最初に、ネットワーク設定をバックアップします。
ここで注意することは、ディレクトリ内は自動で読み取られるため、サブディレクトリを作って、そこにバックアップを作成してください。
また、eth0 の箇所は、異なることがあるので ip a
でネットワークインターフェース名を確認してください。
$ cd /etc/sysconfig/network-scripts $ sudo mkdir backup $ cp -p ifcfg-eth0 ./backup/ifcfg-eth0.org
バックアップが終わったら、ifcfg-eth0.org を編集します。 IPV6_AUTOCONF="yes" を "no" に変更し、IPV6ADDR を追加します。 IPv6 アドレスは「fd00:10:20:30::101」とします。
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="no" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="eth0" UUID="dbecf02c-025c-4398-955b-519ed63f1f02" DEVICE="eth0" ONBOOT="yes" IPV6ADDR="fd00:10:20:30::101/64"
ネットワークを再起動します。
$ sudo systemctl restart NetworkManager $ sudo systemctl restart network
IPv6 アドレスが追加されていることを確認します。
$ ip addr show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:15:5d:44:3b:01 brd ff:ff:ff:ff:ff:ff inet 172.31.125.241/20 brd 172.31.127.255 scope global noprefixroute dynamic eth0 valid_lft 86377sec preferred_lft 86377sec inet6 fd00:10:20:30::101/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::c5a4:3e4d:9ae3:c7da/64 scope link noprefixroute valid_lft forever preferred_lft forever
先ほど設定した「fd00:10:20:30::101/64」が表示されています。 fe80 で始まるのはリンクローカルアドレスで最初から設定されている IPv6 アドレスで、 ユニークローカルと共存することになります。
Windows 11 に IPv6 を設定する
コンソールを開き、IP アドレスを確認します。
C:\> ipconfig Windows IP 構成 イーサネット アダプター イーサネット: 接続固有の DNS サフィックス . . . . .: mshome.net リンクローカル IPv6 アドレス. . . . .: fe80::b7f8:e669:b819:a1da%7 IPv4 アドレス . . . . . . . . . . . .: 172.31.116.48 サブネット マスク . . . . . . . . . .: 255.255.240.0 デフォルト ゲートウェイ . . . . . . .: 172.31.112.1
ファイアウォールの設定
Windows 11 から CentOS 7 へ ping が通って、CentOS 7 から Windows 11 への ping が通らないときは、 Windows Defender ファイアウォールの設定を確認します。
左メニューの「詳細設定」をクリックし、セキュリティが強化された Windows Defender ファイアウォールの画面を開き、 受信の規則から「ファイルとプリンターの共有(エコー要求 - IPMCv4受信)」をクリックします。 ドメインとプライベート,パブリックの2種類があるので、「プライベート,パブリック」の方を選択します。
有効(E) をチェックして、ダイアログを閉じます。
同様に、「ファイルとプリンターの共有(エコー要求 - IPMCv6受信)」も同様に有効にします。有効になると、先頭に緑のチェックマークアイコンが表示されます。
これで、CentOS 7 側から Windows 11 への ping ができるようになります。
IPv6 アドレスの設定
「ネットワークとインターネット - ネットワークの詳細設定」から「ネットワーク アダプター オプションの詳細」をクリックします。
ネットワーク接続画面が表示されるので、「イーサネット」アイコンをクリックし、イーサネットの状態ダイアログの「プロパティ(P)」をクリックします。
イーサネットのプロパティ ダイアログから「インターネット プロトコル バージョン 6 (TCP/IPv6)」を選択し、プロパティ(R) ボタンをクリックします。
「次の IPv6 アドレスを使う(S):」をクリックし、IPv6 アドレスに「fd00:10:20:30::102」、サブネット プレフィックスの長さに「64」を設定します。
これで、IPv6 アドレスの設定は完了です。コマンドラインで ipconfig コマンドを実行すると、「fd00:10:20:30::102」のアドレスが表示されます。 注意する点は、リンクローカル IPv6 アドレスも存在していることで、どちらに対してもアクセスすることができます。
C:\> ipconfig Windows IP 構成 イーサネット アダプター イーサネット: 接続固有の DNS サフィックス . . . . .: mshome.net IPv6 アドレス . . . . . . . . . . . .: fd00:10:20:30::102 リンクローカル IPv6 アドレス. . . . .: fe80::b7f8:e669:b819:a1da%7 IPv4 アドレス . . . . . . . . . . . .: 172.31.116.48 サブネット マスク . . . . . . . . . .: 255.255.240.0 デフォルト ゲートウェイ . . . . . . .: 172.31.112.1
CentOS 7 と Windows 11 で通信する
Windows 11 から CentOS 7 へ ping を実行します。
C:\> ping fd00:10:20:30::101 fd00:10:20:30::101 に ping を送信しています 32 バイトのデータ: fd00:10:20:30::101 からの応答: 時間 <1ms fd00:10:20:30::101 からの応答: 時間 =1ms fd00:10:20:30::101 からの応答: 時間 =1ms fd00:10:20:30::101 からの応答: 時間 <1ms fd00:10:20:30::101 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 1ms、平均 = 0ms
CentOS 7 から Windows 11 へ ping6 を実行します。ping ではなく ping6 コマンドを使います。
$ ping6 fd00:10:20:30::102 PING fd00:10:20:30::102(fd00:10:20:30::102) 56 data bytes 64 bytes from fd00:10:20:30::102: icmp_seq=1 ttl=128 time=0.821 ms 64 bytes from fd00:10:20:30::102: icmp_seq=2 ttl=128 time=0.884 ms 64 bytes from fd00:10:20:30::102: icmp_seq=3 ttl=128 time=1.02 ms 64 bytes from fd00:10:20:30::102: icmp_seq=4 ttl=128 time=0.911 ms ^C --- fd00:10:20:30::102 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3064ms rtt min/avg/max/mdev = 0.821/0.909/1.023/0.081 ms
ちなみに、Windows 11 のリンクローカルアドレスに ping6 を実行するときは、 -I オプションでインターフェース名を指定する必要があります。
$ ping6 -I eth0 fe80::b7f8:e669:b819:a1da PING fe80::b7f8:e669:b819:a1da(fe80::b7f8:e669:b819:a1da) from fe80::c5a4:3e4d:9ae3:c7da%eth0 eth0: 56 data bytes 64 bytes from fe80::b7f8:e669:b819:a1da%eth0: icmp_seq=1 ttl=128 time=0.600 ms 64 bytes from fe80::b7f8:e669:b819:a1da%eth0: icmp_seq=2 ttl=128 time=0.988 ms 64 bytes from fe80::b7f8:e669:b819:a1da%eth0: icmp_seq=3 ttl=128 time=1.14 ms 64 bytes from fe80::b7f8:e669:b819:a1da%eth0: icmp_seq=4 ttl=128 time=1.09 ms ^C --- fe80::b7f8:e669:b819:a1da ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3039ms rtt min/avg/max/mdev = 0.600/0.957/1.149/0.216 ms
CentOS 7 の Apache へ IPv6 を使ってアクセスします。このとき URL の IPv6 アドレスは http://[fd00:10:20:30::101] のように、大カッコで囲む必要があります。
まとめ
IPv6 アドレスは複数持つことが可能で、ユニークローカル IPv6 アドレスを設定しても、 リンクローカル IPv6 アドレスは上書きされずに残ります。
このユニークローカル IPv6 アドレスを設定し、CentOS 7 と Windows 11 で IPv6 通信を確認し、 CentOS 7 の Apache に IPv6 の URL でアクセスできることも確認できました。 意外と簡単に IPv6 環境が構築できることが理解できたかと思います。
では、皆さん、よい旅を。