Вводная
Из-за нехватки адресов IPv4, Ростелеком начал использовать технологию Carrier-Grade NAT (CG-NAT), тем самым вместо “белых IP” пользователь получает адреса из сети — 100.64.0.0/10
Для исправления ситуации использую скрипт для Микротика, но лишнего устройства не оказалось под рукой и решил опробовать вариант – установка OpenWrt на DIR-620 rev.D1
Сама установка прошивки и первичные настройки прошли гладко, а вот дальше пошли загвоздки.
Установка DDNS
1 2 3 |
opkg update opkg install ddns-scripts opkg install luci-app-ddns |
1 |
UEV4enlFaTFhNlVRRRRzNFljUjczNUdQOjE4MTQyOTk4 |
Установка mc и nano
Привык пользоваться файлменеджером mc, установка ничем непримечательна
1 2 |
opkg update opkg install mc |
Чтобы в mc заработал nano, первым делом зайти в mc и отключим встроенный редактор и просмотровщик. Нужно отжать выделенные красным крестики на рисунке.
Дальше в переменной среды $EDITOR задаем редактор по умолчанию nano
1 2 |
export EDITOR=nano nano /etc/profile |
nano /etc/profile — что бы данная настройка сохранилась после перезагрузки.
На этом настройка закончена.
Скрипт переподключения pppoe
Долго искал по интернету, перепробовал кучу вариантов и способов реализации, остановился на следующем варианте:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/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 🙂
1 2 |
opkg update opkg install bash |
Настройка cron на openWRT
Скрипт записал в файл ip.sh, дал права на исполнение – chmod +x /root/hosts/ip.sh
Разместил в /root/ip.sh
Для выполнения заданий нужно создать файл:
1 |
touch /etc/crontabs/root |
1 2 |
/etc/init.d/cron start /etc/init.d/cron enable |
1 |
logread |
1 |
*/5 * * * * /bin/bash /root/ip.sh >/dev/null 2>&1 |
1 |
/etc/init.d/cron restart |
А как дать права на файл на исполнение?
chmod +x /root/hosts/ip.sh