Posted: Sun Jul 19, 2015 10:33 Post subject: Reconnect
Роутер TP-Link TL-WR841ND v8
Надо удаленно реконектится. Я нашел способ, я просто убиваю процесс pppd через ssh, но так как я пишу через powershell использую программу plink, то у меня зависает процесс на долго. Решил сделать через скрипт поместив его в папку temp
Code:
#!/bin/sh
killall pppd
Но все равно powershell виснет, я так понимаю не успевает получить ответ. Хотел узнать можно ли как-то через командную строку роутера разорвать связь по ssh до того как будет выполнятся команда
Code:
killall pppd
Или может кто-то сталкивался с подобной задачей и посоветует как иначе ее решить.
Posted: Mon Jul 20, 2015 5:39 Post subject: Re: Reconnect
За восстановления соединения ppp после разрыва отвечает сервис - redial 30, где 30 это число секунд через которое будет восстанавливаться соединение. За ssh сессию отвечает сервис dropbear и его команда запуска :
Это я уже выяснил, но дело в том что я пишу скрипт на powershell который делает так
1. Разрывает соединение vpn с моим удаленным роутером.
2. Через plink посылает команду убить pppd
3. Пингует пока не восстановится соединение
4. После появления пинга, подключается опять к роутеру через vpn
Вот на втором пункте он зависает(я так понимаю ждет ответа от сервера, который восстанавливает соединения ). Это все мне надо для автоматизации смены ip на роутере. Еще пытался создать скрипт с кодом
Залил его на роутер,но после запуска я понял что отключается sh и скрипт перестает работать после того как убиваешь dropbear (надеюсь я правильно понял)
Может есть какие другие варианты?
Роутер подключен к одному интернет провайдеру, я к другому. Я подключаюсь к роутеру со своего провайдера через ssh с помощью программы plink даю команду killall pppd и программа на моем компьютере виснет(я так понимаю за счет того что не успевает дать ответ роутер). Если Вы не то хотели от меня увидеть, то опишите как я еще могу описать мою схему подключения. Спасибо за ответы.
PPPoE
...
1. Разрывает соединение vpn с моим удаленным роутером.
...
Это все мне надо для автоматизации смены ip на роутере.
Тогда имеем
- PPPoE и сетевой интерфейс его ppp0
- dropbear сервис ssh/telnet
- redial 30 по умолчанию восстановить сессию PPPoE через 30сек.
- VPN сервер и сетевой интерфейс его тогда ppp1 после установки соединения, сервис pptd
При выполнении команды
Code:
killall pppd
обратить внимание на pid файл который был создан в
Code:
/tmp/var/run/ppp0.pid
и так же нужно удалять если он остался, а то что там plink
Quote:
Вот на втором пункте он зависает(я так понимаю ждет ответа от сервера, который восстанавливает соединения )
то это его проблемы.
Кто мешает вам на самом роутере через "cron" запускать скрипт например через каждые 4часа 30мин, который будут выполнять действие по перезапуску, либо сам скрипт будет запускать pppd, а не ждать "redial 30"
Пробле то его, но он останавливает работу всего скрипта, т.е. после второго пункта скрипт powershell перестает работать
Quote:
Кто мешает вам на самом роутере через "cron" запускать скрипт например через каждые 4часа 30мин, который будут выполнять действие по перезапуску, либо сам скрипт будет запускать pppd, а не ждать "redial 30"
Мне надо менять ip не по времени, а по команде.
А можно где-то поподробнее прочитать по cron в ddwrt? как пользоваться и как время выставлять?
Давайте все отдельно и не путать, что и где запускаеться
Да я просто не про и возможно как-то излагаю свою мысль неправильно(извиняюсь что так достаю Вас). Попробую обьяснить по порядку.
Я через plink посылаю команды в оболочке powershell
Вот такая команда
plink -ssh -load DomSSH -l ***** -pw ***** -m "command.sh"
Command.sh
Quote:
killall pppd
После этой команды оболочка powershell подвисает, наверно ждет ответа которого не будет по причине уже разорванного соединение на роутере. Я хочу чтобы либо plink не ждал ответа(этого я в интернете не нашел), либо чтобы роутер перед выполнением команды killall pppd разорвал сессию ssh чтобы всетаки plink получил ответ что связь разорвана.
Я через plink посылаю команды в оболочке powershell
Вот такая команда
plink -ssh -load DomSSH -l ***** -pw ***** -m "command.sh"
Command.sh
Quote:
killall pppd
После этой команды оболочка powershell подвисает, наверно ждет ответа которого не будет по причине уже разорванного соединение на роутере.
опять же, а что она должна делать, если указанный IP уже не существует, есть timeout при превышение которого она скажет - ошибка доступа.
kinolik wrote:
Я хочу чтобы либо plink не ждал ответа(этого я в интернете не нашел), либо чтобы роутер перед выполнением команды killall pppd разорвал сессию ssh чтобы всетаки plink получил ответ что связь разорвана.
Так связь и так разорвана, как только PPPD исчез из запущенных задач, так же исчез и интерфейс на котором был IP для него.
И опять же смотрите пункт выше, что в любой программе предусмотрен контроль соединения, а это период timeout после его превышения будет считаться например в plink что адресат не доступен.
Спасибо что терпели меня, решил свою проблему просто запускаю плинк в отдельном процессе, а потом в конце скрипта все зависшие процессы плинка убиваю.
Quote:
Так связь и так разорвана, как только PPPD исчез из запущенных задач, так же исчез и интерфейс на котором был IP для него.
Да разорвана, только роутер с начало разрывает связь с интернетом, а потом отправляет ответ об успешной или не успешной выполненной команде, а я его не могу получить по понятной причине и виснет скрипт. А если бы он разорвал для начало ssh и потом уже pppd убивал, то я этот ответ получил и скрипт бы не вис. Может что-то не так понимаю, может роутер выполняет все команды, а потом шлет ответ. Если будет желание ответе, просто самому интересно)
Так связь и так разорвана, как только PPPD исчез из запущенных задач, так же исчез и интерфейс на котором был IP для него.
Да разорвана, только роутер с начало разрывает связь с интернетом, а потом отправляет ответ об успешной или не успешной выполненной команде, а я его не могу получить по понятной причине и виснет скрипт.
Тут вы не правы, в любом ppp есть механизм определения состояния линии и процедура по ее "разрыву", но тут вы сами убиваете процесс, что равносильно отключить кабель от порта и потом опять включить в порт. Хотя есть скрипты http://www.dd-wrt.ca/wiki/index.php/Script_Execution
И в данном случае он уже не чего не отправляет, не о какой успешной или не успешной - вы просто удалили сетевой интерфейс без предупреждения. Скрипт, а точнее программа которую вы запускаете у вас на ПК не виснет, так как в ней есть timeout по отработке контроля соединения, вопрос только какое время. Кто вам мешает точно так же ее "удалить" из запущенных задач в ПК таким же способом - "убить процесс".
kinolik wrote:
А если бы он разорвал для начало ssh и потом уже pppd убивал, то я этот ответ получил и скрипт бы не вис. Может что-то не так понимаю, может роутер выполняет все команды, а потом шлет ответ. Если будет желание ответе, просто самому интересно)
"dropbear" ни какого отношения к ppp не имеет.
Так вы же пробовали
- удалили процесс dropbear
- следом вы делали kill на pppd
тут можно было еще sleep поставить на 3-5сек. между двумя командами.