Меню
Контакты
109147, Москва, ул.Воронцовская, 35Б, корп.2 офис.11, 4 этаж
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
109147, Москва, ул.Воронцовская, 35Б, корп.2 офис.11, 4 этаж
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

Mikrotik 6to4 автоматизация при динамическом IPv4

 06 Май 2017    MikroTik, Scripts

Эта статья будет полезна тем, кто хочет испытать IPv6 по протоколу инкапсуляции 6to4, но имеющего динамический IPv4.

Mikrotik IPv6

Первым делом, проверим, есть ли у вас возможность использовать публичный 6to4 шлюз, пингуем его по адресу: 192.88.99.1. Если пинг идет, читаем дальше.

Итак, для начала, нужно установить модуль поддержки IPv6 (скачиваем Extra packages для вашего устройства с сайта). Из архива вытаскиваем ipv6-*.npk и заливаем его на роутер, затем перезапускаем его.

Теперь у вас есть поддержка IPv6, учтите, что правила firewall для неё нужно делать отдельно.

Настройка 6to4

Далее, создаем специальный интерфейс «6to4 Tunnel», в Remote Adress ставим адрес публичного шлюза, в Local Adress наш текущий публичный IPv4 адрес (или «ошибаемся» в адресе, что-бы скрипт настроил все сам).

В маршрутизации нужно настроить интерфейс туннеля как шлюз по умолчанию (до адреса ::/0). Теперь можем проверить, есть ли пинг до чего-нибудь из IPv6 (к примеру ipv6.google.com) Если пинги есть, то идем далее:

Скрипт автонастройки

 

 

##############Script Settings##################

:local EXTif "ext"
:local TUNif "6to4tun"
:local LOCif "local"
###############################################

:local EXTipv4 [/ip address get [find interface=$EXTif] address];
:local TUNipv4 [/interface 6to4 get [find name=$TUNif] local-address];

:for i from=( [:len $EXTipv4] - 1) to=0 do={ 
	:if ( [:pick $EXTipv4 $i] = "/") do={ 
		:set $EXTipv4 ([:pick $EXTipv4 0 $i]);
	}
}

:global dec2hex do={
	:local hex ""
	:local dec [:tonum $1]
	:for i from=0 to=4 step=4 do={
		:set hex ([:pick "0123456789ABCDEF" (($dec>>$i)&0xf) ((($dec>>$i)&0xf)+1)].$hex)
	}
	:return ([:tostr $hex])
}
:local 6to4prefix do={
	:global dec2hex
	:local oct
	:local ipv6 "2002:"
	:local tmp 0
	:local c 0
	:local ipv4 $1
	:for i from=0 to=( [:len $ipv4] - 1) do={ 
		:if ( [:pick $ipv4 $i] = "." || [:pick $ipv4 $i] = "/") do={ 
			:set oct ([:pick $ipv4 $tmp $i])
			:set tmp ($i+1)
			:set ipv6 ("$ipv6".[$dec2hex $oct])
			:if ( c =1 || c =3) do={ 
				:set ipv6 ("$ipv6".":")
			}
			:set c (c+1)
		}
	}
	:return ($ipv6)
}
:if ( $TUNipv4 != $EXTipv4 ) do={
	/interface 6to4 set [find name=$TUNif] local-address=$EXTipv4
	/ipv6 address remove  [find interface=$TUNif]
	/ipv6 address remove  [find interface=$LOCif]
	:local ipv6new [$6to4prefix ($EXTipv4."/")]
	:log info ($ipv6new)
	/ipv6 address add interface=$TUNif advertise=no address=("$ipv6new".":1/48")
	/ipv6 address add interface=$LOCif advertise=yes address=("$ipv6new".":1/64")
}

 

 

В скрипте нужно установить переменные, отвечающие за интерфейсы, которые мы настраиваем:

  • EXTif — внешний интерфейс
  • TUNif — туннельный интерфейс
  • LOCif — локальный интерфейс

Запустив скрипт, мы получим сконфигурированный туннель и локальный интерфейс с префиксом /64.

Теперь добавим этот скрипт в планировщик (я запускаю каждые 5 минут), и при смене внешнего IPv4, с небольшой задержкой 6to4 будет перенастроен.

Какие сложности вас ждут?

Клиенты получают IPv6 с помощью SLAAC, и нет возможности задать DNS и шлюз (Win клиенты получают только шлюз через RA). В Mikrotik есть DHCPv6, но толку от него ещё мало (не доделан он в полной мере).

Для поддержки DNS в самом Mikrotik выставляем известные публичные сервера (к примеру 2620:0:ccc::2 и 2620:0:ccd::2), у клиентов можно настроить link local адрес Mikrotik.

Источник