Настройка и проверка IPv6-адресов в Linux

CompTIABeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите основные навыки настройки и проверки IPv6-адресов в системе Linux. Используя современные инструменты командной строки, вы получите практический опыт выполнения основных задач, связанных с управлением сетями IPv6, от инспекции до статической настройки и тестирования подключения. Эта лабораторная работа сосредоточена на использовании команды ip из пакета iproute2 и утилиты ping6, которые являются стандартными для современных дистрибутивов Linux, таких как Ubuntu 22.04.

Сначала вы используете команду ip a для обнаружения автоматически настроенных IPv6-адресов loopback и link-local на ваших сетевых интерфейсах. Затем вы вручную назначите статический глобальный unicast-адрес интерфейсу. Наконец, вы используете команду ping6 для проверки сетевого подключения к адресам loopback, link-local и недавно настроенному глобальному unicast-адресу, подтверждая, что ваша настройка IPv6 работает правильно.

На этом этапе вы научитесь обнаруживать IPv6-адреса, которые автоматически настраиваются в вашей системе. Современные дистрибутивы Linux, включая Ubuntu 22.04, имеют включенный IPv6 по умолчанию. Мы будем использовать команду ip, которая является современным и рекомендуемым инструментом для настройки и инспекции сети в Linux.

Сначала давайте проверим сетевые интерфейсы и назначенные им адреса. Команда 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-адреса:

  • Loopback Address (Адрес обратной петли): Посмотрите на интерфейс с именем lo. Это виртуальный интерфейс обратной петли, используемый для тестирования сетевого стека на локальной машине. Вы увидите IPv6-адрес ::1/128. Это IPv6-адрес обратной петли, эквивалентный 127.0.0.1 в IPv4. scope host указывает, что он действителен только в пределах самого хоста.

  • Link-Local Address (Локальный адрес канала): Посмотрите на ваш основной сетевой интерфейс (например, eth0, enp0s3). Вы найдете адрес inet6, который начинается с fe80::. Это ваш link-local адрес. Он автоматически назначается каждому интерфейсу с поддержкой IPv6 и используется для связи только в локальном сетевом сегменте (например, в вашей локальной сети Ethernet). scope link подтверждает, что этот адрес действителен только в локальном канале и не маршрутизируется в Интернете.

Теперь вы успешно определили два основных типа автоматически настроенных IPv6-адресов в вашей системе.

Добавление статического глобального Unicast адреса с помощью ip addr add

На этом этапе вы вручную настроите Global Unicast Address (GUA) на вашем сетевом интерфейсе. В то время как адреса link-local используются для связи в локальном сетевом сегменте, GUA являются эквивалентом публичных IPv4-адресов в IPv6. Они уникальны в глобальном масштабе и маршрутизируются в Интернете.

Для этой лабораторной работы мы будем использовать адрес из блока 2001:db8::/32, который специально зарезервирован для документации и примеров. Это гарантирует, что мы случайно не используем реальный, используемый в Интернете адрес.

  1. Мы добавим статический GUA 2001:db8:acad::1/64 к интерфейсу eth0. Префикс /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 вашему сетевому интерфейсу. На следующем шаге мы проверим подключение к этому новому адресу.

Тестирование подключения к Loopback и GUA с помощью ping6

На этом этапе вы будете использовать утилиту ping6 для тестирования подключения по IPv6. Эта команда является эквивалентом знакомой команды ping для IPv6 и имеет решающее значение для диагностики сети. Мы проверим, правильно ли работает ваш локальный стек IPv6 и отвечает ли Global Unicast Address (GUA), который вы настроили на предыдущем шаге.

Сначала протестируем локальный стек IPv6, отправив ping на адрес обратной петли.

  1. Отправьте ping на IPv6-адрес обратной петли ::1. Мы будем использовать опцию -c 3, чтобы отправить только 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
    

Далее протестируем GUA, который вы вручную назначили интерфейсу eth0. Это подтвердит, что интерфейс правильно настроен и прослушивает этот адрес.

  1. Отправьте ping на GUA 2001:db8:acad::1, который вы добавили на предыдущем шаге.

    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
    

Теперь вы успешно проверили подключение как к обратной петле, так и к вашему вручную настроенному Global Unicast Address.

На этом этапе вы научитесь тестировать подключение к link-local адресу. Как вы уже выяснили, эти адреса начинаются с fe80:: и действительны только в одном сетевом сегменте (на "канале" или "link"). Поскольку они не являются глобально уникальными, вам необходимо предоставить дополнительную информацию команде ping6, чтобы указать, какой сетевой интерфейс следует использовать для отправки ping. Это известно как "индекс зоны" или "scope ID".

Сначала вам нужно снова найти link-local адрес вашего интерфейса eth0.

  1. Выполните команду ip a и определите адрес inet6, начинающийся с fe80::, для интерфейса eth0.

    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 на этот link-local адрес. Чтобы указать индекс зоны, добавьте %, за которым следует имя интерфейса (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 подтверждает, что интерфейс отвечает на свой link-local адрес.

    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, команда завершится ошибкой, потому что система не будет знать, какой интерфейс использовать для назначения link-local. Этот специальный синтаксис является ключевой концепцией при работе с link-local IPv6-адресами.

Резюме

В этой лабораторной работе вы научились выполнять основные задачи по настройке и проверке IPv6 на системе Linux с использованием набора команд ip. Вы начали с использования ip a для проверки сетевых интерфейсов, успешно определив автоматически назначенный IPv6-адрес обратной петли (::1) на интерфейсе lo и link-local адрес (с префиксом fe80::) на основном сетевом интерфейсе. Затем вы приступили к ручной настройке статического Global Unicast Address (GUA) на основном интерфейсе с помощью команды ip addr add.

Для проверки конфигурации вы использовали утилиту ping6. Вы подтвердили работоспособность локального сетевого стека, отправив ping на адрес обратной петли, и проверили, что статический GUA был правильно назначен и доступен. Наконец, вы узнали о специфическом требовании для тестирования link-local адресов, которое включает использование синтаксиса %interface с ping6 для явного указания индекса зоны (исходящего интерфейса), что является необходимым шагом из-за link-области видимости этих адресов.