浅析linux下脚本拨号上网

                                 浅析linux下脚本拨号上网
                                                             

owlbird          


    既然是拨号上网,就不能不提到ppp(point-to-point protocol)协议.ppp协议提供了一种通过串行点对点联接传输数据报的方式.它由三部份组成:一种在串行封装数据报的方式,扩展联接控制协议LCP,和用来建立和配置不同网络层协议的家族网络控制协议NCP.封装方案由内核驱动代码来提供.pppd(ppp daemon)提供基本的LCP,认证支持,和建立和配置IP的网络控制协议NCP.一个ppp会话分为四个步骤:连接建立、连接质量控制、网络层协议配置、连接终止;提供了密码认证协议(PAP)或者邀请握手认证协议(CHAP)来保证连接安全.使用PPP你可以把你的 Linux PC连接到一台ppp服务器上并存取该服务器所连接的网络资源就如同你是直接连接在该网络上一般。你也可以把你的Linux PC设为一台ppp服务器,这样一来其它电脑就可以拨入你的电脑并且存取在你区域网络里的资源。

 当然,对于我们最终用户来讲,它是一个server/client模型的应用。本文主要讨论客户端怎样拨号上网,毕竟对于桌面系统的用户,ppp是日常生活的一个重要组成部分。在这里我想大家可能对windows下的拨号适配器的简单易用深表"敬佩",在这里我不想对其进行具体讨论,微软公司提供的TAPI可以让每一个windows下的程序员编写一个拨号程序不是一件困难的事,而在linux下呢?无论是gnome下的wvdial还是kde下的kppp,他们与纯脚本ppp-on相比不过是更直接,更易操作,称他们为图形化的拨号脚本并不为过,因为他们最终都是调用pppd这个功能强大大却不好驾驭的程序。有人告诉我kppp与windows下的拨号适配器功能差不多,不过我要告诉你kppp对pppd程序的依赖程度大过kppp作为一个独立的拨号程序,甚至/etc/ppp/options下的选项值对kppp的影响也是不可忽视的。

  关于linux下脚本拨号的过程:(其实可适用于linux下所有的拨号过程,当然实际过程没有这么简单,如果有兴趣,请阅读源码)

1.由pppd程序调用chat会话程序
2.chat会话程序负责拨号,启动服务器端的pppd程序,验证身份,然后chat会话程序结束
3.由pppd程序继续chat会话程序的工作,与服务器端的pppd程序进行握手,建立ppp连接

  ppp-on脚本包含有pppd程序,而ppp-on-dialer脚本含有chat会话程序,如果说pppd程序完成 的是连接建立、连接质量控制、网络层协议配置、连接终止,那么chat程序完成的是明文(textword)的验证,如果是拨入的服务器端需要密码认证协议(PAP)或者邀请握手认证协议(CHAP)来保证连接安全,那么还须在/etc/ppp目录下配置pap-secrets或chap-secrets文件。 

关于ppp-on,ppp-on-dialer纯脚本拨号的配置

一个完整的ppp-on文件如下:(这里的实例及ppp-on-dialer文件均以163直通车为例)

TELEPHONE=163 # ISP提供的上网电话号码 
ACCOUNT=163 # 账号名称 
PASSWORD=163 # 登录密码 
LOCAL_IP=0.0.0.0 # 本地IP地址,0.0.0.0表示由ISP动态分配 
REMOTE_IP=0.0.0.0 # 远端IP地址,一般为0.0.0.0 
NETMASK=255.255.255.0 # 子网掩码 
export TELEPHONE ACCOUNT PASSWORD / 
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer /
exec /usr/sbin/pppd lock modem crtscts /dev/ttyS0 115200 /
asyncmap 0 kdebug 4 /
$LOCAL_IP:$REMOTE_IP noipdefault netmask $NETMASK defaultroute /
connect $DIALER_SCRIPT& 

这个文件需要注意的地方:
a.注意"/"表示一行完整的结束。
b.尽量把kdebug的级别设置高一些,因为根据kdebug的级别来确定文件/var/log/messages的详细程度。

一个完整的ppp-on-dialer文件如下:

exec chat -v /
TIMEOUT 3 /
ABORT '/nBUSY/r' /
ABORT '/nNO ANSWER/r' /
ABORT '/nRINGING/r/n/r/nRINGING/r' /
ABORT '/nUsername/Password Incorrect/r'/ 此行可缩短由于账号密码不正确的验证时间
'' /rAT /
'OK-+++/c-OK' ATH0 /
TIMEOUT 30 /
OK ATDT163 /
sername:--sername: 163 /
assword: 163 / 

   大家说以上配置对吗?文件配置是对的,但是问题不少。我还是以实际问题来做具体分析吧(前提:无论外猫内猫均已装好,检查命令:echo "echo ATDT 163">/dev/modem),在/etc/ppp目录下键入了./ppp-on命令后,出现如下错误:

1.TR的亮,无拨号音。

解决办法:

首先检查ppp-on-dialer文件的权限,设为chmod 7 ppp-on-dialer
然后查看ppp-on-dialer文件,每行后面的 "/"是否存在
最后查看倒数第三行ok ATDT$TELEPHONE的电话号码是否设置正确,注意这里需设为实际电话号码,不是变量

2.在/var/log/messages文件中出现如下提示:
21:13:32 ken pppd[657]: CCP terminated by peer
21:13:32 ken pppd[657]: Compression disabled by peer. 
或直接出现connect scripts fail提示(反复N次均为如下提示)

注意:在ppp-on-dialer文件的chat -v表示通过syslogd将客户端与服务器端建立连结的会话信息写入了/var/log/messages文件,如果你要查看这个会话信息,请键入tail -f /var/log/messages或者tailf /var/log/messages,这些信息对于正确配置拨号脚本文件很有用. 

解决办法:

首先检查账号密码是否正确
然后就可能是chat会话程序本身的问题,大家看一下面一个例子:

成都天府热线163在minicom下的提示:
***********************************************
*Quidway A8010 Internet Server
*welcome!!
*********************************************** 
please input username:

please input password:

成都天府热线169在minicom下的提示: 
*** Welcome To TianFu Online EeYing01-11 ! ***
login:
password: 

   大家可能注意到有什么不同了吧!也就是不同拨号服务器对于账号密码输入提示的不同,用过windows拨号终端的朋友可能会知道,那么windows拨号为什么没有这个问题,因为这是chat程序本身的问题:不能根据拨号服务器对于账号密码的提示不同而send账号和密码,解决办法:用minicom去得到正确的提示,根具提示修改ppp-on-dialer文件最后两行的配置,这里以成都天府热线163,169在minicom下的提示为例:

163:
sername:--sername: 163 /
assword: 163 / 

169:
ogin:--ogin: liujien / 
assword: liujien /

  这样就完了吗,没有,这里的配置还要根据你的isp的要求(hint),用minicom N次去得到正确的提示,不过你还要冒着你的isp修改账号密码提示的风险,所以我劝你放弃chat会话程序吧。因为kppp,wvdial都不存在这个问题.chat会话程序是force,而wvdial,kppp却是guess.带着这个问题我读了ppp-2.4.1源码的说明文件,其实作者已在ppp-2.3.11版就已提供了PLUGINS PASSPROMPT(注:ppp-2.3.10版已提供插件支持,大家用redhat6.2自带了ppp-2.3.11的RPM包,至于插件一般的国内的LINUX网站上提供的ppp源码包都附带有),这个插件提供给第三方程序将账号密码发送给你的isp的调用功能。相关内容的英文如下:

A new `passprompt' plugin is included, thanks to Alan Curry, which makes it possible for pppd to call an external program to get the PAP password to send to the peer.

那么到底如何使用这个plugin呢?在包含pppd.h头文件的目录下编译passprompt.c文件
         gcc -c -O passprompt.c
         gcc -shared -o passprompt.o
  大家就可得到一个passprompt.so的共享链接文件,将之拷贝到/etc/ppp/plugins目录下,修改/etc/ppp/options文件,加入一行plugin /etc/ppp/plugins/passprompt.so,然后你就可修改ppp-on文件的将DIALER_SCRIPT指向你所要指定的脚本文件,可自编程序或者在网上去下载一个第三方程序。
  我给大家提供了一个简单方法,大家可安装wvdial拨号程序,然后在gnome下将/etc/wvdial.conf文件配置好,在/etc/ppp目录下新建一个脚本,命名为wvdial,内容如下wvdial 163 (163是你所要拨号的电话号码),然后chmod 7 wvdial,修改ppp-on文件,如:DIALER_SCRIPT=/etc/ppp/wvdial /

3.客户端已得到一个ip地址(用ifconfig 命令即可看到),通过域名无法浏览网页,通过ip地址可以。

解决办法:
   一般的办法:去查isp给你提供的手册,得到域名服务器的ip地址,修改/etc/resolv.conf文件如下:nameserver 61.139.2.69(我以成都163为例),还可以在windows下用ipconfig /all命令也能得到dns服务器地址,因为windows的拨号程序默认设置为:自动获得dns服务器地址。

软件作者给我们提供的办法:
what was new in ppp-2.3.6.
**************************
Added new option `usepeerdns', thanks to Nick Walker <nickwalker@email.com>. If the peer supplies DNS addresses, these will be written to /etc/ppp/resolv.conf. The ip-up script can then be used to add these addresses to /etc/resolv.conf if desired (see the ip-up.local.add and ip-down.local.add files in the scripts directory).

   软件作者在ppp-2.3.6版即提供了类似于windows 拨号程序的选项:usepeerdns,如果你的isp提供dns服务器地址,将在/etc/ppp/resolv.conf文件及/etc/resolv.conf文件中写入主要域名服务器地址和辅助域名服务器地址,如下:
nameserver 61.139.2.69
nameserver 202.103.4.5 
如何设置:修改/etc/ppp/options文件,添加一行"usepeerdns"

后记:
   在这里笔者抛砖引玉,对linux脚本拨号上网并没有作太多深入的探讨,只是就围绕几个常见的问题进行了分析并提供了比较简单的解决办法.希望大家能够多读一些软件作者给我们提供的英文说明文件,因为国内的有些资料太过陈旧,不要没有耐心去读man pages,他们很有用,不过去读一读某些网站的文章是一个不错的选择。如果大家对我的文章有不同的看法,请给我写信,不吝赐教,谢谢.

             





owlbird工作室版权所有,若要转载请务必与我们联系

联系方式owlbird@163.com

上一页 第 1 2 3 4 页 下一页 八、再发布路由协议   九、TCP/IP症状和原因   症状 原因   本地主机不能与远程主机通讯 1) DNS工作不正常2) 没有到远程主机的路由3) 缺少缺省网关4) 管理拒绝(ACL)   某个应用程序不能正常工作 1) 管理拒绝(ACL)2) 网络没有正常配置以处理该应用程序   启动失败 1) BootP服务器没有MAC地址的实体2) 缺少IP helper-address3) ACL4) 修改NIC或MAC地址5) 重复的IP地址6) 不正常的IP配置   不能ping远程主机 1) ACL2) 没有到远程主机的路由3) 没有设置缺省网关4) 远程主机down   缺少路由 1) 没有正确配置路由协议2) 发布列表3) 被动接口4) 没有通告路由的邻居5) 路由协议版本不一致6) 邻居关系没有建立   相邻关系没有建立 1) 不正确的路由协议配置2) 不正确的IP配置3) 没有配置network或neighbor语句4) hello间隔不一致5) 不一致的area ID   高的CPU利用率 1) 不稳定的路由更新2) 没有关闭debug3) 进程过重   路由触发活跃模式 1) 不一致的间隔2) 硬件问题3) 不稳定的链路   十、TCP/IP症状和行动计划   问题 行动计划   DNS工作不正常 1)配置DNS主机的配置和DNS服务器,可以使用nslookup校验DNS服务器的工作   没有到远程主机的路由 1) 用ipconfig /all检查缺省网关2) 用show ip route查看是否相应路由3) 如果没有该路由,用show ip route查看是否有缺省网关4) 如有网关,检查到目标的下一跳;如无网关,修正问题   ACL 有分离的问题与ACL相关,必须分析ACL、或重写ACL并应用。   网络没有配置以处理应用程序 查看路由器配置   Booting失败 1) 查看DHCP或BootP服务器,并查看是否存在故障机的MAC实体2) 使用debug ip udp校验从主机接收的包3) 校验helper-address正确配置4) 查看ACL是否禁用包   缺少路由 1) 在第1台路由器上用show ip route查看所学到的路由2)校验相邻路由器3)有正确的路由network和neighbor语句4) 对OSPF,校验通配符掩码5) 检查应用到接口上的distribute list6)验证邻居的IP配置7) 如果路由被再发布,验证度量值8) 验证路由被正常的再发布   没有构成相邻关系 1) 用show ip protocol neighbors列表已构成的相邻关系2) 查看没有构成相邻关系的协议配置3)检查路由配置中的network语句4)用show ip protocol/interface查看特定的接口信息,如Hello间隔 第7章 处理串行线路和帧中继连接故障   一、处理串行线路故障   1、HDLC封装   High-level Data Link Control(HDLC)是用于串行链路的一种封装方法,HDLC是Cisco路由器串行接口的缺省封装方法。   处理串行链路故障的第一步就是查看链路两端要使用相同的封装类型。   Show interface serial 1 ;查看接口信息   Clear counters serial number ;复位接口的计数器到0   正常情况下,接口和line都是up的。   线缆故障、载波故障和硬件故障都可导致接口down,通过校验电缆连接、更换硬件(包括电缆)、检查载波信令定位问题。   接口up,line down:CSU/DSU故障、路由器接口问题、CSU/DSU或载波的时间不一致、没有从远端路由器接收到keepalive信令、载波问题。应验证本地接口和远端接口的配置。   接口重启的原因:   ? 数秒内排队的包没有被发送;   ? 硬件问题(路由器接口、线缆、CSU/DSU);   ? 时钟信令不一致   ? 环路接口   ? 接口关闭   ? 线协议down且接口定期重启   show controllers serial 0 ;显示接口状态、是否连有线缆、时钟速率   show buffers ;查看系统buffer池,接口buffer设置   debug serial interface ;显示HDLC或Frame Relay通信信息   2、CSU/DSU环路测试   有四种类型的环路测试:   ? 在本地CSU/DSU上测试本地环路;   ? 在远端CSU/DSU上测试本地环路;   ? 从本地NIU到远端CSU/DSU测试远端环路;   ? 从远端NIU到本地CSU/DSU测试远端环路;   用PPP封装的串行链路上,PPP用协商Magic Number检测环回网络。   3、串行线中总结:   1) 症状和问题:   症状或情形 问题   Interface is administratively down;line protocol is down 1) 接口被从命令行关闭2) 不允许重复的IP地址,两个使用相同IP地址的接口将down   Interface is down;line protocol is down 1) 不合格的线缆2) 没有本地提供商的信令3) 硬件故障(接口或CSU/DSU、线缆)4) 时钟   Interface is up;line protocol is down 1) 未配置的接口:本地或远程2) 本地提供商问题3) Keepalive序号没有增加4) 硬件故障(本地或远端接口、CSU/DSU)5) 线路杂音6) 时钟不一致7) 第2层(如LMI)   Interface is up;line protocol is up(looped) 链路在某处环路   Incrementing carrier transition counter 1) 来自本地提供商的信号不稳定2) 线缆故障3) 硬件故障   Incrementing interface resets 1) 线缆故障,导致CD信号丢失2) 硬件故障3) 线路拥塞   Input drops,errors,CRC,and framing errors 1) 线路速率超过接口能力2) 本地提供商问题3) 线路杂音4) 线缆故障5) 不合格线缆6) 硬件故障   Output drops 接口传输能力超过线路速率   2) 问题和行动   问题 解决行动方案   本地提供商问题 1) 检查CSU/DSU的CD信号和其它信号,看链路是否在发送和接收信息2) 如果没有CD信号或有其它问题,联系本地提供商处理故障   不合格或故障的线缆 1) 使用符合设备要求的线缆2) 使用breakout盒检查3) 交换故障线缆   未配置的接口 1) 使用show running-config校验接口配置2) 确认链路两端使用相同的封装类型   Keepalive问题 1) 验证keepalive被发送2) 配置了keepalive发送,debug keepalive3) 验证序号在增加4) 如果序号不增加,运行环路测试5) CSU/DSU环路,序号仍不增,则硬件故障   硬件故障 1)更换硬件   接口在环路模式 1) 检查接口配置2) 如果在接口配置有环路,移除3) 如果接口配置被清除,清除CSU/DSU环路模式4) 如CSU/DSU不在环路模式,可能是提供商置环   接口administratively down 1) 检查是否有重复的IP地址2) 进行接口配置模式,执行no shutdown   线路速率大于接口能力 1) 使用hold-queue减少进入的队列尺寸2) 增加输出的队列尺寸   接口速率大于线路速率 1) 减少广播流量2) 增加输出的队列3) 如有需要,使用队列算法 二、处理帧中继故障   DLCI用于在帧中继中标识虚拟链路,DLCI仅仅是本地信令,DLCI与第3层IP地址相映射。   处理帧中继的步骤:   1) 检查物理层,线缆或接口问题;   2) 检查接口封装;   3) 检查LMI类型;   4) 校验DLCI到IP的映射;   5) 校验Frame Delay的PVC;   6) 校验Frame Delay的LMI;   7) 校验Frame Delay映射;   8) 校验环路测试;   1、帧中继的show命令   show interface   show frame-relay lmi ;显示LMI相关信息(LMI类型、更新、状态)   show frame-relay pvc ;输出PVC信息、每条DLCI的LMI状态、…)   show frame-relay map ;提供DLCI号信息和所有FR接口的封装   2、帧中继的debug命令   debug frame-relay lmi ;显示LMI交换信息   debug frame-relay events ;显示协议和应用程序使用DLCI的细节   3、帧中继总纳   1) 症状和问题   症状或情形 相关问题   Frame Realy link is down 1) 线缆故障2) 硬件故障3) 本地服务商问题4) LMI类型不一致5) Keepalive没有被发送6) 封装类型不一致7) DLCI不一致   从Frame Delay网络不能ping远端主机 1) DLCI指定了错误的接口2) 封装类型不一致3) ACL问题4) 接口配置错误   2) 问题和行动   问题 解决行动方案   线缆故障 1) 检查线缆并测试接头2) 更换线缆   硬件故障 1) 执行环路测试,以分离硬件2) 将线缆连接到路由器的另一同样配置的接口,如OK,则需更换硬件   本地服务提供商问题 1) 如环路测试使LMI状态up,但不能连接远端着站点,联系本地载波2) 包含载波问题,就好象FR配置错误,如DLCI不一致或封装不一致。   LMI类型不一致 1) 校验路由器的LMI类型与PVC上的每个设备都一致2) 如使用公共提供商网络,不能访问LMI,与提供商联系   Keepalive问题 1) 使用show interface查看是否keepalive被禁用,或校验keepalive被正常配置2) 如果keepalive设置错误,进入配置模式并在接口上指定keepalive间隔   封装类型 1) 校验两端路由器的封装方式相同,如有非Cisco路由器,必须用IETF。用show frame-relay命令显示封装信息2)用encapsulation frame-relay ietf更换封装方式,与可用frame-relay map设置某个PVC的封装。   DLCI不一致 1) 用show running-config和show frame-relay pvc显示指派给某接口的DLCI号2) 如DLCI号配置正常,联系供应商校验FR交换机是否了相同的DLCI   ACL问题 1) 使用show ip interface显示应用到接口上的ACL2) 分析ACL,如有需要,删除或修改它 第8章 处理ISDN故障   一、ISDN基本原理   二、常见ISDN故障   ISDN问题分成3类:配置不当的路由器、物理线缆和ISDN协议、配置不当的交换机。   1、配置不当的路由器   配置不当由于不同原因:typographical错误、从服务供应商提供的错误信息、本路由器配置不正确   1) SPID(Service Profile Identifiers):如SPID和LDN配置错误,将有ISDN连接问题。SPID仅用于北美,只有服务供应商要求时才设置。   2) CHAP:CHAP认证在使用PPP封装的接口上使用。两端路由器的CHAP配置一定要相同。在PPP中,用户名和口令是大小写敏感的。   3) Dialer Map实体:Dialer map关联高层地址到相关的电话号码。每种协议需要一条dialer map语句。   4) 访问列表:ACL可用于ISDN连接以阻止某类型流量触发连接。   5) PPP:   2、物理层连接   1) BRI:在现有电话线上提供数字服务。   2) ISDN BRI信道:2B+D(2*64+16+48=192kbps);ISDN BRI的物理帧为48bits,链路每秒发送4000帧。   3) 本地环路:客户和CO之间的链路,连接ISDN设备到ISDN交换机。   4) 物理层:参考点(R、S、T、U);设备(LT/ET、NT1、NT2、TE1、TE2、TA)   三、配置不当的电话交换机   在新安装ISDN时,必须考虑服务供应商ISDN交换机配置错误的可能性。   1、第2层故障处理:   ISDN第2层故障处理的目标:q.921协议和PPP。   1) q.921:ISDN的第2层在q.921中定义。Q.921信令在D信道上用LAPD协议传输。处理q.921故障最常用命令是debug isdn q921,问题常与TEI(terminal endpoint identifier)、SAPI(service access point identifier)和SABME(set asynchronous balanced mode extended)有关。   TEI=127表示广播;TEI=64-126保留用于动态分配。   SAPI=0表示当前第3层信令;63表示用于TEI值分配的管理SAPI;64为呼叫控制。   2) PPP:PPP使用LCP设置和维护链路;NCP配置和维护网络层协议。   2、第3层故障处理:   ISDN第3层也叫q.931,使用debug isdn q931命令可查看call setup、connect、release、cancel、status、disconnect和、user information。   ISDN第3层连接在本地路由器(TE)和远端ISDN交换机(ET)之间。   ISDN呼叫建立的过程:   1) SETUP:在本地TE和远端ET之间发送信息   2) CALL_PROC:呼叫处理信令   3) ALERT:   4) CONNECT   5) CONNECT_ACK:   3、交换机类型:   配置ISDN时,必须用isdn switch-type命令指定本地环路的交换机。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值