OpenWRT & OpenVPN: резервный линк через NCM

Apr 18, 2020 17:04


Вот здесь я писал, как сделать на OpenWRT резервный линк через 3G-модем в режиме PPP. Теперь то же самое, но другой модем, работающий в режиме NCM.

Основное отличие заключается в том, что в предыдущем примере мы запускали OpenVPN по событию успешного установления PPP-линка. Здесь же никакого PPP нет. Значит, нужно искать какое-то другое событие, на которое можно "завеситься". Проще всего это сделать при получении IP-адреса от модема. Для этого пишем примерно вот такой скрипт (названия интерфейсов, iproute2-таблиц и PID-файлов подставляйте свои, разумеется).
#!/bin/sh

[ -e /var/run/s5-vpn.pid ] && kill $(cat /var/run/s5-vpn.pid)

[ z"$interface" == "zwwan0" ] && {
/sbin/ip rule del lookup gsm 2>/dev/null
/sbin/ip route flush table gsm
/sbin/ip route add default via $router dev $interface table gsm
/sbin/ip rule add from $ip lookup gsm
/usr/sbin/openvpn --local $ip --syslog openvpn\(s5\) --status /var/run/openvpn.s5.status --cd /etc/openvpn --config /etc/openvpn/s5.manual &
echo $! > /var/run/s5-vpn.pid
}

И кладём его в файл "/etc/udhcpc.user".

Но стартовать мало. Надо ещё и корректно загасить. Для этого пишем ещё один скрипт и кладём в "/etc/hotplug.d/iface/60-modem" (например).
#!/bin/sh

[ z"$INTERFACE" == "zGSM" -a z"$ACTION" == "zifdown" -a -e /var/run/s5-vpn.pid ] && {
kill $(cat /var/run/s5-vpn.pid)
/sbin/ip rule del lookup gsm 2>/dev/null
/sbin/ip route flush table gsm
rm -f /var/run/s5-vpn.pid
}

В моём случае интерфейс в UCI обзывается "GSM", таблица в iproute2 - "gsm". При "опускании" интерфейса нужно только прибить OpenVPN и "почистить" все следы.

И есть ещё один момент. Особенно он касается модемов имени Huawei. Частенько случается, что соединение рвётся, но момед не соизволит установить его потом взад автоматически. Поэтому периодически (по крону) требуется проверять жизнеспособность этого самого коннекта. И в случае когда соединение вроде бы есть, а данных нет - принудительно делать "ifdown GSM && sleep 5 && ifup GSM". Но об этом в следующих сериях журнала "Мурзилка".

openwrt, bash, openvpn

Previous post Next post
Up