Обновление ipv4 окончания для 6to4 туннеля he.net

Автоматизация при помощи встроенного скриптового языка и RouterOS API
mos6581
Сообщения: 4
Зарегистрирован: 12 фев 2017, 13:09

Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение mos6581 »

Немного переделал вот этот скрипт.
Добавилось https, другой способ передачи логина и ключа

UPD: 14/02/17 Исправлена жесткая передача IPv4-адреса WAN-интерфейса и строка запроса с http на https

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

# Update Hurricane Electric IPv6 Tunnel Client IPv4 address

:local HEtunnelinterface "6to4 Interface name"
:local HEtunnelid "Tunnel ID"
:local HEuserid "Username"
:local HEmd5pass "Update Key"
:local HEupdatehost "ipv4.tunnelbroker.net"
:local HEupdatepath "/nic/update"
:local WANinterface "WAN Interface name"
:local outputfile ("HE-" . $HEtunnelid . ".txt")

# Internal processing below...
# ----------------------------------
: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 " . $HEtunnelinterface . " local-address with new IP " . $HEipv4addr . "...")
      set ($HEtunnelinterface) local-address=$HEipv4addr
   }
}

:log info ("Updating IPv6 Tunnel " . $HEtunnelid . " Client IPv4 address to new IP " . $HEipv4addr . "...")
/tool fetch mode=https \
                  host=($HEupdatehost) \
                  url=("https://" . $HEupdatehost . $HEupdatepath . \
                          "?hostname=" . $HEtunnelid . \
                          "&myip=" . $HEipv4addr) \
                  user=($HEuserid) \
                  password=($HEmd5pass) \
                  dst-path=($outputfile)
                  
:log info ([/file get ($outputfile) contents])
/file remove ($outputfile)
Удобно запускать по факту поднятия PPP-соединения (если WAN через него), прописав скрипт в параметре On Up в ppp rofile. В ином случае закускать по шедуллеру.
Последний раз редактировалось mos6581 14 фев 2017, 10:37, всего редактировалось 1 раз.
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение Chupaka »

Можно я его туда же в Вики добавлю? На кого сослаться?
mos6581
Сообщения: 4
Зарегистрирован: 12 фев 2017, 13:09

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение mos6581 »

Да, без проблем. Можно так и сослаться на mos6581.
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение Chupaka »

Так, только малюсенькое уточнение... Там добрая часть скрипта предназначена для выяснения HEipv4addr. И в новом запросе этот адрес не используется (определяется на стороне HE автоматически?). Если оно не надо - то половину скрипта, получается, можно выкинуть?
mos6581
Сообщения: 4
Зарегистрирован: 12 фев 2017, 13:09

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение mos6581 »

Вы правы, тут недоработка в следствие того, что сервис сам определяет IPv4 адрес с которого пришел запрос. Дополненный скрипт, который передает IPv4-адрес с указанного WAN-интерфейса:

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

# Update Hurricane Electric IPv6 Tunnel Client IPv4 address

:local HEtunnelinterface "6to4 Interface name"
:local HEtunnelid "Tunnel ID"
:local HEuserid "Username"
:local HEmd5pass "Update Key"
:local HEupdatehost "ipv4.tunnelbroker.net"
:local HEupdatepath "/nic/update"
:local WANinterface "WAN Interface name"
:local outputfile ("HE-" . $HEtunnelid . ".txt")

# Internal processing below...
# ----------------------------------
: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 " . $HEtunnelinterface . " local-address with new IP " . $HEipv4addr . "...")
      set ($HEtunnelinterface) local-address=$HEipv4addr
   }
}

:log info ("Updating IPv6 Tunnel " . $HEtunnelid . " Client IPv4 address to new IP " . $HEipv4addr . "...")
/tool fetch mode=https \
                  host=($HEupdatehost) \
                  url=("https://" . $HEupdatehost . $HEupdatepath . \
                          "?hostname=" . $HEtunnelid . \
                          "&myip=" . $HEipv4addr) \
                  user=($HEuserid) \
                  password=($HEmd5pass) \
                  dst-path=($outputfile)
                  
:log info ([/file get ($outputfile) contents])
/file remove ($outputfile)
Последний раз редактировалось mos6581 14 фев 2017, 10:35, всего редактировалось 1 раз.
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение Chupaka »

Ещё вопрос, пока проверить, к сожалению, нет времени: как согласуются 'mode=https' и 'url=("http://"'?..
mos6581
Сообщения: 4
Зарегистрирован: 12 фев 2017, 13:09

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение mos6581 »

В данном случае ни на что не влияет, запрос все равно идет по https, но для чистоты картины этот момент надо поправить, спасибо за замечание.
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение Chupaka »

Фух, ура, добрались руки в Вики обновить :)
ZeratuLx
Сообщения: 1
Зарегистрирован: 17 апр 2018, 18:59

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение ZeratuLx »

А можно сделать так, чтобы брался не local adress с pppoe интерфейса, а remote????
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение Chupaka »

Видимо, вместо address вам нужен network?

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

:set HEipv4addr [/ip address get [/ip address find interface=$WANinterface] network]
GDragon
Сообщения: 1
Зарегистрирован: 23 апр 2018, 17:17

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение GDragon »

У меня на кусок

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

:set HEipv4addr [/ip address get [/ip address find interface=$WANinterface] address]
Ругается, прошивка 6.41.3

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

:set HEipv4addr [/ip address get [find interface=$WANinterface disabled=no] address]
Вот так работает.

p.s.
Я скрипт не через шедулер а через нетватч на ipv6 адрес другого конца туннеля повесил, всё равно провайдер ипв6 не даёт :)
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Обновление ipv4 окончания для 6to4 туннеля he.net

Сообщение Chupaka »

Ругается какими словами?