Обновите IPv4 и IPv6 в DuckDNS с маршрутизаторов ASUS с помощью Asuswrt-Merlin

Некоторое время назад мне нужно было найти способ удаленного доступа к Роутер ASUS RT-AC86U в связи с Кларо (антига NET) кто недавно начал использовать CGNAT, другими словами, Я больше не могу получить к нему доступ по IPv4, как раньше. Решение, которое я нашел, заключалось в доступе через IPv6.. Но, Служба динамического DNS ASUS не поддерживает IPv6. O Утиный DNS поддерживает IPv6, поэтому я решил использовать его.

Рассматриваемый роутер имеет прошивку Asuswrt-Merlin, который позволяет использовать скрипт, который вызывается при каждом обновлении динамического DNS. Так, я создал один ddns-старт с содержанием из этого сценария, предоставленного kevinxw, однако немного изменив его, чтобы ввести субдомен и токен непосредственно в скрипте, так как я использовал DuckDNS в качестве дополнения к собственному динамическому DNS-сервису ASUS.:

#!/бин/ш

# зарегистрировать субдомен на https://www.duckdns.org/, чтобы получить свой токен
# put 'hostname|token' in the 'Host Name' field under DDNS
# например. мой хозяин|abcdefgh-1234-5678-9876-f71b0ed7a7fe

ПОДДОМЕН=
ТОКЕН=
ИПВ4=$(nvram получить wan0_ipaddr)
ИПВ6=$(nvram получить ipv6_wan_addr | awk -F'/' '{Распечатать $1}')

ЗАПРОС_URL="https://www.duckdns.org/update?домены=${ПОДДОМЕН}&токен=${ТОКЕН}&IP=${IPv4}&ipv6=${IPv6}"

регистратор "URL-адрес запроса DDNS: ${REQUEST_URL}"

# никаких изменений ниже не требуется
РЕЗУЛЬТАТ=$(завиток -- тихий "${REQUEST_URL}" 2>&1)
регистратор "Результат запроса DDNS: $РЕЗУЛЬТАТ"

если [[ "$РЕЗУЛЬТАТ" == "Хорошо" ]];
тогда
  /sbin/ddns_custom_updated 1
еще
  /sbin/ddns_custom_updated 0
фи

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

Европа у меня такой же роутер и мое соединение Vivo Fibra не использует CGNAT, и у меня есть действительный IPv4, но я решил установить то же самое решение на свой маршрутизатор, просто чтобы иметь еще одну альтернативу. Проблема в том, что рассматриваемый скрипт вообще не мог получить IPv6 на моем роутере.

С использованием NVRAM в самом терминале я понял, что нить ipv6_wan_addr всегда пуст, Он знает, потому что. Я считаю, что разница с другим маршрутизатором заключается в том, что я использую PPPoE. (с ONU Vivo в мост), в то время как другой маршрутизатор использует DHCP (с модемом Кларо тоже в мост), из-за разницы в работе сети двух операторов.

Решение, которое я нашел, заключалось в том, чтобы получить IPv6 другим способом., используя команду IP. У меня была небольшая проблема, так как я никогда не использовал его. IP и аук, но немного изучив, мне удалось понять синтаксис и сделать то, что я хотел. Возможно, это не самый эффективный способ., Дополнительные работы. Результат был таким:

#!/бин/ш

# Asus-Merlin-DuckDNS, модифицированный Скутер
# Разветвлено с https://gist.github.com/kevinxw/f7a5d5402887ca1b5b2c399c60e0921f

# зарегистрировать субдомен на https://www.duckdns.org/, чтобы получить свой токен
# put 'hostname|token' in the 'Host Name' field under DDNS
# например. мой хозяин|abcdefgh-1234-5678-9876-f71b0ed7a7fe

#DDNS_HOSTNAME_FIELD=$(nvram получить ddns_hostname_x)
#ПОДДОМЕН=$(эхо "$DDNS_HOSTNAME_FIELD" | awk -F'|' '{Распечатать $1}')
#ТОКЕН=$(эхо "$DDNS_HOSTNAME_FIELD" | awk -F'|' '{Распечатать $2}')
#Skooter: I'm using DuckDNS additionally to the ASUS DDNS service, so 
#I'm setting SUBDOMAIN and TOKEN directly:
ПОДДОМЕН=
ТОКЕН=

ИПВ4=$(nvram получить wan0_ipaddr)
#ИПВ6=$(nvram получить ipv6_wan_addr | awk -F'/' '{Распечатать $1}')
#Skooter: По какой-то причине, the nvram string from the original script 
#is empty when I'm using PPPoE so I replaced it with this one:
ИПВ6=$(IP -6 адрес показать глобальную динамическую область видимости | grep инет6 | awk '{Распечатать $2}' | awk -F'/' '{Распечатать $1}')

#Skooter: моя первая попытка будет зависеть от внешней службы, я предпочитаю
#получить всю информацию локально, так что я больше не использую это:
#ИПВ6=$(завиток -6 https://ipv6.icanhazip.com)

ЗАПРОС_URL="https://www.duckdns.org/update?домены=${ПОДДОМЕН}&токен=${ТОКЕН}&IP=${IPv4}&ipv6=${IPv6}"

регистратор "URL-адрес запроса DDNS: ${REQUEST_URL}"

# никаких изменений ниже не требуется
РЕЗУЛЬТАТ=$(завиток -- тихий "${REQUEST_URL}" 2>&1)
регистратор "Результат запроса DDNS: $РЕЗУЛЬТАТ"

если [[ "$РЕЗУЛЬТАТ" == "Хорошо" ]];
тогда
  /sbin/ddns_custom_updated 1
еще
  /sbin/ddns_custom_updated 0
фи

С помощью этого скрипта в DuckDNS обновляются как IPv4, так и IPv6., даже если роутер в режиме PPPoE. Задача решена!

Использовать: В первой попытке я заставил скрипт работать, получив IPv6 через службу icanhazip.com, но затем я решил, что лучше сделать что-то, что получает IPv6 локально, чтобы он не зависел от какой-либо внешней службы.. Я оставил предыдущий код закомментированным на случай, если он понадобится вам в будущем..

0 0 пожелания
Рейтинг статьи

Постоянная ссылка на эту статью: https://www.skooterblog.com/2022/10/14/atualizar-ipv4-e-ipv6-no-duckdns-a-partir-de-roteadores-asus-com-asuswrt-merlin/

регистр
уведомить о
гость

0 Комментарии
Встроенные отзывы
увидеть все комментарии
0
Мы хотели бы знать, что вы думаете, Оставьте свой комментарийх