Рубрики
network \ сеть Конспект

Конспект: ipv6 / disable / enable / setup / ip / ip6tables / ping / systemd-networkd

Сравнение ipv4 и ipv6

https://en.wikipedia.org/wiki/IPv6_address
________________________________________________________________________________________________________________________
|                                                           |                                                          |
| IPv4 = /32 (8 + 8 + 8 + 8)                                |  IPv6 =/128 бит (16+16+16+16+16+16+16+16)                |
|      000.000.000.000                                      |   0000:0000:0000:0000:0000:0000:0000:0000                |
|      255.255.255.255                                      |   ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff                |
|                                                           |                  ::                                      |
|___________________________________________________________|__________________________________________________________|
| Это иерархический адрес из 2-х частей: Сетевая/Узловая    | В IPv6 нет широковещательных адресов.                    |
|___________________________________________________________|__________________________________________________________|  
| Типы адресов:                                             | Типы адресов:                                            |
| 1. Сетевой                                                | 1. Индивидуальные                                        |              
| 2. Адрес узлов                                            | 2. Групповые                                             |           
| 3. Широковещательные адреса                               | 3. Произвольные                                          |              
|___________________________________________________________|__________________________________________________________|
| 0.0.0.0 - 223-225.255.255 - одноадресный диапазон ipv4    | FC00::/7-FDFF/7 - Уникальные локальные                   |                       
| 224.0.0.0 - 239.255.255.255 - многоадресный диапазон ipv4 | FF00::/8 - Групповые                                     |                        
| 224.0.0.0 - 224.0.0.255 - много адресный диапазон для ЛС  | FE80::/10-FEBF/10 - Локальные адреса канала              |
|       ЛС - локальная сеть                                 |                                                          |
| 224.0.0.9 - RIP (резерв)                                  |                                                          |
|___________________________________________________________|__________________________________________________________|  
| Частные IPv4(RFC-1918):                                   | Что то типа частных:                                     |
| 10.0.0.0 - 255.255.255.255 (10.0.0.0/8)                   | 2001:DB8 - тестовая сеть                                 |
| 172.16.0.0 - 172.31.255.255 (172.16.0.0/12)               | fc00::/7 - Уникальные локальные адреса (ULA)             |
| 192.168.0.0 - 192.168.255.255 (192.168.0.0/16)            | fc00:: до fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff        |
|                                                           | предназначены для локальной связи                        |
|                                                           | 2001:0DB8::/32 - РЕЗЕРВ для примеров                     |
|___________________________________________________________|__________________________________________________________|
|  Loopback  / петля                                        |   loopback - из 0, последний бит - 1                     |
| 127.0.0.1 - 127.255.255.254 (/8)                          |   ::1/128                                                |       
|                                                           |   ::1                                                    |
|___________________________________________________________|__________________________________________________________|
|  APIPA / не работает dhcp                                 |     FE80:: - LINK-LOCAL                                  |
|  169.254.0.1 - 169.254.255.254 (169.254.0.0/16)           | адрес формируется на основе так                          |
|                                                           | называемого «идентификатора интерфейса» IEEE EUI-64      |
|                                                           | где в середину добавляют байты 0xFF и 0xFE               |
|                                                           | MAC адреса 00:21:2F:B5:6E:10                             |
|                                                           | получится EUI-64 02:21:2F:FF:FE:B5:6E:10                 |
|                                                           |                                                          |
|___________________________________________________________|__________________________________________________________|
|   Неопределённый адрес                                    | Неопределённый адрес / (невозможно назначить интерфейсу) |
|   0.0.0.0                                                 |   ::/128                                                 |
|                                                           |   (::)                                                   |
|___________________________________________________________|__________________________________________________________|
| Адреса TEST-NET:                                          |   Default route                                          |
|                                                           |    ::/0                                                  |
| 192.0.2.0 - 192.0.2.255 (192.0.2.0/24)                    |                                                          |
| Экспериментальные:                                        | Глобальный адрес - обычный адрес, видимый всему Интернету|
| 240.0.0.0 - 255.255.255.254(/?)                           | 2000::/3 глобальное пространство                         |
| Классовые:                                                | 001 - 200:/3 - Глобальные / Global                       | 
| A 0.0.0.0 - 127.0.0.0/8 (Крупные)                         | от 2000:: до 3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff     |
| B 128.0.0.0 - 191.255.0.0/16 (Средние)                    |                                                          |
| C 192.0.0.0 - 223.255.255.0/24 (Малые)                    |                                                          |
| D 224.0.0.0 - 239.0.0.0 (Групповые)                       |                                                          | 
|                                                           | ::ffff:0:0:0/96 - используемый преобразованных в IPv4    |  
|                                                           | 64:ff9b::/96  и  64:ff9b:1::/48  Адреса с этим префиксом |
|                                                           |  используются для автоматической трансляции IPv4/IPv6    |
|                                                           |                                                          | 
|                                                           | 100::/64 - используется для отбрасывания трафика         |
|___________________________________________________________|__________________________________________________________|

Отличие ipv6 от ipv4 и коротко об особенностях ipv6:


IP-адреса будут иметь длину 128 бит (а не 32 как в IPV4). 
При записи в традиционном формате IP-адрес будет выглядеть так:
abcd:0017:2ff:12aa:2222:783:00dd:1234

32 шестнадцатеричных значения
: - хекстет
0000:0000:0000:0000:0000:0000:0000:0000
 

Очевидно, что такие записи неудобны на практике. 
Ради экономии места адреса IPv6 будут разбиваться символом хекстет(:)
на группы шестнадцатеричных чисел (не более восьми групп), например, так:
abcd:17:2ff:12aa:2222:783:dd:1234

Чтобы не нужно было писать лишнего, используется символ ::, который является сокращенной формой для нескольких нулевых групп:
abcd:17:0:0:0:0:dd:1234 -> axd:17::dd:1234 
0:0:C:0:0:783:dd:1234 3 ->  ::783:dd:1234

При отображении адресов IPv4 в формате IPv6 первые шесть групп являются нулевыми. 
Оставшиеся две группы можно записывать не только в шестнадцатеричной но и в более привычной десятичной системе:
Адрес IPv4:  ::110.111.112.113

Для localhost существует более компактная запись — ::1.

::/128 - текущий хост

::/0 - маршрут по умолчанию

::1/128 - обратная петля (loopback)

Зарезервированные адреса многоадресной рассылки(multicast):
Multicast - ff00::/8 - адреса групповой рассылки
FF02::1 - все устройства
FF02::2 - все маршрутизаторы
FF02::1:2 - все DHCPv6 серверы
FF02::1:FFxx:xxxx/104 - solicited-node multicast, группа узлов, у которых совпадают последние 24 бита (xx:xxxx) из unicast адреса
FF02::5 - группа маршрутизаторов с протоколом OSPFv3
FF02::6 - группа маршрутизаторов с протоколом OSPFv3


Сеть для эксперементов:
2001:db8:0000:0000:0000:0000:0000:0001
_____________|____|___________________
Network ID Subnet Interface ID
адреса из области 2001:0DB8::/32 предназначены для использования в экспериментах


ipv6 маска сети:
!!! ipv6 нету маски используется \ вместо этого длина префикса
Провайдеры выдают сеть /48
Длина префикса от 0 - до 128
Стандартная длина префикса /64 (Можно использовать другой но windows хочет /64)



Существует три типа IPv6–адресов:
# Unicast (индивидуальный) – Служит для определения интерфейса на устройстве под управлением протокола IPv6
одноадресная рассылка (unicast) - один пк на другой 
 
# Multicast (Групповой) – Используется для отправки пакетов по нескольким адресам назначения 
(Заменил собой Broadcast адрес, имеется IPv6- адрес для всех узлов, который дает аналогичный результат.)
многоадресная рассылка (multicast) - на группу пк (iptv)
 
# Anycast (Произвольный) – Любой индивидуальный адрес, который может быть назначен нескольким устройствам. 
Пакет, отправляемый на адрес произвольной рассылки, направляется к ближайшему устройству с этим адресом.
адрес любого узла из группы (anycast) - любой адрес из группы 
Примечание. Протокол IPv6  не содержит адресов широковещательной рассылки (broadcast)


Начальные цифры адресов IPv6:
Глобальные: 2 или 3
Локальный: FD
Локальный канал связи: FE80
Групповой: FF



Еще разок про IPV6-адрес
Разберем адрес:
2001:0DB8:ACAD:0002::/64
___________________________________________________________________________________________________
|48бит                              |16бит                    |64бит                               |
|Префикс глобальной маршрутизации   |Идентификатор подсети    |Идентификатор интерфейса/Адрес хоста|
|2001:0DB8:ACAD                     |:0002:                   |:/64                                |
|___________________________________|_________________________|____________________________________|
                                                               /64
48бит - выдается региональным регистратором (RIR)
16бит - выдается провайдером
64бит - локальная сеть клиента, где он может делать все что угодно

2001:0DB8:ACAD:0002::/64
2001:0DB8:ACAD:0003::/64

Разбиение на подсети с использованием идентификатора подсети: 
Как вы помните, блок IPv6-адресов с префиксом /48 содержит 16 бит идентификатора подсети, как показано на рисунке. 
Разбиение на подсети с использованием 16 бит идентификатора подсети даёт 65 536 возможных подсетей /64. 
Поэтому нет необходимости заимствовать биты из идентификатора интерфейса или узловой части адреса. 
Каждая IPv6-подсеть /64 содержит примерно 18 квинтиллионов адресов, что, как очевидно, гораздо больше, чем когда-либо понадобится в одном сегменте IP-сети.
Подсети, созданные из идентификатора подсети, легко представить, поскольку не нужно выполнять преобразование в двоичный формат. 
Чтобы определить следующую доступную подсеть, достаточно рассчитать следующее шестнадцатеричное число.
Необходимо применить расчёт части идентификатора подсети в шестнадцатеричной системе счисления.
Префикс глобальной маршрутизации является одинаковым для всех подсетей. 
Для каждой подсети увеличивается только четырёхразрядный байт идентификатора подсети.

Типы совместного использование протоколов IPv4 и IPv6

0. Двойной стек: двойной стек позволяет протоколам IPv4 и IPv6 сосуществовать в одной сети. 
Устройства с двойным стеком одновременно работают с протокольными стеками IPv4 и IPv6
 ______
|      |              ___
|      | <--ipv6---> |   |-----> ipv6-network
|      | <--ipv4---> |___|-----> ipv4-network
|______|             router
  PC

1. Туннелирование — это способ транспортировки IPv6-пакетов через IPv4-сеть. 
IPv6-пакет инкапсулируется внутри IPv4-пакета, как и другие типы данных

                    ______    transit network     ____           
ipv4-network <----->|____| --------tunel---------|____|<----->ipv4-network
                    router     ipv6 network      router

2. Преобразование — преобразование сетевых адресов 64 (NAT64) позволяет устройствам под управлением IPv6 обмениваться данными 
с устройствами под управлением IPv4 с помощью метода преобразования, похожего на метод преобразования из NAT для IPv4. 
IPv6-пакет преобразовывается в пакет IPv4-пакет и наоборот.
                     _____
ipv6-internet -------|___| -----pc-ipv4-host
                      NAT

Основные отличия IPV6 от IPV4

1. В IPv6 нету Broadcast ARP
Broadcast частично заменили Multicast адреса и адреса Link Local. 
ARP протокол заменен протоколом NDP;
 
2. В IPv6 нет технологии NAT, которая есть в IPv4. 
Смело спорьте с тем: кто скажет обратное. 
Экономия адресов в IPv6 не используется, адресов хватит на всех. 
Уровень безопасности, который обеспечивает NAT в технологии IPv4, заменен адресами Unique Local, 
но нельзя забывать, что безопасность должны обеспечивать межсетевые экраны - это их функция. 
Название Nat64 которое можете встретить в литературе про IPv6, идет речь о совместном использовании технологии IPv6, IPv4.
 
3. Благодаря Link Local адресам сетевые устройства могут общаться в пределах одного локального канала и только в пределах его.
 
4. Появилась фича которая называется: «проверка уникальности IPv6 адреса». 
Используется в DHCPV6, полный процесс будет описан чуть ниже. 
Суть ее в том, что после назначения ip-адреса устройству он посылает icmp запрос, destination выбирает данный ему адрес, 
если приходит ответ — то его адрес не уникален и нужно получать новый IPv6 адрес.
 
5. Появились адреса anycast. 
В сети могут существовать несколько хостов с абсолютно идентичными IPv6-адресами. 
Вариант использования, например,  несколько балансировщиков около сервера. 
Им дается один и тот же адрес, который называется anycast. 
 
6. Вендоры, такие как Cisco или Juniper, полностью готовы к переходу на IPv6, дело остается за операторами связи и ИТ-компаниями.

Ping:

ping6 -c4 -I eth0 ff02::1 - узнать какие хосты могут использовать ipv6
ping6 ::1 - пингануть локальный хост

::1 — это сокращение от 0000:0000:0000:0000:0000:0000:0000:0001. 
Любая непрерывная последовательность нулей может быть заменена 
на пару двоеточий, а любая четвёрка, состоящая из нулей,
может быть заменена на один ноль.

Подключение по SSH:

ssh phineas@fe80::221:97ff:feed:ef01%eth0
И опять же, если вы используете link-local адрес, то вы должны указать имя интерфейса 
с которого будете осуществлять подключение. 
Как показано выше, делается это путём добавления знака процента и имени интерфейса

Еще раз про типы адресов IPv6:

Калькулятор ipv6:
https://findipv6.com/ipv6-cidr-to-range
Конвертер ip4 to ipv6:
https://dnschecker.org/ipv4-to-ipv6.php

IPv6 также может показаться сложным, потому что существуют разные типы адресов. 
Подобно общедоступным, частным (RFC 1918) и адресам автоматической частной IP-адресации (APIPA) IPv4 (169.254.0.0/16), 
IPv6 имеет четыре основных типа адресов, каждый из которых выполняет свою специфическую функцию:

2000::/3 =  Global Unicast Addresses = глобальные одноадресные адреса (GUA).
Вы можете думать о них как об общедоступных интернет-адресах для прямой одноадресной связи между узлами.
Start range:
2000::
End range:
3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff


FC00::/7 = Unique Local Addresses = уникальные локальные адреса (ULA). 
Это частные адреса, которые никогда не должны использоваться в Интернете, а не через NAT.
Start range:
fc00::
End range:
fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

FE80::/10 = Link-Local Addresses  = Локальные адреса ссылок. 
Используется только для внутренней связи по локальной сети, никогда не перенаправляется маршрутизаторами.
Start range:
fe80::
End range:
febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff

FF00::/8 =  Multicast addresses  = многоадресные адреса. 
Используется для распространения пакетов «один ко многим» в пределах сети.
Start range:
ff00::
End range:
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

Давайте сосредоточим наше внимание на глобальных адресах(GUA), потому что это то, что вы собираетесь использовать для своих систем, 
выходящих в Интернет,  а также сетей и систем в пределах вашего интернет-периметра. 
Для IPv6 не требуется функциональность NAT (см. RFC 4864 ), потому что у нас множество адресов.

Уникальные локальные адреса (ULA) ( RFC 4193 ) не рекомендуются для внутренних корпоративных сетей. 
Адреса Link-local IPv6 и многоадресные адреса можно легко исследовать самостоятельно 



Пример:
Сеть для эксперементов:
2001:db8:0000:0000:0000:0000:0000:0001
_____________|____|___________________
Network ID Subnet Interface ID

адреса из области 2001:0DB8::/32 предназначены для использования в экспериментах
Start range:
2001:db8::
End range:
2001:db8:ffff:ffff:ffff:ffff:ffff:ffff

Обращение к страничкам в интернете:

При использовании IPv6-адреса в URL необходимо заключать адрес в квадратные скобки:
http://[2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d]/
 
Если необходимо указать порт, то он пишется после скобок:
http://[2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d]:8080/


DHCP в ipv6

ipv6 SLAAC \ NDP \ Neighbor Discovery \ Router Discovery

Собственно адрес ipv6  128 бит делится на две части:
0. Префикс IPv6 = 64бит (Эту часть отдает DHCPv6)
1. Идентификатор интерфейса = 64бит \ (ff:fe в середину MAC) (Эта часть генерируется клиентом при EUI-64)
  
Neighbor Discovery
(знаю адрес IPv6 соседа, но не знаю канальный: как найти?)
Neighbor Solicitation (NS) - запрос канального адреса (LLA или ::(DAD) -> SNMA)
Neighbor Advertisement (NA) - ответ на такой запрос (LLA -> LLA или FF02::1(DAD))
тут же работают механизмы Duplicate Address Detection (DAD) и Neighbor UnreachabilityDetection (NUD)
 
Router Discovery
(хочу получить информацию о роутерах)
Router Solicitation (RS) - запрос информации о роутерах (:: -> FF02::2)
Router Advertisement (RA) - оповещение по расписанию о настройках IPv6 и ответ, если был принудительный запрос (LLA -> FF02::1)
 
ND использует порты udp port 547,546


Как клиент получает адрес:
На роутере настроить radvd и SLAAC!
 
Включить интерфейс
0. Генерируется Link-Local Address и рассылается сообщение Neighbor Solicitation на адрес Solicited-node Multicast для Duplicate Address Detection (адрес в состоянии tentative)
1. Рассылается сообщение Router Solicitation на адрес ff02::2
2. Роутер отвечает на Link-Local Address, что есть такие-то доступные префиксы и настройки
3. Генерируется Global Unicast Address на основе полученного префикса и рассылается сообщение Neighbor Solicitation на адрес Solicited-node Multicast
для Duplicate Address Detection (адрес в состоянии tentative)
4. Применяются настройки полученные от роутера
5. Если Duplicate Address Detection отрабатывает успешно, то адреса переходят в состояние preferred.

Для чего нужен DHCPv6?
то бы раздавать опции!
DHCPv6 нужен, т.к. в SLAAC ограничен набор предлагаемых опций.
Если вы хотите, к примеру, загрузку по сети или передавать опции NTP, то вам нужен полноценный сервер DHCPv6.
Варианты:
stateless DHCPv6 = SLAAC (сеть, префикс и шлюз) + DHCPv6 (опции);
stateful DHCPv6 (клиент принципиально не слушает RA от роутера и обращается к серверу DHCPv6).
 
radvd
Если сообщения RA рассылаются, то:
Autonomous = off (не назначаем адрес из префиксов RA)
Managed = on (запрашиваем адрес у сервера DHCPv6)
OtherConfig = on (получаем опции у сервера DHCPv6)
Если RA не рассылаются, то клиент всегда может самостоятельно обратиться к серверу DHCPv6 по FF02::1:2
Помним, что клиент отправляет сообщение с порта 546/UDP серверу на порт 547/UDP.
В идеальном случае, DHCPv6 сервер ещё добавляет соответствующие записи в зону DNS.


Кратко как всё-таки работает DHCPv6:
Вариант 1(Только SLACC):
"Я предоставляю все необходимое вам данные (префикс, длину префикса и шлюз по умолчанию)"
Вариант 2(SLAAC и DHCPv6):
Вот моя информация, но вам понадобится и другие данные, например об DNS-адресах с сервера DHCPv6"
Вариант 3(только DHCPv6):
"Я не могу вам помочь. Запросите необходимую информацию у сервера DHCPv6"

Настройка ipv6 средствами systemd-networkd

vim /etc/systemd/network/eth0.network
-------------------------------------
[Network]
# Use 'yes' instead of 'ipv6' for both ipv4 and ipv6.
DHCP=ipv6
/etc/systemd/network/lan.network
[Network]
IPv6SendRA=yes
DHCPv6PrefixDelegation=yes
-------------------------------------

Если все таки хочется задушить ipv6, используем systemd-networkd:

etc/systemd/network/40_eth0.network 
-----------------------------------
[Match]
Name=eth0
[Network]
LinkLocalAddressing=ipv4 # вот эта строка отключает работу ipv6 на интерфейсе
DHCP=ipv4
#DHCP=yes # по умолчанию просит настройки ipv6 вместе с ipv4
----------------------------------

Еще примеры настройки сети используя systemd-networkd:


cat > /etc/systemd/network/10-eth-static.network << "EOF"
[Match]
Name=
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1
Domains=
EOF

cat > /etc/systemd/network/10-eth-dhcp.network << "EOF"
[Match]
Name=
[Network]
DHCP=ipv4
[DHCP]
UseDomains=true
EOF

cat > /etc/systemd/network/10-ether0.link << "EOF"
[Match]
# Change the MAC address as appropriate for your network device
MACAddress=12:34:45:78:90:AB
[Link]
Name=ether0
EOF

cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf
domain 
nameserver 
nameserver 
# End /etc/resolv.conf
EOF

Ручное управление ipv6 программой ip:

 
ifconfig eth0 | grep "inet6 addr:" посмотреть адрес
ip -6 addr add 2001::1/64 dev eth0  - назначить адрес
ip -6 addr del 2001::1/64 dev eth0  - удалить адрес

firewall

Управляется так де как и iptables 
# ip6tables -P OUTPUT DROP
# ip6tables -p INPUT DROP
# ip6tables -p FORWARD DROP

Включения forward для ipv6:

временно до перезагрузки:
sysctl -w net.ipv6.conf.all.forwarding=1 - вкл маршрутизации ipv6
Проверка:
cat /proc/sys/net/ipv6/conf/eth0/forwarding проверка включения маршрутизации ipv6

Для постоянно нужно отредактировать файл /etc/sysctl.conf и раскоментировать строку:
net.ipv6.conf.all.forwarding = 1 

Основной вариант отключения IPV6

 
0. В файле /etc/sysctl.conf вставляем следующие строки -
nano /etc/sysctl.conf 
---------------------
#disable ipv6 settins
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.enp1s0.disable_ipv6 = 1
--------------------
Сохраняем файл.

1. Применяем:
sysctl -p


P.S. аналогичное в windows
Отключение 6to4
netsh int 6to4 set st disabled

вариант 2

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1

вариант 3

sudo vi /etc/default/grub
-------------------------
GRUB_CMDLINE_LINUX = "ipv6.disable = 1"
-------------------------
sudo update-grub2

Обще доступные серверы DNS для ipv6:

DNS Google	Базовый	2001:4860:4860::8888	
DNS Google	Базовый	2001:4860:4860::8844
DNS Google      Базовый	2a02:6b8::feed:0ff
DNS Google      Базовый 2a02:6b8:0:1:feed::0ff
 
DNS Яндекс      Безопасный	2a02:6b8::feed:bad
DNS Яндекс      Безопасный	2a02:6b8:0:1::feed:bad
DNS Яндекс      Семейный	2a02:6b8::feed:a11 - адрес семейного сервера (не выдаются адреса с контентом 18+)
DNS Яндекс      Семейный	2a02:6b8:0:1::feed:a11 - адрес семейного сервера (не выдаются адреса с контентом 18+)

Пример записи ipv6 в /etc/network/interfaces

auto ens5 
iface  ens5 inet6 static 
            address 2001:db8::1/64

cisco

ipv6 unicast-routing