Категорії
Linux Misc, staff, other

Резервний канал через модем

Постала задача підключатися через 3G-модем. В даному випадку це Huawei e3372.

Скрипт підключення /opt/scripts/usb_modem.sh:

#!/bin/sh

#e3372 huawei
vid="12d1"
pid="14db"
ip_addr="192.168.222.22/24"
base="/etc/firewall"
path_dev="/sys/bus/usb/drivers/usb"

MODESWITCH=/usr/sbin/usb_modeswitch

MODPROBE=/sbin/modprobe
AWK=/usr/bin/awk
SED=/bin/sed
IP=/bin/ip
LSUSB=/usr/bin/lsusb
IPTABLES=/usr/sbin/iptables
IPSET=/usr/sbin/ipset
GREP=/bin/grep
XARGS=/usr/bin/xargs
TR=/usr/bin/tr
FIND=/usr/bin/find
SLEEP=/bin/sleep

$MODESWITCH -v $vid -p $pid -V $vid -P $pid

$MODPROBE usbserial vendor=${vid} product=${pid}

$SLEEP 3


bus=`$LSUSB | $GREP "${vid}:${pid}" | $AWK '{print $2}' | $TR -d '0'`

path_usb=`$FIND ${path_dev} -name ${bus}-*`

echo "-1" > ${path_usb}/power/autosuspend_delay_ms

echo "on" > ${path_usb}/power/control

mac=`$LSUSB -d ${vid}:${pid} -v 2>/dev/null | $SED -n 's/.*\(iMacAddress.*\)/\1/p' | $AWK '{print $3}' | $SED -e 's/\(.*\)/\L\1/'`

eth_if="enx${mac}"

$IP address add $ip_addr dev $eth_if

$IP link set $eth_if up

/etc/firewall/rc.firewall


$IPTABLES -t nat -A POSTROUTING -o $eth_if -j MASQUERADE

$IPTABLES -I FORWARD -p TCP -o $eth_if --dport smtp -j DROP

В даному скрипті відключається автозасипання модему а також переключення його в режим “модем”, бо інколи він буває в режимі диску.

Наступний скрипт перевіряє чи живий модем і якщо ні – вимикає і вмикає USB-порт:

#!/bin/sh

ip_addr="192.168.222.22/24"
gw="192.168.222.1"
path_dev="/sys/bus/usb/drivers/usb"
vid="12d1"
pid="14db"
sleep_time=3
IP=/bin/ip
GREP=/bin/grep
CURL=/usr/bin/curl
TR=/usr/bin/tr
LSUSB=/usr/bin/lsusb
AWK=/usr/bin/awk
FIND=/usr/bin/find
SED=/bin/sed
SLEEP=/bin/sleep

($IP addr | $GREP $ip_addr) && ($CURL -s -m 7 --connect-timeout 5 http://${gw}/html/index.html | $GREP hilinkapp_string) && exit 0

bus=`$LSUSB | $GREP "${vid}:${pid}" | $AWK '{print $2}' | $TR -d '0'`
cd $path_dev || exit 1
usb_number=`$FIND . -name ${bus}-* | $SED 's/^.\///'`

echo "$usb_number" > unbind
$SLEEP $sleep_time
echo "$usb_number" > bind

$SLEEP $sleep_time

/opt/scripts/usb_modem.sh

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff