在编写脚本之前,要先安装好ppp相关驱动,pppd
已知pppd位于 /usr/sbin , chat 位于 /usr/sbin , options 位于 /etc/ppp 。
要编写脚本,就要切换目录到 /etc/ppp/peers,若没有peers目录则自行创建。因为是在/etc目录之下,需要使用sudo或者进入root模式才能创建或者编辑。安装ppp时,pppd就已经被固定到系统路径 /etc/ppp 找options, 到 /etc/ppp/peers 找脚本文件。可到ppp源码 ppp-2.4.7/pppd 下找pathnames.h 修改,如图:
所有的配置流程都是:
chat脚本的配置,options的脚本配置,该脚本会引用chat脚本,pppd应用程序会调用options脚本,如果需要用户、密码登陆,就要配置chat-secret或者pap-secret,该脚本也会被options脚本引用。
1.首先拷贝pppd和chat到/usr/sbin目录;
2.然后编写三个脚本,option脚本要注意的是串口设备名称,不要复制网上的脚本,一定要使用可用的串口设备名称。
pppd [ options ]
pppd应用程序会调用options脚本文件,得益于pppd程序的一个选项参数 call name
call name 和下面rasppp脚本中的选项一样,都是pppd的参数
它的解释是这样的:从/etc/ppp/peer/ name文件中读取其他选项该文件可能包含特权选项,如noauth,即使pppd不是由root运行。name字符串不能以/开头,也不能包含…作为一个路径名组件。
我们通常把这些选项放在name文件中,然后我们只需要pppd call name就可以了
rasppp
# /etc/ppp/peers/rasppp
# Usage: sudo pppd call rasppp
# 连接调试时隐藏密码
hide-password
# 该手机不需要身份验证
noauth
# 用于呼叫控制脚本
connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/rasppp-connect-chat'
# 断开连接脚本
disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/rasppp-disconnect-chat'
# 调试信息,pppd将以可读的形式记录所有发送或接收的控制数据包的内容
debug
# 4G模块对应的串口设备名称
/dev/ttyUSB4
# 串口波特率
115200
# 使用默认路由,IPCP协商成功后,在系统路由表中添加一条缺省路由,使用对等体作为网关。当PPP连接断开时,删除此表项。
defaultroute
# 不使用默认IP:当没有指定本地IP地址时禁用默认行为,这是为了从主机名确定(如果可能)本地IP地址。
noipdefault
# 不使用PPP压缩
novj
novjccomp
noccp
#使用该选项,pppd将接受对等体对我们本地IP地址的想法,即使本地IP地址在选项中指定
ipcp-accept-local
#通过该选项,pppd将接受对等体对其(远端)IP地址的想法,即使远端IP地址在选项中指定
ipcp-accept-remote
#不要使用调制解调器控制线
local
# 指定pppd应该为串行设备创建一个锁文件,以确保对该设备的独占访问,其他程序在发现这个文件后,就能得知相应的串口已经被使用。
lock
#使用转储选项,pppd将打印所有已设置的选项值
dump
# 保持pppd连接到终端。在pppd程序需要放到后台运行时,最好不要该选项
nodetach
# 用户名 密码
user ctnet@mycdma.cn
password vnet.mobi
#电信需要用户名和密码,移动、联通拨号不需要,下文给出不同运营商的配置
# 硬件流量控制
crtscts
#将用于身份验证的远程系统的假定名称设置为name
remotename 3gppp
#为ip-up、ip-pre-up和ip-down脚本提供额外参数。如果提供了这个选项,提供的字符串将作为这些脚本的第6个参数提供
ipparam 3gppp
# 向对端请求最多2个DNS服务器地址
usepeerdns
rasppp-connect-chat
# 连续5秒,收到以下字符,则退出执行
# 进行超时控制,增加对特殊情况的处理,加入下面字段
TIMEOUT 5
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "NO CARRTER"
ABORT "NO DIALTONE"
#一个chat脚本都是由字符串对来组成的。前面的字符串都是期望获取的串,紧跟的是发送的字符串
# 例如 ""AT,不管收到什么字符串,先发出字符串AT
# OK \rATZ,发送ATZ,希望收到的是OK
""AT
OK \rATZ
# 建立连接,电信为空,下文给出各运营商配置
OK \rAT+CGDCONT=1,"IP",""
# 拨号,#777是电信的拨号号码
OK-AT-OK ATDT#777
CONNECT \d\c
rasppp-disconnect-chat
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\NSending break to the modem\n"
""\k"
#挂断电话
""+++ATH"
SAY "\nGood bye !\n"
3.执行pppd,成功获取ip。
sudo pppd call rasppp &
4.得到ip和dns后,关掉eth0,添加dns到/etc/resolv.conf,再用route命令添加默认网关为远端ip。
route add default gw xx.xx.xx.xx
5.此时就能ping通外网。
更多的设置可以去学习pppd和chat程序的选项参数~
Linux下man pppd、man chat就可以了
另外,在我的博客中也有两个程序的man手册的翻译
参考链接:https://blog.csdn.net/pjwshuai/article/details/124533452