Вводная
Из-за нехватки адресов IPv4, Ростелеком начал использовать технологию Carrier-Grade NAT (CG-NAT), тем самым вместо «белых IP» пользователь получает адреса из сети — 100.64.0.0/10
Для исправления ситуации использую скрипт для Микротика, но лишнего устройства не оказалось под рукой и решил опробовать вариант — установка OpenWrt на DIR-620 rev.D1
Сама установка прошивки и первичные настройки прошли гладко, а вот дальше пошли загвоздки.
Установка DDNS
opkg update opkg install ddns-scripts opkg install luci-app-ddns
Много лет использую сервис http://freedns.afraid.org Во многих устройствах достаточно ввести свои логин/пароль,теперь в поле «пароль» нужно вводить токен вида:
UEV4enlFaTFhNlVRRRRzNFljUjczNUdQOjE4MTQyOTk4
Взять свой токен можно, например, из quick cron.
Установка mc и nano
Привык пользоваться файлменеджером mc, установка ничем непримечательна
opkg update opkg install mc
Чтобы в mc заработал nano, первым делом зайти в mc и отключим встроенный редактор и просмотровщик. Нужно отжать выделенные красным крестики на рисунке.
Дальше в переменной среды $EDITOR задаем редактор по умолчанию nano
export EDITOR=nano nano /etc/profile
nano /etc/profile — что бы данная настройка сохранилась после перезагрузки.
На этом настройка закончена.
Скрипт переподключения pppoe
Долго искал по интернету, перепробовал кучу вариантов и способов реализации, остановился на следующем варианте:
#!/bin/bash STR=`ifconfig pppoe-wan|grep inet` STRARR=' ' read -a array <<< "$STR" STRIP="${array[1]}" I=`echo $STRIP | tr '.' ' '` I=`echo $I | tr '/:' ' '` STRARR=' ' read -a array <<< "$I" STRIP1="${array[1]}" STRIP2="${array[2]}" STRIP3="${array[3]}" STRIP4="${array[4]}" if [[ $STRIP1 -eq "100" ]]; then echo $STRIP1"."$STRIP2"."$STRIP3"."$STRIP4": ""Restarting Wan Interface" (ifdown wan; sleep 5; ifup wan) & else echo $STRIP1"."$STRIP2"."$STRIP3"."$STRIP4": ""White Wan IP" fi
Скрипт извлекает текущий IP адрес, раскладывает «по полочкам», если первый октет окажется 100, то переподключается интерфейс wan, каждые 5 секунд, пока IP адрес не будет получен отличный от 100.64.0.0/10
Кучу времени потратил на то, чтобы установить следующий факт: в самом начале скрипта используется интерфейс pppoe-wan, в конце скрипта логично было бы так же использовать ifdown pppoe-wan/ifuppppoe-wan, но опытным путём было установлено, что нужно рестартовать интерфейс wan (pppoe само собой так же будет переподключаться).
Следующей загвоздкой было то, что этот скрипт попросту не запускался, оказалось, что в OpenWrt нет bash 🙂
opkg update opkg install bash
Настройка cron на openWRT
Скрипт записал в файл ip.sh, дал права на исполнение — chmod +x /root/hosts/ip.sh
Разместил в /root/ip.sh
Для выполнения заданий нужно создать файл:
touch /etc/crontabs/root
Стартуем сервис и включаем автозагрузку:
/etc/init.d/cron start /etc/init.d/cron enable
Проверяем успешный запуск крона в системном логе:
logread
Теперь, когда cron настроен и работает, можно запускать любые задачи по расписанию. Добавим запись в /etc/crontabs/root:
*/5 * * * * /bin/bash /root/ip.sh >/dev/null 2>&1
Перезагружаем сервис для сохранения изменений:
/etc/init.d/cron restart
А как дать права на файл на исполнение?
chmod +x /root/hosts/ip.sh