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

Apr 19, 2020 14:19


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

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

Как понять что "упал". Можно, конечно, пинговать кого-нибудь. Можно даже и не кого-нибудь одного. Но у нас же ж и так есть запущенный OpenVPN. Который раз в минуту обновляет и выдает статистику по прошедшему через него трафику примерно вот в таком виде.
~# cat /var/run/openvpn.s5.status

OpenVPN STATISTICS
Updated,Sun Apr 19 14:08:23 2020
TUN/TAP read bytes,304
TUN/TAP write bytes,576
TCP/UDP read bytes,135424
TCP/UDP write bytes,136383
Auth read bytes,44976
END

Можно просто периодически читать этот файл на предмет значения "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 прописать вот так:
keepalive 15 45
script-security 2
down "/bin/sh -c '[ $signal == \"ping-restart\" ] && ifdown GSM && sleep 5 && ifup GSM'"

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

openwrt, bash, openvpn

Previous post Next post
Up