Geont
Участники форума-
Постов
122 -
Зарегистрирован
-
Посещение
-
Победитель дней
4
Geont стал победителем дня 18 сентября 2021
Geont имел наиболее популярный контент!
Оборудование
-
Кинетик
Ultra II, Ultra, Giga III
Посетители профиля
Блок последних пользователей отключён и не показывается другим пользователям.
Достижения Geont
Продвинутый пользователь (3/5)
38
Репутация
-
Имею ввиду, вне chroot-среды
-
Подскажите, скрипты, расположенные в /etc/ndm/wan.d будут отрабатывать?
-
Приветствую и прошу помощи: Как через rest api выполнить запрос ip host my.local 192.168.111.111? Что-то вроде wget -qO - --post-data='[{"ip":{"host":{"my.local 192.168.111.111"}}}]' http://localhost:79/rci/ но так не работает. И как потом выполнить no ip host my.local?
-
Скрипт, работающий на REST API #!/opt/bin/sh ConnName=Rostelecom counter=/opt/tmp/CountReconnectWan.txt previp=/opt/tmp/previp.txt max_tries=10 if ! opkg list-installed | grep '^jq' > /dev/null; then opkg update opkg install jq fi RESP=$(wget -qO - http://localhost:79/rci/show/interface | jq -r ".[] | select(.description==\"$ConnName\") | select(.defaultgw==true) | .id, .description, .address") [ -n "$RESP" ] || exit 1 _ip=$(echo $RESP | awk '{print $3}') _name=$(echo $RESP | awk '{print $2}') _iface=$(echo $RESP | awk '{print $1}') if echo "$_ip" | grep -qE "^(10\.|100\.6[4-9]\.|100\.[7-9][0-9]\.|100\.1[01][0-9]\.|100\.12[0-7]\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[01]\.)"; then [ -f "$counter" ] || echo "0" > $counter try_nr=$(cat $counter) try_nr=$((++try_nr)) if [ $try_nr -gt $max_tries ]; then echo "0" > $counter logger -p local0.error -t white_ip[$$] "Provider: $_name, interface: $_iface. Too much tries. Exit" exit 1 fi echo "$try_nr" > $counter logger -p local0.error -t white_ip[$$] "Provider: $_name, interface: $_iface. Reloading WAN due grey IP - $_ip. Try $try_nr of $max_tries." wget -qO - --post-data="[{\"interface\":{\"name\":\"$_iface\",\"down\":{}}}]" http://localhost:79/rci/ sleep 3 wget -qO - --post-data="[{\"interface\":{\"name\":\"$_iface\",\"up\":{}}}]" http://localhost:79/rci/ else echo "0" > $counter [ -f "$previp" ] || echo "0.0.0.0" > $previp _previp=$(cat $previp) if [ "$_previp" != "$_ip" ]; then logger -p local0.notice -t white_ip[$$] "Provider: $_name, interface: $_iface, white IP - $_ip." echo "$_ip" > $previp else logger -p local0.notice -t white_ip[$$] "Provider: $_name, interface: $_iface, white IP - $_ip (address unchanged)." fi exit 0 fi Для работы нужен пакет jq (будет установлен при первом запуске скрипта). Не забудьте поменять название подключения РТ в 3 строке на то, как оно названо в веб-интерфейсе.
-
Коллеги, прошу помощи. Никак не могу сообразить, каков будет аналог команды ndmq -p "interface PPPoE0 (no)connect via GigabitEthernet1" -P message на REST API? Иными словами, нужно передернуть PPPoE подключение.
-
Немного обновил и причесал скрипт. Теперь работает стабильнее. #!/opt/bin/sh ConnName=Rostelecom counter=/opt/tmp/CountReconnectWan.txt previp=/opt/tmp/previp.txt max_tries=10 LIST=`ndmq -p 'show interface' -x | xml sel -t -m '//interface[link="up"][state="up"][global="yes"][defaultgw="yes"]' -v '@name' -o ',' -v 'description' -o ',' -v 'address' -o ',' -v 'via' -n` echo "$LIST" | grep -iwq "$ConnName" || exit 0 _ip=`echo "$LIST" | cut -d, -f3` _prov=`echo "$LIST" | cut -d, -f2` _iface=`echo "$LIST" | cut -d, -f1` _via=`echo "$LIST" | cut -d, -f4` if echo "$_ip" | grep -qE "^(10\.|100\.6[4-9]\.|100\.[7-9][0-9]\.|100\.1[01][0-9]\.|100\.12[0-7]\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[01]\.)"; then [ -f "$counter" ] || echo "0" > $counter try_nr=$(cat $counter) try_nr=$((++try_nr)) if [ $try_nr -gt $max_tries ]; then echo "0" > $counter logger -t white_ip[$$] "Provider: $_prov, interface: $_iface. Too much tries. Exit" exit fi echo "$try_nr" > $counter logger -t white_ip[$$] "Provider: $_prov, interface: $_iface. Reloading WAN due grey IP - $_ip. Try $try_nr of $max_tries." ndmq -p "interface $_iface no connect via $_via" -P message sleep 5 ndmq -p "interface $_iface connect via $_via" -P message else echo "0" > $counter [ -f "$previp" ] || echo "0.0.0.0" > $previp _previp=$(cat $previp) if [ "$_previp" != "$_ip" ]; then logger -t white_ip[$$] "Provider: $_prov, interface: $_iface, white IP - $_ip." echo "$_ip" > $previp fi fi Кроме установленного пакета ndmq требуется также xmlstarlet. В переменной $ConnName (2-я строка) замените название подключения на свое - так, как оно названо у вас в web-интерфейсе. Больше ничего указывать не нужно. Подключений может быть несколько, скрипт обрабатывает только подключение с указанным названием в случае его использования в качестве основного. Расположение обычное: /opt/etc/ndm/wan.d/.
-
Который раз уже обращаю внимание, что у резервного подключения в статусе DDNS постоянно пишется "updated successfully". Мелочь, конечно, но логичнее все же писать, например, "waiting for active connection..." ну или что-то подобное, ИМХО. И может выводить это сообщение на языке локализации?