我谦卑地走到我的绳索末端,徘徊在疯狂的边缘。
情况如下:
我的业务提供的小型服务使用Raspberry Pi Zero W。
使用华为k4203和usb_modeswitch进行设置,配置如下:
/etc/udev/rules.d/40-usb_modeswitch.rules
# Huawei k4203
ACTION=="add", ATTR{idVendor}=="12d1", ATTR{idProduct}=="1f1c",
RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1f1c -W -M
55534243123456780000000000000011062000000101000100000000000000"
ACTION=="add", SUBSYSTEM=="net", ATTRS{idVendor}=="12d1",
ATTRS{idProduct}=="1590", NAME="4gmodem", RUN+="/root/modem-up.sh"
ACTION=="remove", KERNEL=="4gmodem", RUN+="/root/modem-down.sh"
/root/modem-down.sh
#!/bin/bash
# modem-down.sh
/usr/bin/systemctl restart openvpn@raspz1
/usr/bin/rfkill unblock wifi
/usr/bin/ip link set WIRELESS_INTERFACE up[/code]
/root/modem-up.sh
#!/bin/bash
# modem-up.sh
/usr/bin/rfkill block wifi
#/usr/bin/netctl restart 4gmodem-PROFILE
# Optional
#/usr/bin/ping -c 1 -w 60 8.8.8.8 &&
/usr/bin/systemctl restart openvpn@raspz1
/etc/usb_modeswitch.d/12d1:1f1c
# Vodafone / Huawei K4203
DefaultVendor=0x12d1
DefaultProduct=0x1f1c
#DefaultProduct=0x14fb
TargetVendor=0x12d1
TargetProductList="157a,1590"
MessageContent="55534243123456780000000000000011062000000101000100000000000000"
HuaweiNewMode=1
问题是有时加密狗会断开互联网连接 - 我无法通过SSH连接到它,它与我的VPN断开连接而客户端感到恼火。 当我在办公室时,没什么大不了的 - 我只是拔出加密狗,把它推回去,它再次起作用。
或者,我可以关闭墙上的电源,一旦再次加载,它将重新连接并工作。
然而,我目前正在海外旅行并(试图)度假(我的家人一直要我下车,因为我花了几个小时寻找解决方案)。
所以从本质上讲,我需要一种方法来远程通过某种脚本让加密狗重新连接到网络。
我尝试过的事情:
- >定期ping网络的脚本,如果没有点击google.com,请重新启动pi。
这不起作用。由于我似乎无法掌握的原因,软件重启似乎没有重新启动连接。我有一种感觉,这可能是因为它没有切断加密狗的电源,就像完全重启或拔出加密狗一样。
- >切断加密狗的能力
我尝试使用以下脚本切断加密狗的电源:
echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
sleep 5
echo 1 > /sys/devices/platform/soc/20980000.usb/buspower
这确实削减了功率,但只是暂时(例如,在我发送“回声1”之前它不会保持关闭状态,而是设备将闪烁蓝色几次然后恢复其当前状态。)
需要注意的是,当您第一次插入加密狗时,它会在变为蓝色之前闪烁绿色几次 - 但是上述脚本不能这样做。
- > ifconfig 4gmodem down&&的所有变体达
似乎没有做任何事情。
- > /etc/init.d/networking restart - 似乎没有做任何事情
我认为可以运作的东西:
我已经有了这个想法几天,但风险是如果我错了,pi将保持与互联网断开连接,我将无法修复它直到我回家 - 这不是好哈哈
echo "rebooting internet"
#remove lines from modeswitch so it won't enable modem mode when plugged in.
sudo rm /etc/udev/rules.d/40-usb_modeswitch.rules
#reboot dongle
sudo echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
sleep 5
sudo echo 1 > /sys/devices/platform/soc/20980000.usb/buspower
#modem will hopefully now be flashing green (in storage mode, not modem)
#write to file
sudo cat <<EOT >> /etc/udev/rules.d/40-usb_modeswitch.rules
# Huawei k4203
ACTION=="add", ATTR{idVendor}=="12d1", ATTR{idProduct}=="1f1c", RUN+="/usr/sbin/usb_modeswitch -v
12d1 -p 1f1c -W -M 55534243123456780000000000000011062000000101000100000000000000"
ACTION=="add", SUBSYSTEM=="net", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1590",
NAME="4gmodem", RUN+="/root/modem-up.sh"
ACTION=="remove", KERNEL=="4gmodem", RUN+="/root/modem-down.sh"
EOT
#reboot dongle again with mode_switch reconfigured
sudo echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
sleep 5
sudo echo 1 > /sys/devices/platform/soc/20980000.usb/buspower
# Device should now reboot into modem mode
以上代码的想法是我在设置加密狗时注意到,当不是调制解调器模式时,它会闪烁绿色(例如当您第一次将其插入设备时,在它变为蓝色之前) 所以上面的代码基本上“打破”usb_modeswitch,重新启动加密狗,它将有希望进入存储模式,然后恢复过程。
我认为它可能会奏效,但正如我所说,从这个遥远的地方来说风险太大了。
有没有人对我如何断开连接/重新连接3g Dongle的想法或想法?
由于
答案 0 :(得分:0)
我会定期检查外部IP
尝试:
IP =(socket.gethostbyname(&#34; info.io&#34))
除了:IP =&#39;未知&#39;
打印IP
然后重新启动pi,如果没有。我也投入了一个dhclient wlan0,但这可能仅适用于使用直接ip连接代替wvdial的调制解调器。看看你是否可以在网上找到一个改变调制解调器配置的脚本,以防止它在调制解调器模式以外的任何其他模式下启动,这对我的Sierra 320U来说很有用。