Ipv6

Материал из pNp Wiki
Перейти к: навигация, поиск

Конфигурирование ipv6

Предварительные требования

  • Две виртуальная машины с двумя сетевыми интерфейсами
  • Установленные пакеты: bash-completion

Общая информация и терминология

Адрес состоит из 8 блоков (хекстетов) шестнадцатеричных чисел. Каждый блок (хекстет) состоит из 4 символов, например:

2001:0db8:0070:0000:0000:0000:0000:7777/32

Однако, кодируются именно символы, каждый символ в хекстете кодируется 4 битами (ниблом), то есть первый хекстет будет иметь следующий двоичный вид (точки представлены для наглядности): 0010.0000.0000.0001.
Для упрощения манипуляции такими адресами, имеются следующиие правила:

  • Старшие нули в блоках можно опустить. Например:
2001:0db8:70:0000:0000:0000:0000:7777/32
  • Если нули в блоках расположены последовательно, в записи их можно опустить (Zero Compression) вставив два двоеточия :. Но только один раз, дабы не возникло неоднозначности. Например:
2001:0db8:70::7777/32

Методы доставки информации

  • Unicast - от одного источника, к одному получателю. Получатели могут быть следующими:
  1. Global Unicast Addresses - адреса маршрутизируемые в сети Internet (аналог публичного диапазона ipv4), находящиеся в диапазоне от 2066::/16 до 3fff::/16
  2. Unique-Local Addresses - адреса не маршрутизируемые в стети Internet (приблизительный аналог частного диапазона ipv4), находящиеся в пространстве fc00::/7
  3. Link-local Addresses - адреса не маршрутизируемые в стети Internet, необходимые для автоконфигурирования устройств (аналог APIPA в ipv4), находящиеся в пространстве fe80::/10
  • Multicast - от одного источника, к нескольким получателям. В ipv6 также является заменой broadcast'y. Для получения пакетов в мультикасте, необходимо быть включенным в специальную группу. Те интерфейсы, которые не включены в группу - игнорируют мультикаст пакеты.
  • Anycast - множеству интерфейсов присваивается один ip адрес. При этом эникаст пакеты получает "ближайший" получатель, согласно метрике маршрута.


Архитектура адресов

Юникаст адресы формируются следующим образом:

n бит 128 бит
префикс подсети идентификатор интерфейса

Global Unicast Addresses формируются по следующей схеме:

n бит m бит 128-n-m бит
глобальный префикс маршрутизации идентификатор подсети идентификатор интерфейса

Все глобальные юникаст адреса, имеющие первые биты, отличные от 0000, имеют 64 битное поле идентификатора интерфейса. Глобальные юникаст адреса начинающиеся с 0000 не имеют ограничений на размер или структуру поля идентификатора интерфейса

Local IPv6 Unicast Addresses формируются по следующей схеме:

7 бит 1 бит 40 бит 16 бит 64 бита
префикс L глобальный идентификатор идентификатор подсети идентификатор интерфейса

Где:

  • Префикс - fc00::/7 для идентификации локальных ipv6 адресов
  • L - бит установленный в значение 1 указывает, что адрес присвоен локально. Значение 0 зарезервированно для будущего использования.
  • Глобальный идентификатор - 40 битный префикс используемый для создания глобально уникальный префикс
  • Идентификатор подстети - 16 битный идентификатор подсети
  • Идентификатор интерфейса - 64 битный идентификатор интерфейса.

Link-Local IPv6 Unicast Addresses формируются по следующей схеме:

10 бит 54 бита 64 бита
1111111010 0 идентификатор интерфейса

Адреса данного типа созданы для автоматического конфигурирования интерфейсов, для обнаружения соседних сетевых устройств, или в сетях, где отсутствуют маршрутизаторы. Роутеры не должны маршрутизировать пакеты в которых источник или получатель имеет адрес из указанного диапазона.

Специальные адресы

  1. 0:0:0:0:0:0:0:0 - называется неопределенным адресом, то есть отражает отсутствие адреса как такового, поэтому никогда не должен присваиваться. Пакет с таким адресом не подлежит маршрутизации и не должен использоваться в качестве адреса получателя.
  2. 0:0:0:0:0:0:0:1 - петлевой адрес. Может использоваться любой нодой для того, что бы отправить пакет самому себе. Пакет с таким адресом в качестве источника или получателя не должен уходить за пределы ноды, в противном случае - он должен быть отброшен.

Зарезервированные диапазоны

Согласно перечню специальных адресов IANA, зарезервированны следующие диапазоны:

Диапазон Описание RFC
 ::/128 Неопределенный адрес rfc4291
 ::1/128 Loopback Address (эквивалентен 127.0.0.1/8) rfc4291
 ::/0 Default route (эквивалентен 0.0.0.0) rfc4291
 ::ffff:0:0/96 IPv4-mapped Address rfc4291
64:ff9b::/96 IPv4-IPv6 Translat. rfc6052
64:ff9b:1::/48 IPv4-IPv6 Translat. rfc8215
100::/64 Discard-Only Address Block rfc6666
2001::/23 IETF Protocol Assignments rfc2928
2001::/32 TEREDO rfc4380, rfc8190
2001:1::1/128 Port Control Protocol Anycast rfc7723
2001:1::2/128 Traversal Using Relays around NAT Anycast rfc8155
2001:2::/48 Benchmarking rfc5180, RFC Errata 1752
2001:3::/32 AMT rfc7450
2001:4:112::/48 AS112-v6 rfc7535
2001:5::/32 EID Space for LISP (Managed by RIPE NCC) rfc7954
2001:10::/28 Deprecated (previously ORCHID) rfc4843
2001:20::/28 ORCHIDv2 rfc7343
2001:db8::/32 Для использования в документации rfc3849
2002::/16 6to4 rfc3056
2620:4f:8000::/48 Direct Delegation AS112 Service rfc7534
fc00::/7 Unique-Local (эквивалент частным, не маршрутизируемым в интернет сетям в ipv4) rfc4193, rfc8190
fe80::/10 Link-Local Unicast (аналог APIPA) rfc4291
ff00::/8 Multicast адреса rfc4291

Настройка интерфейсов

Присвоим интерфейсам на машинах vm-01 и vm-02, адреса fc00::1/7 и fc00::2/7 соответственно:

[root@vm-01 ~]# nmcli connection show
NAME  UUID                                  TYPE            DEVICE 
eth0  89d6addf-2717-4933-ac09-c63936ed5205  802-3-ethernet  eth0   
eth1  b1b57e4d-26fd-438b-846d-bcdee06aee53  802-3-ethernet  eth1   
[root@vm-01 ~]# nmcli connection down eth1
Connection 'eth1' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@vm-01 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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 pfifo_fast state UP qlen 1000
    link/ether 52:54:00:07:c2:1a brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.158/24 brd 192.168.122.255 scope global dynamic eth0
       valid_lft 2561sec preferred_lft 2561sec
    inet6 fe80::5c77:2f55:bace:49ba/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:92:b1:55 brd ff:ff:ff:ff:ff:ff
[root@vm-01 ~]# nmcli connection edit eth1 

===| nmcli interactive connection editor |===

Editing existing '802-3-ethernet' connection: 'eth1'

Type 'help' or '?' for available commands.
Type 'describe [<setting>.<prop>]' for detailed property description.

You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, ipv4, ipv6
nmcli> set ipv6.addresses 
Enter 'addresses' value: 
nmcli> print ipv6.addresses 
ipv6.addresses: 
nmcli> set ipv6.addresses fc00::1/7
Do you also want to set 'ipv6.method' to 'manual'? [yes]: yes
nmcli> save
Connection 'eth1' (b1b57e4d-26fd-438b-846d-bcdee06aee53) successfully updated.
nmcli> save persistent 
Connection 'eth1' (b1b57e4d-26fd-438b-846d-bcdee06aee53) successfully updated.
nmcli> quit
[root@vm-01 ~]# nmcli connection up eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@vm-01 ~]# ip -6 addr show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 fc00::1/7 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::9c9f:9e62:26a:7127/64 scope link 
       valid_lft forever preferred_lft forever
[root@vm-01 ~]#

На второй машине проделаем ту же операцию:

[root@vm-02 ~]# nmcli connection show
NAME   UUID                                  TYPE            DEVICE 
ens10  d95a3145-91f8-4e9d-8219-975da848f2e7  802-3-ethernet  ens10  
ens3   427963c7-c016-417a-a542-7738fd158922  802-3-ethernet  ens3   
[root@vm-02 ~]# nmcli connection down ens10
[root@vm-02 ~]# nmcli connection edit ens10

===| nmcli interactive connection editor |===

Editing existing '802-3-ethernet' connection: 'ens10'

Type 'help' or '?' for available commands.
Type 'describe [<setting>.<prop>]' for detailed property description.

You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb
nmcli> set ipv6.addresses 
Enter 'addresses' value: 
nmcli> print ipv6.addresses
Error: unknown setting: 'ipv6.addresses'
nmcli> print ipv6
['ipv6' setting values]
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.routes:                            
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.dhcp-hostname:                     --
nmcli> set ipv6.addresses fc00::2/7
Do you also want to set 'ipv6.method' to 'manual'? [yes]: yes
nmcli> save
Connection 'ens10' (d95a3145-91f8-4e9d-8219-975da848f2e7) successfully updated.
nmcli> save persistent 
Connection 'ens10' (d95a3145-91f8-4e9d-8219-975da848f2e7) successfully updated.
nmcli> quit
[root@vm-02 ~]# nmcli connection up ens10
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@vm-02 ~]# ip -6 add show dev ens10
3: ens10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fc00::2/7 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe12:f162/64 scope link 
       valid_lft forever preferred_lft forever
[root@vm-02 ~]#

Проверка

Отправим по 3 icmp пакета сначала себе, а затем соседу. С машины vm-02:

[root@vm-02 ~]# ip -6 addr show dev ens10
3: ens10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fc00::2/7 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe12:f162/64 scope link 
       valid_lft forever preferred_lft forever
[root@vm-02 ~]# ping6 -c 3 fc00::2
PING fc00::2(fc00::2) 56 data bytes
64 bytes from fc00::2: icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from fc00::2: icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from fc00::2: icmp_seq=3 ttl=64 time=0.071 ms

--- fc00::2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.068/0.070/0.073/0.009 ms
[root@vm-02 ~]# ping6 -c 3 fc00::1
PING fc00::1(fc00::1) 56 data bytes
64 bytes from fc00::1: icmp_seq=1 ttl=64 time=0.628 ms
64 bytes from fc00::1: icmp_seq=2 ttl=64 time=0.615 ms
64 bytes from fc00::1: icmp_seq=3 ttl=64 time=0.637 ms

--- fc00::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.615/0.626/0.637/0.030 ms
[root@vm-02 ~]#

С машины vm-01

[root@vm-01 ~]# ip -6 addr show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 fc00::1/7 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::9c9f:9e62:26a:7127/64 scope link 
       valid_lft forever preferred_lft forever
[root@vm-01 ~]# ping6 -c 3 fc00::1
PING fc00::1(fc00::1) 56 data bytes
64 bytes from fc00::1: icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from fc00::1: icmp_seq=2 ttl=64 time=0.071 ms
64 bytes from fc00::1: icmp_seq=3 ttl=64 time=0.090 ms

--- fc00::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.071/0.080/0.090/0.012 ms
[root@vm-01 ~]# ping6 -c 3 fc00::2
PING fc00::2(fc00::2) 56 data bytes
64 bytes from fc00::2: icmp_seq=1 ttl=64 time=0.709 ms
64 bytes from fc00::2: icmp_seq=2 ttl=64 time=0.725 ms
64 bytes from fc00::2: icmp_seq=3 ttl=64 time=0.684 ms

--- fc00::2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.684/0.706/0.725/0.016 ms
[root@vm-01 ~]#

Однако, следует внести один нюанс. Если пингуются адреса из диапазона link-local, то следует указать через % область видимости (scope), то есть сетевой интерфейс. Так как адресы из диапазона link-local уникальны в пределах сетевого интерфейса, а не хоста!
Отправляем три icmp пакета от машины vm-01 на машину vm-02, используя link-local адресы:

[root@vm-01 ~]# ping6 -c 3 fe80::5054:ff:fe12:f162%eth1
PING fe80::5054:ff:fe12:f162%eth1(fe80::5054:ff:fe12:f162%eth1) 56 data bytes
64 bytes from fe80::5054:ff:fe12:f162%eth1: icmp_seq=1 ttl=64 time=0.713 ms
64 bytes from fe80::5054:ff:fe12:f162%eth1: icmp_seq=2 ttl=64 time=0.568 ms
64 bytes from fe80::5054:ff:fe12:f162%eth1: icmp_seq=3 ttl=64 time=0.597 ms

--- fe80::5054:ff:fe12:f162%eth1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.568/0.626/0.713/0.062 ms
[root@vm-01 ~]#

Теперь, сделаем то же самое, по протоколу ssh:

[root@vm-01 ~]# ssh -6 root@fe80::5054:ff:fe12:f162%eth1
The authenticity of host 'fe80::5054:ff:fe12:f162%eth1 (fe80::5054:ff:fe12:f162%eth1)' can't be established.
ECDSA key fingerprint is 3b:71:1c:f1:33:fe:b4:d4:42:a3:6d:5c:eb:29:a4:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'fe80::5054:ff:fe12:f162%eth1' (ECDSA) to the list of known hosts.
root@fe80::5054:ff:fe12:f162%eth1's password: 
Last login: Thu Dec  7 12:04:00 2017 from 192.168.122.1
[root@vm-02 ~]# exit
logout
Connection to fe80::5054:ff:fe12:f162%eth1 closed.
[root@vm-01 ~]# ssh -6 root@fc00::2
The authenticity of host 'fc00::2 (fc00::2)' can't be established.
ECDSA key fingerprint is 3b:71:1c:f1:33:fe:b4:d4:42:a3:6d:5c:eb:29:a4:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'fc00::2' (ECDSA) to the list of known hosts.
root@fc00::2's password: 
Last login: Thu Dec  7 13:19:02 2017 from fe80::9c9f:9e62:26a:7127%ens10
[root@vm-02 ~]#

Ссылки

IANA IPv6 Special-Purpose Address Registry
Практика IPv6 — домашняя сеть