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

Здесь выкладываем скрипты
Ответить
Madbutcher
Сообщения: 6
Зарегистрирован: 25 янв 2018, 11:31

19 фев 2018, 11:45

Здравствуйте,

Имеем Микротик CCR1009
хочется настроить тунель 6to4, пользуясь инструкцией: https://habrahabr.ru/post/326076/
ничего не получилось...
скрипт из той инструкции не завёлся, может быть в нём ошибка?
-----------------------------------------------------------------------------------\
##############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")
}
---------------------------------------------------------------------------------------------------------\

Может быть у кого то есть удачный опыт настройки 6to4 с динамическим ИП от провайдера?


Alexiys
Сообщения: 2
Зарегистрирован: 12 май 2018, 22:19

12 май 2018, 22:39

сама ipv6 работает? Проблема только в обновлении актуального ip?
Версия Ros какая? В последних версиях как я понял регулярки несколько изменили.


Alexey.Somov
Сообщения: 1
Зарегистрирован: 20 июн 2018, 09:26
Контактная информация:

20 июн 2018, 09:43

# Update Hurricane Electric IPv6 Tunnel Client IPv4 address
# This is an upgrade to an existing script from
# http://wiki.mikrotik.com/wiki/Hurricane ... nt_updater
# API call format:
# https://#USERNAME:$API_KEY@ipv4.tunnelbroker.net/nic/update?username=$USERNAME&password=$API_KEY&hostname=$TUNNEL_ID
# ----------------------------------
# Modify the following to match your parameters
# ----------------------------------

# Router's WAN interface name
:local WANinterface "xxxxxxx"

# Router's 6to4 interface name
:local HEtunnelinterface "xxxxxx"

# Your username - you use it to log in at https://tunnelbroker.net
:local HEuserid "xxxxxx"

# Tunnel ID (not name) as written in your tunnel's details at https://tunnelbroker.net
:local HEtunnelid "xxxxxxx"

# Your Update Key for this tunnel, as written in the "Advanced" tab on tunnel details page
:local HEkey "xxxxxxxxx"

# ----------------------------------
# STOP modifying here
# ----------------------------------
# Internal processing below...
# ----------------------------------
:local HEupdatehost "ipv4.tunnelbroker.net"
:local HEupdatepath "/nic/update?"
:local outputfile ("HE-" . $HEtunnelid . ".txt")
:local HEipv4addr

# Get WAN interface IP address
:set HEipv4addr [/ip address get [/ip address find interface=$WANinterface] address]
:set HEipv4addr [:pick [:tostr $HEipv4addr] 0 [:find [:tostr $HEipv4addr] "/"]]

:if ([:len $HEipv4addr] = 0) do={
:log error ("Could not get IP for interface " . $WANinterface)
:error ("Could not get IP for interface " . $WANinterface)
}

# Update the HEtunnelinterface with WAN IP
/interface 6to4 {
:if ([get ($HEtunnelinterface) local-address] != $HEipv4addr) do={
:log info ("Updating IPv6 Tunnel " . $HEtunnelid . " Client IPv4 address to new IP " . $HEipv4addr . "...")
disable $HEtunnelinterface

/tool fetch mode=https host=($HEupdatehost) url=("https://" . $HEuserid . ":" . $HEkey . "@" . $HEupdatehost . $HEupdatepath . "&username=" . $HEuserid . "&pass=" . $HEkey . "&hostname=" . $HEtunnelid) dst-path=($outputfile)

# Change the client IPv4 address
set ($HEtunnelinterface) local-address=$HEipv4addr

# I like to make a little pause before enabling the interface
/delay 3

# Enable the IPv6 interface
enable $HEtunnelinterface

# Append the file to log for review
:log info ([/file get ($outputfile) contents])

# Clean up after ourselves
/file remove ($outputfile)

} else={
# If client's IPv4 didn't change at all, put it in the log so that we know the script is working
:log info ("Updating " . $HEtunnelinterface . " No change, IP is still " . $HEipv4addr )
}
}

потом в sheduler вставляем выполнение скриптика каждые 10 мин вполне рабочий скрипт


6y6JluK
Сообщения: 1
Зарегистрирован: 04 дек 2019, 18:05

04 дек 2019, 18:14

Есть еще такой скрипт:

Код: Выделить всё

:local wanip [ip cloud get public-address]
/interface 6to4 set sit1 local-address=$wanip
/tool fetch http-method=put http-data=$wanip url="https://USERNAME:KEY_FROM_SITE@ipv4.tunnelbroker.net/nic/update?hostname=NUMBER" 
Где

Код: Выделить всё

https://USERNAME:KEY_FROM_SITE@ipv4.tunnelbroker.net/nic/update?hostname=NUMBER
Берется в личном кабинете HE с подстановкой своих значений.


Ответить