Linux での IPv6 アドレスの設定と検証

CompTIABeginner
オンラインで実践に進む

はじめに

この実験 (Lab) では、Linux システムで IPv6 アドレスを設定および検証するための基本的なスキルを習得します。最新のコマンドラインツールを使用して、IPv6 ネットワーク管理における検査から静的設定、接続テストまで、不可欠なタスクの実践的な経験を積むことができます。この実験では、Ubuntu 22.04 のような最新の Linux ディストリビューションで標準的に使用されている iproute2 スイートの ip コマンドと ping6 ユーティリティの使用に焦点を当てます。

まず、ip a コマンドを使用して、ネットワークインターフェイス上の自動設定された IPv6 ループバックアドレスとリンクローカルアドレスを発見します。次に、インターフェイスに静的なグローバルユニキャストアドレスを手動で割り当てます。最後に、ping6 コマンドを使用して、ループバックアドレス、リンクローカルアドレス、および新しく設定されたグローバルユニキャストアドレスへのネットワーク接続を検証し、IPv6 設定が正しく機能していることを確認します。

ip a でリンクローカルアドレスとループバックアドレスを発見する

このステップでは、システムに自動設定されている IPv6 アドレスを発見する方法を学びます。Ubuntu 22.04 を含む最新の Linux ディストリビューションでは、デフォルトで IPv6 が有効になっています。ここでは、Linux におけるネットワーク設定および検査のための最新かつ推奨されるツールである ip コマンドを使用します。

まず、ネットワークインターフェイスとその割り当てられているアドレスを検査しましょう。ip a コマンドは ip address の短縮形です。

  1. ターミナルを開きます。デフォルトのパスは ~/project です。
  2. ip a コマンドを実行して、すべてのネットワークインターフェイスとそのアドレスを一覧表示します。
ip a

以下のような出力が表示されます。インターフェイス名(eth0 など)やアドレスは異なる場合がありますが、構造は同じです。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:00:54:72 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.202/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159972sec preferred_lft 1892159972sec
    inet6 fe80::216:3eff:fe00:5472/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:89:01:6f:fc brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

それでは、出力を分析して主要な IPv6 アドレスを特定しましょう。

  • ループバックアドレス: lo という名前のインターフェイスを確認します。これは仮想ループバックインターフェイスで、ローカルマシン上のネットワークスタックのテストに使用されます。IPv6 アドレス ::1/128 が表示されます。これは IPv4 の 127.0.0.1 に相当する IPv6 ループバックアドレスです。scope host は、それがホスト自体内でのみ有効であることを示しています。

  • リンクローカルアドレス: プライマリネットワークインターフェイス(例:eth0enp0s3)を確認します。fe80:: で始まる inet6 アドレスが見つかるはずです。これがあなたの リンクローカルアドレス です。これは IPv6 対応のすべてのインターフェイスに自動的に割り当てられ、ローカルネットワークセグメント(例:ローカルイーサネット LAN)でのみ通信に使用されます。scope link は、このアドレスがローカルリンクでのみ有効であり、インターネット上でルーティング可能ではないことを確認します。

これで、システム上の自動設定された 2 つの基本的なタイプの IPv6 アドレスを正常に特定できました。

ip addr add で静的なグローバルユニキャストアドレスを追加する

このステップでは、ネットワークインターフェイスにグローバルユニキャストアドレス(GUA)を手動で設定します。リンクローカルアドレスはローカルネットワークセグメントでの通信に使用されますが、GUA はインターネット上でルーティング可能な、グローバルに一意な IPv6 版のパブリック IPv4 アドレスに相当します。

この実験では、ドキュメントおよび例のために特別に予約されている 2001:db8::/32 ブロックからアドレスを使用します。これにより、実際に使用されているインターネットアドレスを誤って使用することを避けることができます。

  1. eth0 インターフェイスに静的な GUA 2001:db8:acad::1/64 を追加します。/64 はプレフィックス長を示しており、ほとんどの LAN で標準的です。ネットワークインターフェイスの変更には管理者権限が必要なため、sudo が必要です。

    sudo ip -6 addr add 2001:db8:acad::1/64 dev eth0
    
    • 注意: この変更は一時的なものであり、システムを再起動すると削除されます。Ubuntu で永続的な設定を行う場合は、通常 /etc/netplan/ 内のファイルを編集しますが、これはこの実験の範囲外です。
  2. 新しい GUA が正常に割り当てられたことを確認します。ネットワークインターフェイスを検査するために、再度 ip a コマンドを実行します。

    ip a
    

    eth0 インターフェイスの下に新しいアドレスがリストされているはずです。ルーティング可能なアドレスであることを示す scope global に注目してください。

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        ...
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:00:54:72 brd ff:ff:ff:ff:ff:ff
        altname enp0s5
        altname ens5
        inet 172.16.50.202/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
           valid_lft 1892159959sec preferred_lft 1892159959sec
        inet6 2001:db8:acad::1/64 scope global
           valid_lft forever preferred_lft forever
        inet6 fe80::216:3eff:fe00:5472/64 scope link
           valid_lft forever preferred_lft forever
    

ネットワークインターフェイスに静的な IPv6 GUA を正常に割り当てました。次のステップでは、この新しいアドレスへの接続をテストします。

ping6 でループバックと GUA への接続をテストする

このステップでは、ping6 ユーティリティを使用して IPv6 接続をテストします。このコマンドは、おなじみの ping コマンドの IPv6 版であり、ネットワーク診断に不可欠です。ローカルの IPv6 スタックが正しく機能していること、および前のステップで設定したグローバルユニキャストアドレス(GUA)が応答することを確認します。

まず、ループバックアドレスを ping してローカル IPv6 スタックをテストしましょう。

  1. IPv6 ループバックアドレス ::1 を ping します。-c 3 オプションを使用して、無期限に ping するのではなく、3 パケットのみを送信します。

    ping6 -c 3 ::1
    

    テストが成功すると、パケットが送信および受信され、パケットロスが 0% であることが表示され、ローカル IPv6 スタックが動作していることが確認できます。

    PING ::1(::1) 56 data bytes
    64 bytes from ::1: icmp_seq=1 ttl=64 time=0.026 ms
    64 bytes from ::1: icmp_seq=2 ttl=64 time=0.021 ms
    64 bytes from ::1: icmp_seq=3 ttl=64 time=0.035 ms
    
    --- ::1 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2030ms
    rtt min/avg/max/mdev = 0.021/0.027/0.035/0.005 ms
    

次に、前のステップで eth0 インターフェイスに手動で割り当てた GUA をテストしましょう。これにより、インターフェイスが正しく設定され、そのアドレスでリッスンしていることが確認できます。

  1. 前のステップで追加した GUA 2001:db8:acad::1 を ping します。

    ping6 -c 3 2001:db8:acad::1
    

    ループバックテストと同様に、成功した結果はアドレスからの応答を示し、それが正しく割り当てられ、ホスト上で到達可能であることを確認します。

    PING 2001:db8:acad::1(2001:db8:acad::1) 56 data bytes
    64 bytes from 2001:db8:acad::1: icmp_seq=1 ttl=64 time=0.028 ms
    64 bytes from 2001:db8:acad::1: icmp_seq=2 ttl=64 time=0.037 ms
    64 bytes from 2001:db8:acad::1: icmp_seq=3 ttl=64 time=0.038 ms
    
    --- 2001:db8:acad::1 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2034ms
    rtt min/avg/max/mdev = 0.028/0.034/0.038/0.004 ms
    

これで、ループバックと手動で設定したグローバルユニキャストアドレスの両方への接続を正常に検証できました。

ping6 でリンクローカルアドレスの接続をテストする

このステップでは、リンクローカルアドレスへの接続をテストする方法を学びます。以前に発見したように、これらのアドレスは fe80:: で始まり、単一のネットワークセグメント(「リンク」)でのみ有効です。これらはグローバルに一意ではないため、ping を送信するためにどのネットワークインターフェイスを使用すべきかを指定するために、ping6 コマンドに追加情報を提供する必要があります。これは「ゾーンインデックス」または「スコープ ID」として知られています。

まず、eth0 インターフェイスのリンクローカルアドレスを再度見つける必要があります。

  1. ip a コマンドを実行し、eth0 インターフェイスの fe80:: で始まる inet6 アドレスを特定します。

    ip a show eth0
    

    出力はこれに似たものになります。アドレス(例:fe80::xxxx:xxff:fexx:xxxx)をコピーする必要があります。

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:00:54:72 brd ff:ff:ff:ff:ff:ff
        altname enp0s5
        altname ens5
        inet 172.16.50.202/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
           valid_lft 1892159869sec preferred_lft 1892159869sec
        inet6 2001:db8:acad::1/64 scope global
           valid_lft forever preferred_lft forever
        inet6 fe80::216:3eff:fe00:5472/64 scope link
           valid_lft forever preferred_lft forever
    
  2. 次に、このリンクローカルアドレスを ping します。ゾーンインデックスを指定するには、アドレスに % の後にインターフェイス名(eth0)を付けます。YOUR_LINK_LOCAL_ADDRESS を、先ほど見つけた実際のアドレスに置き換えてください。

    ping6 -c 3 YOUR_LINK_LOCAL_ADDRESS%eth0
    

    例えば、アドレスが fe80::216:3eff:fe00:5472 であった場合、コマンドは次のようになります。 ping6 -c 3 fe80::216:3eff:fe00:5472%eth0

    ping が成功すると、インターフェイスがリンクローカルアドレスに応答していることが確認できます。

    PING fe80::216:3eff:fe00:5472%eth0(fe80::216:3eff:fe00:5472%eth0) 56 data bytes
    64 bytes from fe80::216:3eff:fe00:5472%eth0: icmp_seq=1 ttl=64 time=0.031 ms
    64 bytes from fe80::216:3eff:fe00:5472%eth0: icmp_seq=2 ttl=64 time=0.030 ms
    64 bytes from fe80::216:3eff:fe00:5472%eth0: icmp_seq=3 ttl=64 time=0.030 ms
    
    --- fe80::216:3eff:fe00:5472%eth0 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2028ms
    rtt min/avg/max/mdev = 0.030/0.030/0.031/0.000 ms
    

    %eth0 の部分を省略すると、システムはリンクローカル宛先に使用するインターフェイスを知ることができないため、コマンドは失敗します。この特別な構文は、リンクローカル IPv6 アドレスを扱う上での重要な概念です。

まとめ

この実験では、ip コマンドスイートを使用して Linux システムで基本的な IPv6 設定と検証タスクを実行する方法を学びました。まず ip a を使用してネットワークインターフェイスを検査し、lo インターフェイス上の自動割り当て IPv6 ループバックアドレス (::1) と、プライマリネットワークインターフェイス上のリンクローカルアドレス(fe80:: で始まる)を正常に特定しました。次に、ip addr add コマンドを使用してプライマリインターフェイスに静的なグローバルユニキャストアドレス(GUA)を手動で設定しました。

設定を検証するために、ping6 ユーティリティを利用しました。ループバックアドレスを ping してローカルネットワークスタックが動作していることを確認し、静的な GUA が正しく割り当てられ到達可能であることを検証しました。最後に、リンクローカルアドレスをテストするための特定の要件を学びました。これは、これらのアドレスの link スコープのために必要な手順である、ping6%interface 構文を使用してゾーンインデックス(送信インターフェイス)を明示的に指定することを含みます。