klink0v (klink0v) wrote,
klink0v
klink0v

Category:

Заключительная серия про OpenWRT + NCM

И заключительный аккорд к предыдущему посту. Как понять что резервный линк через модем "упал" и "поднять" его.

Как "поднять" — понятно: ifdown GSM && sleep 5 && ifup GSM

Как понять что "упал". Можно, конечно, пинговать кого-нибудь. Можно даже и не кого-нибудь одного. Но у нас же ж и так есть запущенный OpenVPN. Который раз в минуту обновляет и выдает статистику по прошедшему через него трафику примерно вот в таком виде.

Можно просто периодически читать этот файл на предмет значения "TCP/UDP read bytes", и если оно равно нулю, значит линк упал.

Итак, берём и дописываем в "/etc/crontabs/root" что-нибудь типа того:

*/5 * * * * [ -r /var/run/openvpn.s5.status -a $(/usr/bin/grep -oP 'TCP/UDP read bytes,\K\d+' /var/run/openvpn.s5.status) -eq 0 ] && \
            ifdown GSM && sleep 5 && ifup GSM

Единственное, нужно помнить о том, что:


  1. Не стоит выполнять эту проверку слишком часто. По крайней мере, чаще чем раз в две минуты. Просто потому что сам openvpn обновляет данные раз в минуту. Можно "случайно" устроить бесконечный цикл "вечного" передёргивания интерфейса.

  2. Если вы для чего-то остановите OpenVPN "с другой стороны" (например, будете обновлять сервер), то со стороны роутера интерфейс также будет перезапущен как минимум однократно. Во избежание такого эффекта достаточно вручную заблаговременно "тормознуть" OpenVPN с обеих сторон.

И да, в конфиге OpenVPN-а нужно задать директиву типа "keepalive 15 45" (конкретные значения тайм-аутов выбирайте по вкусу).

UPDATE. Есть и другой способ. И он, наверное, даже луше. В конфиге OpenVPN прописать вот так:

В таком случае не нужно связываться с cron-ом. Всё сделает сам OpenVPN.

Tags: bash, openvpn, openwrt
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 16 comments