Страницы

Показаны сообщения с ярлыком IPv6. Показать все сообщения
Показаны сообщения с ярлыком IPv6. Показать все сообщения

вторник, 1 мая 2018 г.

Mikrotik simple IPv6 ULA Unique local addresses. Простое правило планирования приватных сетей

Когда нет возможности нормально использовать глобальную сеть IPv6 - провайдер не предоставляет глобальные IPv6-префиксы, а поддержку и отладку сервисов на совместимость с IPv6 надо, то самое разумное (определённое стандартом rfc4193) использовать уникальные локальные адреса IPv6 - Unique local addresses (ULA).

Для этих адресов выделен специальный префикс, который не маршрутизируется на граничных маршрутизаторах. Т.е. он используется только в рамках домашних подсетей.

В принципе, это можно не делать, но подтянуть свою домашнюю инфраструктуру к готовности к IPv6 уже надо бы. 2018 год на дворе.

Префикс ULA начинается с FD. FD00::/8. F - сразу становится понятно FICTION - фиктивый.

Итак, сложное - это генерация 56-битной части префикса ULA. Её 40-бит Global ID и 16-бит Subnet-ID.
Но для этого есть калькулятор, доступный в web: https://www.ultratools.com/tools/rangeGenerator

После нажатия кнопки GO, выдаётся несколько строк, которые можно сохранить в блокноте.
Prefix/L:  fd

Global ID:  2b96cddd52

Subnet ID:  f1ad

Combine/CID:  fd2b:96cd:dd52:f1ad::/64

IPv6 addresses:  fd2b:96cd:dd52:f1ad::/64:XXXX:XXXX:XXXX:XXXX

Start Range:  fd2b:96cd:dd52:f1ad:0:0:0:0

End Range:  fd2b:96cd:dd52:f1ad:ffff:ffff:ffff:ffff

No. of hosts:  18446744073709551616



Заметка, не об этом, а о том, как подключить их в Mikrotik.

Итак, Mikrotik RouterOS 6.40.1.

Идеальная последовательность настройки IPv6 в Mirkotik RouterOS у меня сложилась в несколько шагов.

1. GROUP. Сгруппировать подсети устройств. Обычно, все проводные и беспроводные клиенты подключены в один мост. Я же делаю несколько мостов и подсетей, а между ними маршруты и пр. Это вкладки bridge, interfaces.

2. GET ULAs. Далее понять, что для каждой подсети (группы устройств) нужен свой ipv6-префикс, сгенерированный на сайте. Выделен жёлтым: fd2b:96cd:dd52:f1ad::/64
Тут кроется ошибка многих российских провайдеров - считать роутер клиента - одним устройством с /64 префиксом. Ан нет. У клиента в роутере набилось несколько потребителей /64 префиксов.


3.  POOL. Начать настройку лучше всего, с занесения выделенных префиксов в разделе IPv6/Pool. Сколько подсетей, минимум столько и пулов. Полученное значение ipv6-префикса заносится в поле Prefix, длина остаётся - 64, тогда работает протокол автоконфигурации SLAAC.

4. ADDRESS. Добавить IPv6-адрес из пула, привязав его к каждому выбранному мосту. У меня мост (bridge) для проводных клиентов. мост для беспроводных и другие подсети (по функциям).

5. ADVERTISE. Разрекламировать с помошью встроенного агента RADVD на конкретных интерфейсах (мостах), в разделе IPv6/ND (Neighbor Discovery). Клиенты подключенные к мостам сразу получат адреса с этими префиксами.





Т.е. принцип, заложенный в web-интерфейс - это в начале всё подготовить, все данные, залезая вглубь вкладок, а затем настроить на главных вкладках конечно. Master-Slave.
Такая схема, в туннелях и т.п.


※※※

понедельник, 30 апреля 2018 г.

IPv6 over OpenVPN в VPS Ubuntu 16.04.3 LTS

Для сервера на Ubuntu 16.04.3 LTS, со статическим IP-адресом (ради чего и  затевалось) достаточно просто  настроить IPv6 адресацию, посредством автоматического туннеля 6to4.
Далее, можно выданные подсети IPv6 распространить на тунельное подключение OpenVPN.
Клиенты OpenVPN смогут получить маршрутизируемые IPv6 адреса и стать доступными из сети Интернет.
Таким образом, обойдя NAT/NAT/NAT в цепочке подключения к ip-сети в своём городе, можно получить подключение к настоящей сети Интернет.
Настоящая сеть Интернет, даёт возможность оставить дома включённый компьютер, дисковый массив или камеру, уехать на край света и беспроблемно получить доступ - будь то VNC, FTPS, webdav - да что угодно.

В российской мобильной индустрии уже начали предлагать доступ к IPv6. Некоторые провайдеры тоже обеспечивают выдачу клиенту желаемого, но не всегда так, как хотелось бы - пока экспериментируют, смотрят.
Стоп, а что-же я жду и не бегу за 4g модемом и подключением. А ну да, отсутствует конкурентное тарифное предложение.


Итак, единственная трудность для подключения автоматического туннеля ipv6 - это как раз преобразование статического IP-адреса в шестнадцатиричный вид, чтобы поместить его в ipv6-префикс.
Но для этого есть сервисная страница по адресу:  6to4.version6.ru

А дальше, в файл /etc/network/interfaces вносится определение туннеля, полученное по ссылке выше на основе IP-адреса сервера, вот так:


auto tun6to4
iface tun6to4 inet6 v4tunnel
    pre-up modprobe ipv6
    address 2002:XXXX:XXXX::1
        netmask 16
    gateway ::192.88.99.1
    endpoint any
    local XX.XXX.XX.XXX


# If you have set up an IPv6-capable firewall (and you should),
# it can be enabled by using an "up" rule, such as the example below.
#       up /usr/local/sbin/ipv6firewall.sh tun6to4


local XX.XXX.XX.XXX - это IPv4-адрес сервера.
2002: - это префикс для туннелей 6to4.
XXXX:XXXX - IPv4-адрес сервера, в шестнадцатиричном формате.

После этого, стартуертся интерфейс:

ifup tun6to4


Для клиентов OpenVPN делается правка (3 строчки) для поддержки IPv6 в туннеле:

# OpenVPN server KVM1
# Open Virtual Private Network server test configuration
# server: kvm1
# date: april 28, 2018

port 1194
proto tcp
dev tun

# Certificate Authority (CA) - public key
ca /etc/openvpn/authorities/authority.crt
# Certificate - public key of the server, signed with CA private key via request
cert /etc/openvpn/keys/testserver.crt
# Private key (key) - secret data, private key of server
key /etc/openvpn/keys/testserver.key

# Diffie Hellman parameters
# openssl dhparam -out dh2048.pem 2048

dh /etc/openvpn/keys/dh2048.pem

# IP-address of the server
local 81.177.6.229

keepalive 10 120

topology subnet
server 192.168.6.0 255.255.255.0
push "route 192.168.6.0 255.255.255.0"
push "redirect-gateway def1"

# IPv6 support
server-ipv6 2002:XXXX:XXXX:abcd::/64
push "route-ipv6 2000::/3"
push "dhcp-option DNS 2001:4860:4860::8888"


abcd - это префикс, выделенный (придуманный мной) для подсети клиентов openvpn.

Это пока не полная конфигурация openvpn на стороне сервера, т.к. там ещё много всяких фишек, которые можно применить для своих задач. Учебная конфигурация.

После получение IPv6-адресов, настольные компьютеры становятся беззащитными. Но они, пока ещё в разряде тех, кто никому не нужен.

Для каждого надо настроить защиту от подключений и пр.
Это позже.

Также замечу, что нужно настроить форвардинг пакетов (IPv4 и IPv6 в туннель. Маскарад и пр. правила netfilter.


P.S. Всё меньше и меньше мне нравится Mikrotik. Своей замшелостью и запутанностью интерфейса, неявными проблемами. Не могу пока настроить его в качестве openvpn-клиента к vps-серверу, так, чтобы и клиенты роутера получали доступ к настоящей сети Интернет. IPv4 режим работает, а IPv6 где-то засада.


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

※※※

четверг, 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

понедельник, 4 апреля 2011 г.

Ответ, почему нет IPv6. Answer, Where is IPv6

IPv4 - 32 bit
4,294,967,295 x (2$ -- 5$) = 8,58*GigaBaks$ -- 21.45*GigaBaks$

P.S. Giga = 10^9