Резервный канал до OpenWRT через 3G-модем в режиме PPP

Mar 09, 2020 23:28


Дано: роутер с OpenWRT, домашний интернет (один канал). В роутер воткнут 3G-модем.

Хочется: иметь SSH-доступ к роутеру на случай "падения" основного канала в чисто диагностических целях (понять что случилось, предметно пинать техподдержку).

Решение.

Берём какую-нибудь VPSку или другой OpenWRT-роутер на другом провайдере с "честным" белым IP. Вкорячиваем на нём OpenVPN-сервер. Примерный конфиг (ключи-сертификаты опущены).
dev tun
topology subnet
proto udp
server бла-бла-бла
keepalive 15 45
dh none
ncp-disable
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
cipher AES-128-GCM
auth-nocache
verb 2

client-config-dir /etc/бла-бла-бла
ccd-exclusive

sndbuf 0
rcvbuf 0
fast-io
mlock

log-append /var/log/openvpn/бла-бла-бла


бла-бла-бла



бла-бла-бла



бла-бла-бла



бла-бла-бла


На целевом (домашнем) роутере поднимаем клиента для него. Примерный конфиг. Расширение ему давать не ".conf", а какое-нибудь другое, чтобы демон не стартовал бы автоматически при запуске системы. Конкретно в моём случае OpenVPN собран с libssl (не с mbedtls) ради поддержки эллиптики. С ней шустрее работает установление соединения.
dev tun
proto udp
lport бла-бла-бла
client
keepalive 15 45
ncp-disable
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
cipher AES-128-GCM
auth-nocache
verb 2
remote бла-бла-бла
remote-cert-tls server

sndbuf 0
rcvbuf 0
fast-io
mlock


бла-бла-бла



бла-бла-бла



бла-бла-бла



бла-бла-бла


Отдельно оговариваю, что интересующий 3G-модем работает в режиме PPP. Для всяких там NCM / QMI / Direct IP и прочих расклад будет несколько другой.

Примерный вариант скрипта на событие поднятия PPP-линка. Файл делаем исполняемым, кладём в "/etc/ppp/ip-up.d/". Не забыть также в "/etc/iproute2/rt_tables" прописать табличку с именем "gsm" для наглядности. Ну и название интерфейса вместо "3g-GSM" подставить своё.
#!/bin/sh

[ z"$1" == "z3g-GSM" ] && {
/sbin/ip route add default dev $1 table gsm
/sbin/ip rule add from $4 lookup gsm
/usr/sbin/openvpn --local $4 --syslog openvpn\(s5\) --status /var/run/openvpn.s5.status --cd /etc/openvpn --config /etc/openvpn/s5.manual &
echo $! > /var/run/s5-vpn.pid
}

Примерный вариант скрипта на событие выключения PPP-линка. Файл делаем исполняемым, кладём в "/etc/ppp/ip-down.d/".
#!/bin/sh

[ z"$1" == "z3g-GSM" ] && {
[ -r "/var/run/s5-vpn.pid" ] && {
kill `cat /var/run/s5-vpn.pid`
rm /var/run/s5-vpn.pid
}
/sbin/ip rule del from $4 lookup gsm
}

Собственно, всё. Как только PPP установится, проиводится некая небольшая магия с iproute2 и запускается OpenVPN. В случае разрыва всё гасится в обратном порядке.

Как раз для этого мне и нужна была DanyCom-овская SIM-карта. Халявного гигабайта в месяц под такие цели вполне достаточно.

openwrt

Previous post Next post
Up