Скрипт для разрешения DNS-имён и обновления списка адресов., RouterOS
palmczak
Guest
0
22.02.2007 00:13:00
Прошу прощения, если это уже обсуждалось. Я потратил время на поиски, но не нашёл решения. У нас используется цепочка правил файрвола, чтобы блокировать попытки входа в роутер с небезопасных IP-адресов. Проблема в том, что у нас есть несколько сайтов, которые сейчас используют динамический IP и DDNS для обновления ChangeIp. Я ищу скрипт, который разрешает список DNS-имён и обновляет список адресов (список доверенных IP-адресов) IP-адресами, к которым они разрешаются. Было бы здорово проверить список на наличие адресов, чтобы не добавлять их повторно. Спасибо.
cmit
Guest
0
28.02.2007 16:39:00
Может быть, это поможет… Скрипт перебирает все записи в списке адресов (в данном примере называется "testlist") и обновляет связанные с ними IP-адреса. Он сделан так, чтобы комментарий к записи списка адресов содержал DNS-имя записи (например, "myhomeoffice.dyndns.org" или "www.mikrotik.com" или что-то еще). При запуске скрипт разрешает комментарий списка адресов как имя хоста и помещает IP-адрес в поле адреса записи. После этого идет второй цикл, отключающий все записи списка адресов, которые теперь имеют "0.0.0.0" в качестве адреса (что означает, что разрешение DNS не удалось по какой-либо причине). Вы можете запускать его каждую минуту из планировщика, например: ``` :foreach a in=[/ip firewall address-list find list=testlist] do={ /ip firewall address-list set $a address=[:resolve [/ip firewall address-list get $a comment]] } :foreach a in=[/ip firewall address-list find address=0.0.0.0] do={ /ip firewall address-list set $a disabled=yes } ``` С наилучшими пожеланиями, Christian Meis
palmczak
Guest
0
28.02.2007 17:19:00
Спасибо! Я немного подкорректирую, но это отличное начало! Еще раз спасибо. Джо.
sergiom99
Guest
0
25.04.2008 20:55:00
Привет, может, скрипт вроде этого поможет в подобной ситуации? Пока не решил. Спасибо!
vchrizz
Guest
0
04.12.2018 01:48:00
Искал похожее решение и придумал свой скрипт. Хочу поделиться, вдруг кому-нибудь пригодится: [/Codebox] Системный планировщик экспорта: /system scheduler add interval=1m name=auto-add-static-routes on-event=Add-static-routes-from-DNS policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=dec/03/2018 start-time=21:47:34
Системный скрипт: Название: Add-static-routes-from-DNS (не забудь отредактировать шлюз и метку VRF так, как нужно тебе) Этот скрипт разрешает заданные DNS-имена и добавляет маршруты для разрешенных IP-адресов. Важно: отредактируй опции статических маршрутов, чтобы они соответствовали твоей сети! Можно также определить пользовательские маршруты. Пропускает добавление маршрутов, если они уже добавлены. Создан в 2018 году chil.at
Объявляем переменные local dnsNames local customRoutes local ipAddress local gateway local type local distance local scope local targetscope local routingmark
Определяем записи DNS set dnsNames ($dnsNames , “ upgrade.mikrotik.com ”) set dnsNames ($dnsNames , “ ”) set dnsNames ($dnsNames , “ security.debian.org ”) set dnsNames ($dnsNames , “ security-cdn.debian.org ”) set dnsNames ($dnsNames , “ ftp.us.debian.org ”)
Определяем пользовательские статические маршруты cloudflare DNS set customRoutes ($customRoutes , “1.1.1.1/32”) google DNS set customRoutes ($customRoutes , “8.8.8.8/32”)
Определяем опции статических маршрутов set gateway “1.2.3.4@main” set type “unicast” set distance 200 set scope 30 set targetscope 10 set routingmark “VRF-MANAGEMENT”
Не редактируйте ничего ниже!
Очищаем кэш DNS и все AutoAdded маршруты (включай только временно, чтобы очистить в случае проблем) #ip dns cache flush #ip route remove [find comment~“AutoAdded”] #log info “cleared DNS cache and all AutoAdded routes.”
Устанавливаем максимальное TTL кэша DNS до 10 минут #ip dns set cache-max-ttl=“10m”
Устанавливаем статические маршруты из определенных пользовательских маршрутов foreach route in=$customRoutes do={ if ([ip route find dst-address=“$route” gateway=$gateway type=$type distance=$distance scope=$scope target-scope=$targetscope routing-mark=$routingmark] != “”) do { log debug “route exists to $route, skipping.” } else { ip route add dst-address=$route gateway=$gateway type=$type distance=$distance scope=$scope target-scope=$targetscope routing-mark=$routingmark comment=“AutoAdded”; log info (“route added to $route”); }; }
Устанавливаем статические маршруты из определенных DNS-имен foreach dnsName in=$dnsNames do={ set ipAddress ([:resolve $dnsName]) if ([ip route find dst-address=“$ipAddress/32” gateway=$gateway type=$type distance=$distance scope=$scope target-scope=$targetscope routing-mark=$routingmark] != “”) do { log debug “route exists to $ipAddress ($dnsName), skipping.” } else { ip route add dst-address=$ipAddress gateway=$gateway type=$type distance=$distance scope=$scope target-scope=$targetscope routing-mark=$routingmark comment=“AutoAdded for dnsName: $dnsName”; log info (“route added to $ipAddress ($dnsName)”); }; }