Страницы

четверг, 9 января 2014 г.

6to4 IPv6 tunnel на Mikrotik RB951G-2HnD

Настройка IPv6 в домашней сети


Желание передать большой семейный видеофайл частным образом с помощью torrent-протокола привело к понимаю, что необходимо настроить наконец-то белую адресацию домашнего компьютера и перестать мучаться.
Провайдеры в России уже начинают предоставлять доступ по протоколу ipv6, в том числе и мобильные провайдеры, так что можно уже начинать.

Mikrotik для удобства поддерживает переходный механизм 6to4, что даёт возможность установить ipv6-подключение, пока провайдеры тестируют свои сети.
В процессе экспериментов с подключением, чтением справки и руководств, выработалась некая последовательность действий, которая и будет тут приземлена.

Что-бы данная заметка смогла помочь, требуются некоторые условия.

1. Провайдер сети Интернет должен выдавать маршрутизируемый(routed) адрес на интерфейсе подключения, т.е. выдавать "белый" ipv4-адрес. В данной заметке провайдер, а им оказался Rostelecom, подключает по технологии ADSL.
2. Желательно статический маршрутизируемый ipv4 адрес, но может подойти и динамический.

Особенности моего подключения получились следующие:
1. Динамический маршрутизируемый IPv4-адрес.
2. Переподключение каждые 24-часа. Пока не определил, меняется ли адрес или нет. Буду исходить из того, что меняется.

3. Проверить доступность важного ipv4-адреса: 192.88.99.1. Это anycast адрес, который сообщает туннельному клиенту (нашему роутеру) адреса шлюзов IPv4-IPv6.

На Ubuntu:

$ ping 192.88.99.1

На Микротике:

> /ping 192.88.99.1


При использовании трансляции адресов и маскарада (NAT & masquerade) на стороне провайдера, когда IPv4-адрес выдаётся из диапазона немаршрутизируемых сетей, таких как 192.168.x.x, 10.0.0.0 и пр. данная заметка не применима, требуется иное туннельное решение. Но будет частью полезна.

Домашний роутер может быть любой с поддержкой IPv6. Обычно они строятся на платформе Linux или подобной и так или иначе используют сходный набор программ для обслуживания протокола IPv6. Однако Mikrotik RouterOS даёт некоторые возможности управления настройками с помощью пользовательских скриптов, а это важно в случае динамического IPv4-адреса, настройка меняется с помощью скрипта. Также спокойно подойдут и открытые прошивки. Можно посмотреть настройки IPv6 в DD-WRT и Open-WRT.



Простейшее ручное подключение и настройка 6to4 туннеля на маршрутизаторе Mikrotik RB951G-2HnD

Я обновил прошивку роутера, скачав её с сайта производителя и положив в меню "Файлы", после перезагрузился и система RouterOS стала версии 6.7.


1. Итак, в меню роутера Микротик RB951G-2HnD "Interface", надо добавить новый интерфейс туннельного подключения 6to4tunnel, указав в качестве важного свойства "local-address" - текущий ipv4-адрес интернет-соединения, которое должно быть поднято. Свойство Remote-address  заполнить anycast ipv4-адресом 192.88.99.1. Указать MTU=1280.
Если заполнить, то появляется автоматический IP-адрес, из диапазона автоконфигурации, FE80::, вида: FE80::XXXX:XXXX/64.
Таблица маршрутов ipv6 пока пустая.


Итак, для примера, внешний IP-адрес интернет подключения: 77.88.01.239


Можно сделать из консоли:

/interface 6to4 add name=ipng disabled=no local-address=77.88.01.239 remote-address=192.88.99.1 mtu=1280

2. Сформировать и добавить в ручную переходный IPv6-адрес, для туннельного подключения и внести его в меню IPv6/Addresses, привязав к интерфейсу туннельного подключения.
Переходный IPv6-адрес, получен полным отражением полной адресной сети IPv4 (а это 4M адресов) в подсеть IPv6, с префиксом 2002:, если я в правильно выразился.
Формируется так - 32 битный IPv4 адрес преобразуется в шестнадцатиричный вид и укладывается после префикса 2002:, который зарезервирован, при этом соблюдая текстовую нотацию.
Т.е. адрес вида 77.88.01.239 - XXXX:XXXX
Получаем префикс 2002:XXXX:XXXX::/48

Этот префикс будет присутствовать у всех устройств домашней сети. А при изменении внешнего IPv4-адреса, также будет соответственно изменяться, но на роутере это надо будет автоматизировать, поскольку туннель 6to4 всё же любит статические IPv4-адреса. Делаться изменения будут пользовательским скриптом.

Также стоит заметить, что на подсеть (subnet prefix) остается 16 бит (а это 65536 подсетей, от 0 до FFFF).



В консоли:
/ipv6 address add address=2002:XXXX:XXXX::1/16 advertise=no comment=6to4public disabled=no eui-64=no interface=ipng

Т.к. за основу своего скрипта, я взял существующий какой-то скрипт, то метка 6to4public используется в комментарии, чтобы скрипт мог определить, какой адрес менять.

В таблице маршрутов появлятся динамический маршрут 2002::/16, а ipng для него шлюзом.

[admin@MikroTik] >> ipv6 route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, o - ospf, b - bgp, U - unreachable
 #      DST-ADDRESS              GATEWAY                  DISTANCE
 0 ADC  2002::/16                ipng                            0

Добавленный адрес, пока не доступен извне.


3. Также надо прописать хитрый шлюз, в спец.формате.

/ipv6 route add disabled=no distance=1 dst-address=2000::/3 gateway=::192.88.99.1%ipng


::192.88.99.1 - это специальный формат IPv6-адреса, т.н. "IPv4-Compatible IPv6 Address".

%ipng указывает через какой интерфейс оно доступно. Через наш туннель.


Префикс 2000::/3 - это весь IPv6 интернет. Он попал в подсеть с этим префиксом, что сузило адресное пространство до 125 бит, а остальное как я понял - зарезервировано.


4. Сформировать и добавить вручную подсеть для домашних ipv6-устройств, таких как Windows, Ubuntu, чтобы они все получили маршрутизируемые IPv6 адреса, доступные из сети Интернет, по протоколу IPv6, через туннель 6to4.

2002:IPv4:Местный префикс::1/64

/ipv6 add address=2002:XXXX:XXXX:1::1/64 advertise=yes comment=6to4subnet disabled=no eui-64=no interface=bridge-local

Здесь важна опция  advertise=yes, чтобы встроенная программа radvd в RouterOS начала выдавать префикс (2002:XXXX:XXXX:1:) клиентам сети, которые на основе этого префикса автоматически сформируют белые маршрутизируемые IPv6 адреса. Эта опция влияет на появление динамического префикса в списке меню /ipv6 nd prefix.


Конечная цель всего этого - сделать так, чтобы клиенты домашней сети, получили доступ в IPv6 автоматически. Простая цель, а сколько тонкостей, а всё из-за того, что подзадержались провайдеры с поддержкой IP New Generation.
Цитата
"RouterOS has Ipv6 Neighbor Detection and stateless address autoconfiguration support using Router Advertisement Daemon (RADVD)".
Т.е. в принципе, не нужно включать DHCPv6 сервер, хотя клиентам Windows может понадобиться.


5. Маршрут на всё
Добавить маршрут ::/0 через шлюз ipng.
[admin@MikroTik] /ipv6 route> print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, o - ospf, b - bgp, U - unreachable
 #      DST-ADDRESS              GATEWAY                  DISTANCE
 0 A S  ::/0                     ipng                            1
 1 A S  2000::/3                 ::192.88.99.1%ipng              1
 2 ADC  2002::/16                ipng                            0
 3 ADC  2002:XXXX:XXXX:1::/64    bridge-local                    0

Из-за отсутствия этого маршрута, могут быть проблемы с доступностью IPv6 серверов.



На этом шаге, из консоли роутера (ssh command console), можно выполнить пробу любого ipv6-адреса (команда ping) и IPv6 сеть должна быть доступна.
Также извне, можно попробовать достучаться до адреса роутера, присвоенного интерфейсу туннеля (ipng). Я использовал сайт [3].

NOTE: Имеет смысл перезагрузиться и поправить адреса, в соответствии с новыми IP wan-интерфейса. Перезагрузка нужна, если туннель подключается, но пинги не ходят и извне нельзя достучаться по протоколу ipv6.

Из интересных IPv6-адресов:
2001:4860:4860::8888
2001:4860:4860::8844
Это публичные DNS-сервера Google.

Команда Ping (по протоколу IPv6) в выполняется в Mikrotik следующим образом:

> ping 2001:4860:4860::8888

либо при рабочем преобразовании имён:

> ping [:resolve ipv6.google.com]

Надо получить правильные таблицы маршрутов на клиентах и на роутере,
правильные доступные DNS-сервера.
Можно сделать это 2 путями, с помощью RADVD либо DHCPv6.

RADVD - Router Advertisement Daemon
Простейшее встроенное средство рекламы роутера в сети, на основе которого домашние компьютеры (умеющие это) смогут сформировать свои адреса, получить DNS сервера и полностью стать готовыми для работы в сети IPv6.

Во многих случаях, этого будет достаточно. Это называется Stateless Autoconfiguraton.

Однако, есть и Statefull autoconfiguration которое выполняется DHCPv6 сервисом.


6. DNS

IPv6 без преобразования доменных имен не очень удобно для доступа.
С этим конечно есть некоторые трудности, преодолимые.


IPv6-адреса DNS серверов, могут выдаваться роутером с помощью radvd, либо по протоколу конфигурации хоста DHCPv6.

Чтобы указать выдаваемые клиентами ipv6-адреса DNS серверов, можно их добавить в меню "IP/DNS". Указать их в ipv6-формате.

IPv6 DNS сервера в меню IP/DNS Mikrotik
Надёжное функционирование DNSv6 я ещё не исследовал более подробно, так что могут быть ошибки в конфигурации. Да и вообще, микротик ещё та запутанная штука.




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

1. Клиент (хост) может выполнить команду Ping на адрес: FF02::1 , чтобы найти доступные компьютеры в локальной сети (один широковещательный домен, один хаб, свитч).

На микротике:
[admin@MikroTik] /ping FF02::1

На Ubuntu:
$ ping6 FF02::1%eth0

указывая интерфейс через который надо искать, т.к. адрес немаршрутизируемый.

2. Доступный адрес FF02::2. Список ipv6-адресов роутеров.
Найти роутеры в локальной сети, которые себя рекламируют (Router advertisement) в данном подключении.
Обычно один, но бывает и несколько.


3. FC00::/7 ULA's. Uniq local addresses. Уникальные локальные адреса
Этот префикс можно использовать для статического конфигурирования неприсоединенной IPv6 сети.


4. FE80::/10. Автоматически присваиваемый каждому аппаратному и неаппаратному интерфейсу IPv6-адрес. Т.н. Link-local.
Позволяет сразу обеспечить связь компьютеров.


Тестирование доступности IPv6 сети на клиенте

Перейти по адресам:
test-ipv6.com
ipv6.nic.ru

Ubuntu

ipv6.google.com - спец.сайт, доступный как видно ниже, только по протоколу ipv6.

$ host ipv6.google.com
ipv6.google.com is an alias for ipv6.l.google.com.
ipv6.l.google.com has IPv6 address 2a00:1450:4010:c03::6a


Если DNS преобразование имён доступно, то можно проверить:
$ ping6 ipv6.google.com
$ traceroute6 ipv6.google.com



Windows Vista, 7 и т.п.

В свойствах соединения должен быть включен протокол ipv6.


> ping -6 ipv6.google.com



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

Т.к. компьютеры с поддержкой протокола IPv6 становятся доступными из сети Интернет, то требуется настроить Firewall, на каждом IPv6-подключенном устройстве. Базовые правила можно также настроить и на роутере.
Например, не принимать входящие соединения. Однако может отвалиться ping (icmpv6), если не предусмотреть разрешение.


Отладка

Т.к. технология новая, как работает IPv6 на Mikrotik не совсем понятно, то если что-то не работает, надо начинать с чистого листа - удалить добавленное и перезагрузить роутер, затем начать заново.
Пошагово.
Ещё не все зависимости и особенности выявлены.

Отлаживать скрипты на Mikrotik - это вообще "за гранью".
Основные трудности начинаются после смены динамического ipv4-адреса. Тут вступает в работу скрипт, которые я пока отлаживаю.


Помните, т.к. IPv6-адреса клиентов могут меняться очень часто, при автоподключении, то при использовании внешних утилит, проверяйте каждый раз задаваемый IPv6-адрес.Не используйте извне адреса, содержащие MAC-адрес. Не пытайтесь извне пробовать (ping) автоматические link-local адреса, начинающиеся с префикса FE80:/10, они работают только на конретных линках.

Пример трассировки компьютера, с помощью внешнего сервиса http://www.wservice.info/

1 ipv6.wservice.info 0.965 ms 32.612 ms 0.901 ms
2 2a01:230:3::1 0.568 ms 0.627 ms 0.503 ms
3 khouse-tr1.tcinet.ru 2.660 ms 2.567 ms 2.770 ms
4 KHOUSE-TR2.TCINET.RU 2.331 ms 3.927 ms 2.295 ms
5 * * *
6 2002:XXXX:XXXX::1 39.618 ms 38.146 ms 38.525 ms
7 2002:XXXX:XXXX:1:XXXX:XXXX:XXXX:XXXX 39.453 ms 41.635 ms 39.016 ms


Видно, что щупальце добралось до публичного адреса роутера, а затем полезло в домашний компьютер.

Заметил, что в Ubuntu куда-то часто пропадают IPv6-адреса, и компьютер отваливается от ipv6-сети. Проходит время и опять появляются адреса, уже частично другие. Dmesg команда показывает, что периодически Ethernet-интерфейс уходить в down, а затем поднимается опять. Это что-то видимо Network Manager в Gnome. Короче глючки. Когда ipv6-адреса появляются, то становиться доступным и сеть. Какие-то частые переподключения.

Windows 7 также очень часто обновляет IPv6 адреса. Это было у меня установлено время жизни маленьким, на время отладки (несколько минут).

Похоже это связано с временем жизни префикса:
[admin@MikroTik] /ipv6 nd prefix> print
Flags: X - disabled, I - invalid, D - dynamic
 0  D prefix=2002:XXXX:XXXX:1::/64 interface=bridge-local on-link=yes
      autonomous=yes valid-lifetime=2h preferred-lifetime=1h

Свойство autonomous=yes - это значит параметры будут раздаваться в RA-сообщениях.

2 часа - это 7200 секунд, 1 час соотв. 3600 сек.
Итак, Preffered-lifetime - это основное время жизни префикса (и адреса). В течении этого интервала времени, с этим адресом можно устанавливать новые (NEW) соединения и спокойно обмениваться пакетами. По истечении этого интервала, новые соединения уже нельзя, но существующие ещё можно.
Valid-lifetime можно сделать чуть больше, чем Preffered-lifitime.


Вывод сконфигурированных адресов на Linux host. Видны заданные параметры времени жизни адресов, которые уменьшаются со временем (при повторном запуске команды):
$ ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
3: home: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2002:XXXX:XXXX:1:xxxx:xxxx:xxxx:xxxx/64 scope global temporary dynamic
       valid_lft 6878sec preferred_lft 3278sec
    inet6 2002:XXXX:XXXX:1:xxxx:xxff:fexx:xxxx/64 scope global dynamic
       valid_lft 6878sec preferred_lft 3278sec
    inet6 fe80::xxxx:xxff:fexx:xxxx/64 scope link
       valid_lft forever preferred_lft forever 
У интерфейса home (переименованный eth0) видны автосконфигурированные ipv6-адреса, как на основе MAC-адреса, так и произвольный (в соответствии с Privacy Extensions), он помечен меткой temporary.
Зная MAC-адрес интерфейса (записав его куда-нибудь), зная принцип формирования префикса, можно извне достучаться до домашнего компьютера. Однако, это очень не полезно, т.к. если временный адрес, замучаются перебирать, то по MAC-легко будет добраться до компьютера.
И как я понимаю, со временем, будут сформированы базы данных MAC-адресов, если эти адреса будут передаваться по сети (в силу различных причин, например, указав однажды в качестве пункта назначения).

scope global - видимость глобальная
scope link - видимость в пределах соединения (link-local).

Шестая версия NMap (v6) поддерживает IPv6 полностью.
$ nmap -6 -Pn 2002:XXXX:XXXX:1:XXXX:XXXX:XXXX:XXXX
Starting Nmap 6.00 ( http://nmap.org ) at 2014-01-08 17:33 MSK
Nmap scan report for cetonia (2002:XXXX:XXXX:1:XXXX:XXXX:XXXX:XXXX)
Host is up (0.00027s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds

Вот и видно, что SAMBA (SMB/CIFS) висит на своих портах и доступна по протоколу ipv6 (это лучше видно с добавочной опцией -sV).


Скрипт автообновления

Скрипт для автоматического обновления ipv6-адресов, если wan-интерфейс имеет белый динамический ipv4-адрес. Если серый, то ничего не будет работать. Я нашёл в инете какой-то скрипт, который у меня не работал и переделал под свои условия. Получился длинный, т.к. скриптовый язык Mikrotik не очень развит, отсутствуют многие функции (преобразование в шестнадцатиричный вид), которые пришлось написать.
Важную роль играет комментарий к ipv6-адресу, по которому этот скрипт находит его, чтобы изменить префикс.
Его надо запускать, после того как сформированы ipv6 адреса, и поднят туннель 6to4, и сеть ipv6-работает.

Вот такой костыль. Выделять куском и вставлять в окно скриптов.
А потом добавить в расписание запуск этого скрипта, с определённым интервалом. (10 минут или по желанию).

Микротику надо задуматься об добавлении функций в скриптовый язык.

# IPv6 6to4-tunnel endpoint update script
# Automatic update IPv6 address of 6to4 tunnel endpoint when internet connection IPv4 address changed (reconnect)
# Applicable for pppoe (adsl) connection and l2tp with dynamic routed IPv4 address
# Periodic (according setting sheduler) check internet connection IPv4 address and update tunnel endpoint when needed
# Host: router, Mikrotik
# Date: 25.02.2014
# RU: http://gimmor.blogspot.com/2014/01/6to4-ipv6-tunnel-mikrotik-rb951g-2hnd.html

# NOTE: if wan interface down or tunnel disabled then nothing happen.

:local waninterface;
:local 6to4interface;
:local wanaddress;
:local PubAddrComment;
:local SubnetAddrComment;

# IPV4 provider internet connection with routed (white) IPv4 address available on waninterface
:set waninterface "wan";

# 6to4 tunnel
:set 6to4interface "ipng";


# The special lables within comments of ipv6 address needed for script update
:set PubAddrComment "6to4public";
:set SubnetAddrComment "6to4subnet";


# START MAIN LOGIC

:log info "IPv6 6to4-tunnel endpoint update script start...";

:local wanup;
:local ipngup;

# needupdate - flag meens prfixes update needed
# default - false no need update
:local needupdate false;

# Check interfaces up and running
:set wanup (:put [/interface get [/interface find name=$waninterface] running; ]);
:set ipngup (:put [/interface get [/interface find name=$6to4interface] running; ]);

:log info "Wan Interface state: $wanup";
:log info "IPv6 tunnel interface state: $ipngup";

# STARTIF
:if (wanup) do={
:log info "IPv6. WAN interface $waninterface up and running"
:if (wanup && ipngup) do={
:log info "IPv6 tunnel seems to be up and ready to update endpoint";
# Update 6to4 tunnel connection when address changed
:set wanaddress [/ip address get [/ip address find interface=$waninterface] address];
:set wanaddress [:pick [:tostr $wanaddress] 0 [:find [:tostr $wanaddress] "/"]];
#:log info [:put $wanaddress];
:local tunnellocaladdress;
:set tunnellocaladdress [:put [/interface 6to4 get [/interface 6to4 find name=$6to4interface] local-address]];
#:log info $tunnellocaladdress;
:if ($tunnellocaladdress!=$wanaddress) do={
:set needupdate true;
:log info "IPv6. Need update 6to4 tunnel endpoint local-address";

# Disable addresses and tunnel interface prior changes
/ipv6 address disable [find comment=6to4public]
/ipv6 address disable [find comment=6to4subnet]
/interface 6to4 disable $6to4interface;

/interface 6to4 set ($6to4interface) local-address=$wanaddress;
:log info "IPv6. 6to4 tunnel endpoint updated with new local-address $wanaddress";
} else={
:log info "IPv6. No need update 6to4 tunnel endpoint local-address.";
:log info "IPv6. Current tunnel local-address $tunnellocaladdress and WAN address $wanaddress";
}
} else={
:log info "IPv6. 6to4 tunnel $6to4interface needed to be enabled";
}
} else={
:log info "IPv6. IPv4 internet connection (WAN interface) $waninterface must be enabled";
}
# ENDIF




:global toHexDigit do={
:local hexsym;
:set hexsym "0";
:if ($digit < 10) do={ :set hexsym (:tostr $digit); }
:if ($digit = 10) do={ :set hexsym "a"; }
:if ($digit = 11) do={ :set hexsym "b"; }
:if ($digit = 12) do={ :set hexsym "c"; }
:if ($digit = 13) do={ :set hexsym "d"; }
:if ($digit = 14) do={ :set hexsym "e"; }
:if ($digit = 15) do={ :set hexsym "f"; }
:return $hexsym;
};

# Transform ipv4 address into specifix ipv6 address with 2002: prefix and bind to 6to4interface
# 2002:XXXX:XXXX::1
# XXXX:XXXX - a hexadecimal form of public "routed" WAN address stored in wanaddress variable

:local 6to4prefix;
:set 6to4prefix "2002:";

#:log info "STARTF";
{
:local outstr;
:set outstr "";
:local dotpos;
:local numer;

:for i from=1 to=3 do={
:set dotpos [:find $wanaddress "."];
:set numer [:pick $wanaddress 0 $dotpos];
:set wanaddress [:pick $wanaddress ($dotpos + 1) 16];
:if (i=1) do={
 :set outstr ([:put $numer]);
} else={
 :set outstr ([:put $outstr] . "," . [:put $numer]);
};
};
:set outstr ([:put $outstr] . "," . [:put $wanaddress]);
#:log info [:put $outstr];

# Translate array of decimal values into hex values within array
:local octets;
:set octets [:toarray $outstr];
:local j;
:set j (1);
:local outstr;
:foreach octet in=$octets do={
 :local output;
 :local left;
 :local right;
 :local leftsym;
 :local rightsym;
 :set left ($octet / 16);
 :set right ($octet - ($left * 16));
 :set leftsym [:put [$toHexDigit digit=$left]];
 :set rightsym [:put [$toHexDigit digit=$right]];
 :set output ([:put $leftsym] . [:put $rightsym]);
# :log info ([:put $octet] . [:put $output]);
 :if (j=1) do={
  :set outstr ([:put $output]);
 } else={
  :set outstr ([:put $outstr] . "," . [:put $output]);
 };
 :set j ($j + 1);
# :log info [:put $outstr];
};
:local hexoctets;
:set hexoctets [:toarray $outstr];
#:log info [:put $hexoctets];

# Translate array of hex values into required ip prefix
:local ippref;
:set ippref "";
:local kd;
:set kd (1);
:foreach oct in=$hexoctets do={
# :log info [:put $oct];
 :set ippref ([:put $ippref] . [:tostr $oct]);
 :if (kd=2) do={ :set ippref ([:put $ippref] . ":") };
 :set kd ($kd + 1);
};
#:log info [:put $ippref];

# Forming final ipv6 prefix
:local myprefix;
:set myprefix ([:put $6to4prefix] . [:put $ippref]);
:log info ("IPv6. Global IPv6-prefix calculated: " . [:put $myprefix]);

# Update IPv6 white address of 6to4 interface (tunnel)
:foreach i in=[/ipv6 address find interface=$6to4interface] do={
:local addr [/ipv6 address get $i address];
:local cmnt [/ipv6 address get $i comment];
:local name [/ipv6 address get $i interface];
#:log info [:put $i];
#:log info ([:put $name] . [:put $addr]);
#:log info ([:put $cmnt]);
:if ($cmnt=$PubAddrComment) do={
:local newaddr ($myprefix . "::1/16");
if (needupdate) do={
[/ipv6 address set $i address=$newaddr];
 :log info ("IPv6. Changed ipv6-address of interface " . $name . " from " . $addr . " to " . $newaddr);
} else={
 :log info ("IPv6. No changes ipv6-address of interface " . $name . " from " . $addr . " to " . $newaddr);
}
};
}

# Update IPv6 white addresses for LAN

:foreach i in=[/ipv6 address find] do={
:local addr [/ipv6 address get $i address];
:local cmnt [/ipv6 address get $i comment];
:local name [/ipv6 address get $i interface];

:if ($cmnt=$SubnetAddrComment) do={
#:log info ([:put $name] . " " . [:put $addr]);
:local tmp;
:local pos;
:set tmp $addr;
:for j from=0 to=2 do={
 :set pos [:find $tmp ":"];
 :set tmp [:pick $tmp ($pos + 1) 99];
 :if ($j=2) do={
  :set pos [:find $tmp ":"];
  :local newaddr ($myprefix . ":" . [:pick $tmp 0 $pos] . "::1/64");
if (needupdate) do={
[/ipv6 address set $i address=$newaddr];
 :log info ("IPv6. Changed ipv6-address of interface " . $name . " from " . $addr . " to " . $newaddr);
} else={
 :log info ("IPv6. No changes ipv6-address of interface " . $name . " from " . $addr . " to " . $newaddr);
}
 }
}
};
};

# Check another things

};
#:log info "ENDF";

:if (needupdate) do={
:local ipv4addr [/ip address get [find interface=$waninterface] address ]
:local ipv6addr [/ipv6 address get [find comment=6to4public] address ]

# Enable interface and addresses
/interface 6to4 enable $6to4interface
/ipv6 address enable [find comment=6to4public]
/ipv6 address enable [find comment=6to4subnet]

}

:log info "IPv6 End of script Ho-Ho!";





Выводы

Удивительно, до сих пор требуется ручная настройка подключений к сети, с кучей неясных зависимостей. Ха-Ха.
6to4 штука интересная, но надо трясти провайдеров на предмет предоставления нормальной ipv6-сети.

Логика настройки роутера Микротик состоит в том, что вначале готовяться настройки нижнего уровня, а затем верхнего. Т.е. пример - вначале делается pool адресов, а затем конфигурируется DHCP на его основе.


Ресурсы
1. Setting up an IPv6 tunnel via 6to4. http://wiki.mikrotik.com/wiki/Setting_up_an_IPv6_tunnel_via_6to4
. http://www.mikrotik-routeros.com/2010/09/ipv6-and-mikrotik-using-6to4/
. http://6to4.ru/
- Тестирование связи извне по протоколу IPv6. http://www.wservice.info/
- http://wiki.mikrotik.com/wiki/Manual:IPv6_Overview
- IPv6 подключения к Микротику, по протоколу PPP. http://wiki.mikrotik.com/wiki/Manual:IPv6_PD_over_PPP
. http://blog.kladov.su/2013/11/6to4-mikrotik.html
. http://version6.ru/6to4/to-lan
- IPv6 шлюз для локальной сети. http://habrahabr.ru/post/134797/
. http://version6.ru/ip6tables
- IPv6 Address architecture. http://tools.ietf.org/rfc/rfc4291.txt
- IPv6 провайдеры. http://version6.ru/isp
. Internet Protocol Version 6 (IPv6). http://msdn.microsoft.com/en-us/library/windows/desktop/ms738570%28v=vs.85%29.aspx
Настройка IPv6 на OpenWRT. http://wiki.rnet.ru/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_ipv6_%D0%BD%D0%B0_openwrt
. http://www.mikrotik.by/index.php?showforum=1
. http://tools.ietf.org/html/rfc3056
. http://tools.ietf.org/rfc/rfc2461.txt
. http://wiki.mikrotik.com/wiki/Manual:IPv6/Address
. https://mebsd.com/ipv6-ping-and-traceroute
. http://ipv6-or-no-ipv6.blogspot.ru/2011/11/ipv6-fun-defaced.html

5 комментариев:

Unknown комментирует...

[oleg@ROUTER] > /ipv6 add address=2002:d949:5b8d:1::1/64 advertise=yes comment=6to4subnet disabled=no eui-64=no interface=bridge-local
syntax error (line 1 column 18)
[oleg@ROUTER] >

Unknown комментирует...

неправильный синтаксис. надо:
/ipv6 address add address=2002:d949:5b9d:1::1/64 advertise=yes comment=6to4subnet disabled=no eui-64=no interface=bridge-local

jm комментирует...

В моем случае так же пришлось на интерфейсе клиентов выключить рассылку RA. На интерфейсах в Win10 он был включен.

netsh interface ipv6 set interface "Local Area Connection" advertise=disable

SHYAM комментирует...

Really its very useful information that you have shared and thanks for sharing the information with us.
HP Deskjet 1018 Driver

Dmitriy комментирует...

Надо же, 2018 год, а до сих пор получить IPv6 у своих провайдеров я не могу.