Как отключить одного IP-клиента при выходе из сети другого клиента DD-WRT Dlink-DIR615?
Всем привет! У меня не совсем простой вопрос...
Есть у меня VOIP-номер, который по умолчанию перенаправляется voip-провайдером на мобильник. Перенаправление происходит только тогда, когда voip-провайдер не видит зарегистрированных ip-телефонов. Если зарегистрированные ip-телефоны есть, то вначале звенят они, а по истечении Х секунд звонок уже перенаправляется на мобилку.
Имеется роутер Router Dlink-DIR615 rev d
Firmware DD-WRT v24-sp2 (03/25/13) std - build 21061
Kernel Linux 3.2.41-svn21039 #101 Mon Mar 25 10:30:36 CET 2013 mips
к которому я подключил IP-телефон и к которому коннектится моя мобилка по WiFi, когда я дома.
Мне нужно настроить так, чтобы при моем нахождении дома, звонки шли на IP-телефон подключенный к роутеру по LAN, а при моем отсутствии дома перенаправлялись на мобильник без задержек (для этого домашний IP-телефон должен быть оффлайн).
Единственным вариантом я представляю себе такое решение:
Нужно как то запрограммировать DD-WRT, чтобы при нахождении мобильника в WiFi роутера (=я дома), IP-телефон получал полный доступ к интернет, а в случае прерывании связи WiFi с мобилой (=я вне дома), то IP-телефон теряет доступ к интеренет и этим самым отключается от VOIP-провайдера, так звонки без задержек будут перенаправляться на мобилку.
Извиняюсь за возможную сумбурность, но кто нибудь знает, как это осуществить?
Заранее благодарствую за любую идею!
Скрипт на маршрутизаторе, который включает\отключает интерфейс, в который подключен VoIP-девайс, при наличии\отсутствии ответа от заданного узла, в данном случае, мобильного телефона (следует предварительно создать резервацию на DHCP-сервере).
#!/bin/bash
timeout=5 # delay between checks
pingip='8.8.8.8' # what to ping
iface="eth0"
LOG_FILE="/var/log/syslog"
isdown=0 # indicate whether the interface is up or down
# start assuming interface is up
while true; do
LOG_TIME=`date +%b' '%d' '%T`
if ping -q -c 2 "$pingip" >> /dev/null ; then # ping is good - bring iface up
if [ "$isdown" -ne 0 ] ; then
ifup $iface && isdown=0
printf "$LOG_TIME $0: Interface brought up: %s\n" "$iface" | tee -a $LOG_FILE
fi
else # ping is bad - bring iface down
beep -f 4000
if [ "$isdown" -ne 1 ] ; then
ifdown $iface && isdown=1
printf "$LOG_TIME $0: Interface brought down: %s\n" "$iface" | tee -a $LOG_FILE
fi
fi
sleep "$timeout"
done