IP-адресация
Обзор
IP-адреса служат для общей идентификации хостов в IP-сетях (RFC 791). Типичный адрес (IPv4) состоит из четырех октетов. Для правильной адресации роутеру также необходимо значение сетевой маски, то есть какие биты полного IP-адреса соответствуют адресу хоста, а какие — адресу сети. Значение сетевого адреса вычисляется бинарной операцией И по сетевой маске и значениям IP-адреса. Также возможно указать IP-адрес, за которым следует слэш "/" и количество бит, формирующих сетевой адрес.
В большинстве случаев достаточно указать адрес, маску и интерфейс. Префикс сети и широковещательный адрес вычисляются автоматически.
Можно добавить несколько IP-адресов к одному интерфейсу или оставить интерфейс без назначенных адресов. В случае объединения интерфейсов (bridge) или подключения PPPoE физический интерфейс может не иметь адрес, но при этом оставаться пригодным к использованию. Назначение IP-адреса физическому интерфейсу, входящему в bridge, означает фактическую настройку адреса на самом bridge-интерфейсе.
Можно использовать /ip address print detail, чтобы увидеть, к какому интерфейсу принадлежит адрес.
IPv4 Адресация
IPv4 использует 4-байтовые адреса, которые разделены на четыре 8-битных поля, называемых октетами. Каждый октет преобразуется в десятичный формат и отделяется точкой. Например:
11000000 10101000 00000011 00011000 => 192.168.3.24
Сеть IPv4 состоит из трех адресов:
- сетевой адрес — стандартный способ обозначения IPv4-адреса, назначенного сети. Например, сеть 192.168.1.0 или 172.16.0.0 называется «сетевой адрес».
- широковещательный адрес — специальный адрес для каждой сети, позволяющий передавать сообщения всем хостам в этой сети. Широковещательный адрес использует самый высокий адрес в диапазоне сети. Например, для сети 192.168.1.0/24 широковещательный адрес будет 192.168.1.255.
- адрес хоста — любой другой адрес, не являющийся сетевым или широковещательным, можно использовать как адрес хоста. Например, в диапазоне 192.168.1.0/24 доступны адреса хостов 192.168.1.2 - 254.
Существует несколько типов IP-адресации:
- unicast — обычно относится к одному отправителю или одному получателю и может использоваться как для отправки, так и для приёма. Обычно unicast-адрес связан с одним устройством или хостом, но не обязательно в одном к одному.
- broadcast — адрес для передачи данных всем возможным получателям («all-hosts broadcast»), что позволяет отправителю отправить данные один раз, а все получатели получат копию. В протоколе IPv4 для локального широковещания используется адрес 255.255.255.255. Кроме того, можно сделать направленное (ограниченное) широковещание, комбинируя префикс сети с суффиксом хоста, состоящим из всех единиц в двоичном виде. Например, адрес назначения для направленного широковещания в сети 192.0.2.0/24 будет 192.0.2.255.
- multicast — адрес, ассоциированный с группой заинтересованных получателей. В IPv4 адреса с 224.0.0.0 по 239.255.255.255 выделены под multicast. Отправитель посылает одиночный датаграмм с unicast-адреса на multicast-адрес группы, а промежуточные маршрутизаторы обеспечивают копирование и доставку всем участникам группы, которые присоединились к ней.
Диапазон приватных адресов
Следующие диапазоны IP-адресов зарезервированы (RFC 6890) для приватной адресации. Эти адреса не маршрутизируются в глобальной таблице маршрутизации и должны преобразовываться в глобальные адреса с помощью NAT:
- 10.0.0.0/8 — начало: 10.0.0.0; конец: 10.255.255.255
- 172.16.0.0/12 — начало: 172.16.0.0; конец:172.31.255.255
- 192.168.0.0/16 — начало: 192.168.0.0; конец: 192.168.255.255
Другие зарезервированные диапазоны адресов
- 198.18.0.0/15 — для тестирования производительности (benchmarking)
- 192.88.99.0/24 — 6to4 relay anycast
- 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 — для документации
- 169.254.0.0/16 — для авто-конфигурации (link-local)
Добавление IP-адреса
Рассмотрим настройки, где два роутера напрямую соединены кабелем, и нам не хочется тратить адресное пространство:
Конфигурация R1:
/ip address add address=10.1.1.1/32 interface=ether1 network=172.16.1.1
Конфигурация R2:
/ip address add address=172.16.1.1/32 interface=ether1 network=10.1.1.1
Свойства
| Свойство | Описание |
|---|---|
| address (IPv4 address [IPv4] / netmask [0..32]; По умолчанию: ) | IPv4-адрес с маской. |
| comment (string; По умолчанию: ) | Описание элемента. |
| disabled (yes | no; По умолчанию: no) | Включён ли адрес или отключен. По умолчанию включён. |
| interface (interface; По умолчанию: ) | Интерфейс, на котором настроен IPv4-адрес. Можно выбрать из доступных интерфейсов роутера. |
| network (IPv4 address; По умолчанию: ) | Сетевой адрес, вычисляемый из параметра address и маски. |
Только для чтения
| Свойство | Описание |
|---|---|
| actual-interface (string) | Фактически настроенный интерфейс. Например, если адрес назначен ethernet-интерфейсу, который входит в bridge, то фактический интерфейс — это bridge, а не ethernet. |
| dynamic (yes | no) | Создан ли адрес динамически. |
| invalid (yes | no) | Является ли адрес недействительным. |
| slave (yes | no) | Относится ли адрес к интерфейсу, который является слейвом другого мастера. |
| VRF (string) | Указывает, с каким VRF связан этот IP. |
IPv6 Адресация
Internet Protocol версии 6 (IPv6) — это новая версия IP. Изначально ожидалось, что IPv6 быстро заменит IPv4, но пока эти две версии будут сосуществовать в обозримом будущем. Тем не менее, IPv6 становится всё важнее, по мере исчерпания пула незанятых адресов IPv4.
Два основных преимущества IPv6 по сравнению с IPv4:
- гораздо большее адресное пространство;
- поддержка безсостояной (stateless) и состояной (stateful) автоматической конфигурации адресов;
- встроенная безопасность;
- новый формат заголовка (ускорение обработки).
IPv6 использует 16-байтовые адреса по сравнению с 4-байтовыми в IPv4. Синтаксис и типы IPv6 адресов описаны в RFC 4291.
Существует несколько типов IPv6-адресов, которые можно распознать по префиксу. RouterOS различает следующие группы:
- multicast (префикс ff00::/8)
- link-local (префикс fe80::/10)
- unique local addresses (префикс fc00::/7)
- loopback (адрес ::1/128)
- unspecified (адрес ::/128)
- другие (все остальные, включая устаревшие site-local и RFC 4193 ULA; все считаются глобальными unicast)
Одно из отличий IPv6 от IPv4 — это автоматическая генерация link-local IPv6 адреса для каждого активного интерфейса с поддержкой IPv6.
IPv6 адреса представлены иначе, чем IPv4. В IPv6 128-битный адрес делится на восемь 16-битных блоков, и каждый блок переводится в 4-значное шестнадцатеричное число, разделенное двоеточиями. Такое представление называется colon-hexadecimal.
В примере ниже IPv6 адрес в двоичном формате преобразован в colon-hexadecimal:
0010000000000001 0000010001110000 0001111100001001 0000000100110001 0000000000000000 0000000000000000 0000000000000000 0000000000001001
2001:0470:1f09:0131:0000:0000:0000:0009
IPv6 адрес можно упростить, удалив ведущие нули в каждом блоке:
2001:470:1f09:131:0:0:0:9
Как видно, IPv6 адреса могут содержать длинные последовательности нулей. Эти последовательности можно сжать, заменив их на двойное двоеточие :::
2001:470:1f09:131::9
Сжатие нулей можно использовать только один раз, иначе невозможно будет однозначно определить число пропущенных нулей.
Префикс IPv6 записывается в формате address/prefix-length. В отличие от IPv4, десятичное представление маски сети здесь не применяется. Примеры префиксов:
2001:470:1f09:131::/64 2001:db8:1234::/48 2607:f580::/32 2000::/3
Типы адресов
Существуют несколько типов IPv6 адерсов:
- Unicast
- Anycast
- Multicast
В IPv6 отсутствуют широковещательные (Broadcast) адреса, их функционал полностью заменён multicast.
Unicast адреса
Пакеты, адресованные на unicast, доставляются только одному интерфейсу. К ним относятся:
- глобально уникальные адреса и могут использоваться для соединения с адресами с глобальной областью;
- link-local адреса;
- уникальные локальные адреса (ULA RFC4193);
- site-local адреса (FEC0::/48) — устарели;
- специального назначения;
- компатибельные адреса.
Глобальный unicast-адрес может быть автоматически назначен узлу с помощью Stateless Address auto-configuration.
Link-local адрес
Link-local адрес обязателен для каждого интерфейса с поддержкой IPv6. Приложения могут рассчитывать на наличие link-local адреса, даже если маршрутирования IPv6 нет, поэтому этот адрес генерируется автоматически для каждого активного интерфейса с использованием идентификатора интерфейса (вычисленного EUI-64 от MAC-адреса, если он есть). Префикс адреса всегда FE80::/64, и IPv6 роутер не пересылает link-local трафик за границы сегмента.
Эти адреса аналогичны автонастраиваемым адресам IPv4 169.254.0.0/16.
Link-local адрес также обязателен для процессов обнаружения соседей (Neighbor Discovery) в IPv6.
Если интерфейс является портом бриджа, интерфейс-специфичный link-local адрес удаляется, оставляя только link-local адрес на bridge.
Уникальные локальные адреса (Unique Local Address)
ULA зарезервированы для локального использования в домашних и корпоративных сетях. Они не маршрутизируются в публичном адресном пространстве и эквивалентны приватным диапазонам IPv4.
Зарезервированный диапазон — fc00::/7.
Адреса специального назначения
| Адрес | Описание |
|---|---|
| Unspecified address (::/128) | Никогда не назначается интерфейсу и не используется в качестве адреса назначения, служит для указания отсутствия адреса. Эквивалент 0.0.0.0 в IPv4. |
| loopback address (::1/128) | Используется для идентификации интерфейса loopback, позволяя узлу отправлять пакеты самому себе. Эквивалент 127.0.0.1 в IPv4. |
| 2002::/16 | Префикс для 6to4 адресации. Использует IPv4 сеть 192.88.99.0/24. |
| 2001:db8::/32 | Диапазон адресов, зарезервированных для документации. Не должны встречаться в исходящих или входящих пакетах. |
| 2001:0010::/28 | Экспериментальный префикс Orchid. Не должен встречаться в трафике. |
| 2001:0002::/48 | Используется для тестирования производительности. Не должен использоваться как источник или назначение. |
| 2001:0000::/32 | Teredo адреса. |
Совместимые адреса (Compatibility Address)
| Адрес | Описание |
|---|---|
| IPv4 compatible address | Используется узлами с двойным стеком, которые обмениваются IPv6 трафиком поверх IPv4 инфраструктуры. При использовании такого адреса IPv6 трафик инкапсулируется в IPv4 заголовок и отправляется через IPv4 сеть. Адрес записывается в формате ::w.x.y.z, где w.x.y.z — IPv4 адрес в точечной десятичной форме. |
| IPv4 mapped address | Используется для представления IPv4-only узла узлу IPv6. Используется только для внутреннего представления. IPv4-mapped адрес никогда не используется в качестве источника или назначения IPv6 пакета. IPv6 протокол не поддерживает использование таких адресов. Записывается в формате ::ffff:w.x.y.z. |
Multicast адреса
Главные особенности multicast:
- трафик отправляется на один адрес, но обрабатывается множеством хостов;
- членство в группе динамично, хосты могут присоединяться к группе и выходить из неё;
- в IPv6 сообщения Multicast Listener Discovery (MLD) используются для определения членства в группе на сетевом сегменте, известном как линк или подсеть;
- хост может отправлять трафик в адрес группы, не будучи участником соответствующей группы.
Один IPv6 multicast адрес идентифицирует каждую группу multicast. Зарезервированный IPv6 адрес каждой группы используется всеми хостами группы, которые слушают и получают сообщения, посылаемые на этот адрес.
Multicast адрес состоит из следующих частей:
- первые 8 бит всегда 1111 1111 (в шестнадцатеричном формате — FF);
- флаг, использующий 9-й по 12-й бит, показывает, задан ли адрес как предопределённый (well-known) или нет. Если предопределён, все биты равны 0;
- ID области (Scope ID) указывает, к какой области принадлежит multicast адрес, например Scope ID=2 — это link-local;
- ID группы указывает multicast группу. Есть предопределённые группы, например Group ID=1 — все узлы. Адрес ff02::1 означает Scope ID=2 и Group ID=1, то есть все узлы в link-local области, аналогично broadcast в IPv4.
Таблица зарезервированных IPv6 multicast адресов:
| Адрес | Описание |
|---|---|
| FF02::1 | Адрес для всех узлов на том же линке. |
| FF02::2 | Адрес для всех маршрутизаторов на том же линке. |
| FF02::5 | Адрес для всех OSPF маршрутизаторов на том же линке. |
| FF02::6 | Адрес для всех OSPF designated routers на том же линке. |
| FF02::1:FFXX:XXXX | Solicited-node адрес, используемый для разрешения IPv6 адреса link-local узла к его канальному адресу. Последние 24 бита совпадают с последними 24 битами IPv6 unicast адреса. |
Ниже частичный список multicast адресов IPv6, зарегистрированных IANA. Для полного списка обратитесь к документу IANA.
Multicast адреса можно использовать для обнаружения узлов в сети. Например, обнаружить все узлы:
mrz@bumba:/media/aaa/ver$ ping6 ff02::1%eth0
PING ff02::1%eth0(ff02::1) 56 data bytes
64 bytes from fe80::21a:4dff:fe5d:8e56: icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from fe80::20c:42ff:fe0d:2c38: icmp_seq=1 ttl=64 time=4.03 ms (DUP!)
64 bytes from fe80::20c:42ff:fe28:7945: icmp_seq=1 ttl=64 time=5.59 ms (DUP!)
64 bytes from fe80::20c:42ff:fe49:fce5: icmp_seq=1 ttl=64 time=5.60 ms (DUP!)
64 bytes from fe80::20c:42ff:fe21:f1ec: icmp_seq=1 ttl=64 time=5.88 ms (DUP!)
64 bytes from fe80::20c:42ff:fe72:a1b0: icmp_seq=1 ttl=64 time=6.70 ms (DUP!)
Обнаружить все маршрутизаторы:
mrz@bumba:/media/aaa/ver$ ping6 ff02::2%eth0
PING ff02::2%eth0(ff02::2) 56 data bytes
64 bytes from fe80::20c:42ff:fe28:7945: icmp_seq=1 ttl=64 time=0.672 ms
64 bytes from fe80::20c:42ff:fe0d:2c38: icmp_seq=1 ttl=64 time=1.44 ms (DUP!)
Anycast адрес
Anycast адрес — новый тип адреса, введённый в IPv6.
Anycast — это новая парадигма сетей, поддерживающая сервисно-ориентированные адреса, где идентичный адрес может быть назначен нескольким узлам, обеспечивающим определённый сервис. Anycast-пакет (с anycast-адресом назначения) доставляется одному из этих узлов с таким же адресом.
Anycast адрес не назначается из отдельного диапазона. Он выделяется из unicast диапазона.
Идентификатор интерфейса
Последние 64 бита IPv6 адреса — это идентификатор интерфейса, уникальный для префикса из 64 бит адреса. Существует несколько способов определения идентификатора интерфейса:
- EUI-64;
- случайно сгенерированный для анонимности;
- ручная настройка.
EUI-64
Традиционные идентификаторы интерфейсов для сетевых адаптеров — 48-битные MAC-адреса. Адрес состоит из 24-битного идентификатора производителя и 24-битного идентификатора платы.
IEEE EUI-64 — новый стандарт для сетевых интерфейсных адресов. Идентификатор компании остаётся 24-битным, а идентификатор расширения — 40-битным, что создаёт гораздо большее адресное пространство.
Чтобы создать адрес EUI-64 из MAC-адреса интерфейса:
- В MAC-адрес вставляется 0xFFFE между идентификатором производителя и платы.
- Седьмой бит первого байта инвертируется.
Пример с MAC-адресом 00:0C:42:28:79:45.
Результат после преобразования в colon-hexadecimal будет:
20C:42FF:FE28:7945
Соответствующий link-local адрес будет:
FE80::20C:42FF:FE28:7945/64
В RouterOS, если параметр EUI-64 настроен для адреса, последние 64 бита этого адреса автоматически генерируются и обновляются с использованием идентификатора интерфейса. Последние биты должны быть нулевыми для этого случая. Пример:
[admin@MikroTik] > ipv6 address add address=fc00:3::/64 interface=ether3 eui-64=yes
[admin@MikroTik] > ipv6 address print
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
# ADDRESS INTERFACE ADVERTISE
5 G fc00:3::20c:42ff:fe1d:3d4/64 ether3 yes
[admin@MikroTik] > interface ethernet set ether3 mac-address=10:00:00:00:00:01
[admin@MikroTik] > ipv6 address print
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
# ADDRESS INTERFACE ADVERTISE
5 G fc00:3::1200:ff:fe00:1/64 ether3 yes
Настройка IPv6 адреса
Пример показывает, как настроить простую адресацию с глобальными IPv6 адресами между двумя роутерами.
Конфигурация R1:
/ipv6 address add address=2001:DB8::1/64 interface=ether1 advertise=no
Конфигурация R2:
/ipv6 address add address=2001:DB8::2/64 interface=ether1 advertise=no
Проверка списка адресов:
[admin@R1] /ipv6 address> print
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
0 G 2001:db8::1/64 ether1 no
3 DL fe80::219:d1ff:fe39:3535/64 ether1 no
Наш добавленный адрес имеет флаг G, обозначающий, что адрес может маршрутизироваться глобально. Также на интерфейсе создан автоматически link-local адрес для каждого IPv6-совместимого интерфейса.
Тест подключения:
[admin@R1] /ipv6 address> /ping 2001:DB8::2
HOST SIZE TTL TIME STATUS
2001:db8::2 56 64 12ms echo reply
2001:db8::2 56 64 0ms echo reply
sent=2 received=2 packet-loss=0% min-rtt=0ms avg-rtt=6ms max-rtt=12ms
Адрес SLAAC IPv6
Если в меню IPv6/Settings включена опция "accept-router-advertisements", и роутер получает пакет Router Advertisement, то SLAAC IPv6 адрес автоматически присваивается интерфейсу, на котором принимаются объявления. Этот адрес будет иметь флаги DG, что означает, что адрес динамический и глобальный. Такие адреса показывают параметры valid и lifetime.
[admin@R1] /ipv6/address/print detail where dynamic && global
Flags: X - disabled, I - invalid, D - dynamic; G - global, L - link-local
0 DG address=2001:db8::::ba69:f4ff:fe84:545/64 from-pool="" interface=ether1 actual-interface=test_fp eui-64=no advertise=no no-dad=no valid=4w2d preferred=1w
Если SLAAC адреса принимаются, то также будет сформирован динамический маршрут в Интернет. В маршруте могут быть указаны ограничения, если они прописаны в пакете объявления, например, hop-limit и MTU. При наличии нескольких адресов на одном интерфейсе будет использовано минимальное значение MTU из всех адресов.
[admin@R1] /routing/route/print detail where slaac
Flags: X - disabled, F - filtered, U - unreachable, A - active;
c - connect, s - static, r - rip, b - bgp, o - ospf, d - dhcp, v - vpn, m - modem,
a - ldp-address, l - ldp-mapping, g - slaac, y - bgp-mpls-vpn;
H - hw-offloaded; + - ecmp, B - blackhole
Ag + afi=ip6 contribution=active dst-address=::/0 routing-table=main pref-src="" gateway=fe80::ba69:f4ff:fe84:7b2%ether1 immediate-gw=fe80::ba69:f4ff:fe84:7b2%ether1 distance=1 scope=30 target-scope=10 belongs-to="slaac" mtu=1400 hoplimit=10 debug.fwp-ptr=0x201C2C00
Свойства
| Свойство | Описание |
|---|---|
| address (IPv6 address [IPv6] / netmask [0..128]; По умолчанию: ) | IPv6 адрес. Адрес также может быть построен из пула, если задан атрибут from-pool. Например, если адрес задан как ::1/64, он будет построен так: <prefix_from_pool>::1/64. |
| advertise (yes | no; По умолчанию: no) | Включает безсостоянную (stateless) автонастройку адреса. Префикс такого адреса автоматически анонсируется трижды хостам с помощью протокола ICMPv6. Опция по умолчанию включена для адресов с длиной префикса 64. Если адрес удалён или изменён, старый префикс считается устаревшим и анонсируется с временем жизни "0s" трижды. |
| comment (string; По умолчанию: ) | Описание элемента. |
| disabled (yes | no; По умолчанию: no) | Адрес включён или отключён. По умолчанию не отключён. |
| eui-64 (yes | no; По умолчанию: no) | Вычислять ли EUI-64 адрес и использовать его в последних 64 битах IPv6 адреса. |
| from-pool (string; По умолчанию: ) | Имя пула, из которого берётся префикс для построения IPv6 адреса, берётся последняя часть из свойства address. |
| no-dad (yes | no; По умолчанию: no) | Если включено (yes), отключает дублирующее обнаружение адресов (DAD) для IPv6 адресов на интерфейсе. |
| interface (interface; По умолчанию: ) | Интерфейс, для которого настроен IPv6 адрес. |
| auto-link-local (yes | no; По умолчанию: yes) | Если задан адрес link-local вручную, этот параметр позволяет переопределять автоматически сгенерированный link-local адрес. |
Только для чтения
| Свойство | Описание |
|---|---|
| actual-interface (string) | Фактический интерфейс, на котором настроен адрес. Например, если адрес назначен ethernet интерфейсу, входящему в bridge, фактический интерфейс — bridge. |
| dynamic (yes | no) | Является ли адрес динамическим. |
| global (yes | no) | Является ли адрес глобальным. |
| invalid (yes | no) | Является ли адрес недействительным. |
| link-local (yes | no) | Является ли адрес link-local. |
| deprecated (yes | no) | Является ли адрес устаревшим. |
| slave (yes | no) | Принадлежит ли адрес интерфейсу, который является слейвом другого мастера. |
| VRF (string) | Указывает, с каким VRF связан адрес. |
Часто задаваемые вопросы
Вопрос: Поддерживает ли RouterOS NAT64?
Ответ: Нет, в настоящее время NAT64 в RouterOS не реализован.
