![wvdial、ppp0 和设置默认路由(自动)](https://linux22.com/image/1459833/wvdial%E3%80%81ppp0%20%E5%92%8C%E8%AE%BE%E7%BD%AE%E9%BB%98%E8%AE%A4%E8%B7%AF%E7%94%B1%EF%BC%88%E8%87%AA%E5%8A%A8%EF%BC%89.png)
我正在设置一个 3G 连接,supervisord
使用wvdial
无头机器 (raspberryPi/raspbian) 进行监控,一旦它上线,我只能通过 3G 连接访问。简而言之,supervisor 保持 wvdial 运行,并关闭 wvdial autoreconnect(我读到某处wvdial 在自动重新连接方面不太好)。
连接保持正常,没有任何问题,但默认路由并不总是设置,在这种情况下我无法访问该框。我无法手动设置路由sudo route add default ppp0
,显然一旦上线就行不通了。我可以简单地在脚本中运行上述操作,但如果路由已经存在,它会失败,我需要一些错误处理,而且必须有一些干净的方法来完成它。关于缺少的配置选项有什么提示吗?
我的配置(我认为这些是相关文件):
/etc/wvdial.conf
:
[Dialer Defaults]
Modem Type = Analog Modem
ISDN = 0
Phone = *99#
Stupid mode=1
Auto Reconnect = off
[Dialer myprovider]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0
Baud = 115200
Modem = /dev/gsmmodem
Username = xxxx
Password = xxxx
/etc/ppp/peers/wvdial
:
noauth
name wvdial
defaultroute
replacedefaultroute
/etc/network/interfaces
:
auto eth0
iface eth0 inet static
address 192.168.2.10
netmask 255.255.255.0
gateway 192.168.2.1
dns-nameservers 8.8.8.8 8.8.4.4
答案1
您可以编写自己的脚本来执行路由/etc/ppp/ip-up.d/
该目录下的任何脚本都从脚本中调用/etc/ppp/ip-up
这些变量可以通过 ip-up 访问:
# This script is called with the following arguments:
# Arg Name Example
# $1 Interface name ppp0
# $2 The tty ttyS1
# $3 The link speed 38400
# $4 Local IP number 12.34.56.78
# $5 Peer IP number 12.34.56.99
# $6 Optional ``ipparam'' value foo
# These variables are for the use of the scripts run by run-parts
PPP_IFACE="$1"
PPP_TTY="$2"
PPP_SPEED="$3"
PPP_LOCAL="$4"
PPP_REMOTE="$5"
PPP_IPPARAM="$6"
export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM
这对我有用,能够添加路线并设置度量。
答案2
我找不到任何好的解决方案,因此我选择了一个简单的 cron 脚本,它执行以下操作:
#!/bin/bash
route_found=$(/sbin/route -n | /bin/grep -c ^0.0.0.0)
ppp_on=$(/sbin/ifconfig | /bin/grep -c ppp0)
if [ $route_found -eq 0 ] && [ $ppp_on -eq 1 ]
then /sbin/route add default ppp0
fi
虽然看起来不太好,但确实有用!它只是检查是否有默认路由,如果没有,则通过 ppp0 添加一条。