分享
 
 
 

自己动手架PPP Server

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

PPP的基本概念

就第一层实体层而言,PPP必须建於全双工(full-duplex)的连结之上,但拨接线(dial-upline)或专线(dedicatedline)均可适用;此外,8bits没有同位检查的非同步或同步模式均可。PPP对於一般的DTE与DCE介面均有支援,如EIARS-232-C,EIARS-422,EIARS-423以及CCITTV.35;而对於DCE而言,PPP协定并不需要来自於DCE(如modem)的一些控制讯号,如RTS、CTS、DCD、DTR。但该协定也建议,如果用那些控制信号的话,可增强PPP双方的效能;换句话说,PPP协定是建议使用那些信号。

就PPP的layer2而言,它使用HDLC框架(一种源自於IBM的SNA网路架构中datalinklayer的SDLC框架),而HDLC中的FCS(FrameCheckSequence)可以把传输过程中的错误侦测出来。此外,流量控制的XON/XOFF信号在PPP协定中也可以穿透过连结,而使双方管制流量。为了去适应不同的第叁层网路层的环境与第一层实体层,第二层的PPP有如下的功能:

建立一条error-free的连结或结束连结。

侦测线上的情况,并做适当的处理。

协调网路层所需之参数,如封包大小、非同步控制讯号、密码验证通讯协定、协定栏压缩、线路回圈设定、品质协定等。这些都是透过LinkControlProtocol(LCP)来达成的。

就PPP在第叁层的功能而言,它可封装(encapsulation)不同型态的网路层的封包,它具有多重协定分封的功能,所以可适用於主机、桥接器、路由器之间的连结。NCP(NetworkControlProtocol)就是负责PPPlayer3的协定,比方说,动态分配IPAddress就是由NCP达成的。

PPP框架格式

它是用软体的方式去模拟HDLC框架,当然也是用软体的方式去计算出FCS(CRC-CCITT,即x^0+x^5+x^12+x^16),图一为其框架格式:

旗标Flag

它必须为二进码的01111110,代表框架起始或结束,如连续两个框架的话,中间只需插入一个Flag即可;而Inter-frameFill为框架两不连续框架间所要保持之信号,以非同步模式而言,它须全为*1*,而同步模式须为Flag,即不断送出01111110信号。

位址Address

它必须为二进码的11111111,即All-Stationsaddress才能被对方所接受。

控制Control

它必须为二进码的11111111,即UnnumberInformation(UI)才能被对方所接受。

协定Protocol

它为2个bytes,它表示之後Information的型态,如表一:PPP规定所有的协定须为奇数,且第一个byte须为偶数;而PPP协定范围也有不同的意义,如表二:

资讯Information

即上述协定(protocol)所指定的资料,内定最大长度为1,500bytes。

框架检查序FCS

为16个bits,方式为CRC-CCITT,CRC的计算包括Address、Control、Protocol、Information等栏位。

LCP封包格式

LCP与NCP的封包是架在Information栏内,比方说当PPP的协定(Protocol)栏为c021时,那麽在Information栏内的资料就属於LCP封包,而它的格式如图二:

码(Code)

1个位元组,它是用来分辨LCP封包的型态,可分为叁类:

识别字(Identifier)

1个位元组,它是用来识别我们的请求或回应。

长度(Length)

2个位元组,它表示Code、Identifier、Length与Data的总长度。

资料(Data)

0个或以上个位元组,它为封包所携的资料。

以上是PPP原理的简介,我们原则上可把LCP当做是建立、维护、终止连线的协定,同时它利用码(Code)来让做为封包的识别型态。有了PPP协定的基本观念後,且让我们亲自动手一下,看看要准备怎样的实验环境。

架好实验环境

首先您的Linux核心版本须大於1.1.14;同时您的核心也必须包含有原始程式,因为接下来的PPP应用程式会更新核心,核心得重新编译。最好您也有一台PC(笔记型电脑由佳)与简易交换机(COS),最後再接上两台数据机,如图叁,就完成基本的PPPServer硬体实验环境。

开始编译与装设程式

首先用gzip-d把ppp22b2.tgz给解开,它会产生ppp22b2.tar,然後再用tarxvfppp22b2.tar就可建立ppp-2.2b2的子目录,接着进入该子目录就可开始编译以及装设程式,读者可依照如下的步骤:

步骤一./configure

在ppp-2.2b2的目录下执行,此步骤先去辨视您所使用的作业系统,再去建立该作业系统所需的makefile,这些makefile之後的步骤会使用到。

步骤二makekernel

在ppp-2.2b2的目录下执行,它会去更新核心中有关PPP部份的原始码,这部份的核心原始码必须与步骤四的PPP应用程式相互配合才行。

步骤叁makezlilo

转换至Linux原始程式的目录之下,并且执行makezlilo来去编译步骤二所更新的原始码;同时若编译成功它就会去更新Linux核心的Image,这个动作也会使得LILO(LinuxLoader)在开机时自动从硬碟来载入新的核心。

步骤四make

在ppp-2.2b2的目录下执行,它会去编译PPPServer所需的PPP应用程式,如chat、pppd、pppstats等,这部份的程式是与步骤二的PPP核心程式配合。

步骤五makeinstall

把步骤四所编译好的PPP应用程式装设至/usr/lib/ppp目录下,同时也会安装说明档。

步骤六重新开机

步骤一至步骤五若能成功的执行,那麽PPPServer所需的核心与PPP应用程式都已备妥,也就是说您的PPPServer已经成功了一半。

接着让我们一步步来检视PPPServer的启动,好让我们在问题发生时能够逐步除错,以免自乱阵脚!

类别值意义

建立与架构连结1Configure-Request

2Configure-Ack

3Configure-Nak

4Configure-Reject

停止连结5Terminate-Request

6Terminate-Ack

线路维护与测试7Code-Reject

8Protocol-Reject

9Echo-Request

10Echo-Reply

11Discard-Request

12RESERVED

PPP启动

首先用gzip-dppplogin.tgz把ppplogin这支程式给解压缩,然後再用tarxvfppplogin.tar就可把ppplogin这个scriptfile给取出来,ppplogin是个很重要的档案,我们之後会用到。

/etc/inittab

这是开启拨接线给PPP使用者,例如:以下是把COM1设定为拨接专用的介面,它的服务程式为/sbin/agetty。

d1:45:respawn:/sbin/agetty-mt6019200,9600,2400

基本上Linux的/etc/inittab档都有如上的定义,您只要把#(comment)拿掉即可。另外您也须留意modem的内建设定,务必使得它能与agetty相容;例如:modem内定与DTE(如PC)的速率要能与agetty的设定相容,同时PPPServer所接modem的设定(如铃响几声後开始进入回应模式)也都必须留意,这些设定是不随modem关机而消失的。

/etc/passwd

这是用来设定使用者登录时所须敲入的帐号与密码,例如以下的指令:

ppp::501:101:ppp:/tmp:/sbin/ppplogin

就是开启一个使用者为ppp的帐号,不用密码,使用者ppp的识别码为501,群组识别码为101,使用者的根目录为/tmp,login正确後所执行的程式为/sbin/ppplogin。

请注意,这个ppplogin就是先前从ppplogin.tgz给解压缩出来,并且我们把它拷备至/sbin目录之下,别忘了它必须设定为可执行模式。

/sbin/ppplogin

它是一个由perl所写成的script档,当使用者成功的login之後,这个script会被叫用来做为使用者签入与PPP应用程式(如PPPD,由编译先前的ppp22b2.tgz所产生)间的桥梁,它的功用详述如下:

首先ppplogin会去了解该位使用者是谁(用/usr/bin/whoami)与他的终端机名称为何(用/usr/bin/tty),然後用此资讯去查阅/etc/slip.hosts确认使用者是否合法,以及/etc/slip.tty确认终端机名称是在许可的范围之内,如果设定都正确的话,ppplogin就会取得IPAddress,然後再去呼叫/usr/lib/ppp/pppd。

以下为笔者自己PPPServer中的slip.hosts与slip.tty的设定:

/etc/slip.hosts:

格式:loginlocal_addrremote_addrnetmaskopt1opt2

例子:ppp148.5.3.211DYNAMIC0xffff0000compressed

这个设定是把ppp这位使用者的设定为DYNAMICIPAddress模式,也就是他的IPAddress是根据他所登录的终端机名称以及/etc/slip.tty的设定所决定的,换句话说,每次登录至PPPServer的IPAddress都是不固定的。

如果读者不想把PPPServer设定在DYNAMICIPAddress模式而想把它设为固定IPAddress的话,那麽直接把DYNAMIC改为您想设定的IPAddress即可,同时ppplogin也不会再去查阅slip.tty了。

/etc/slip.tty:格式:/dev/tty??xxx.xxx.xxx.xxx

例子:/dev/ttys0148.5.3.213

例子:/dev/ttys1148.5.3.214

它是用来设定终端机名称与所对应的IPAddress;例如使用者从com1所连接的modem登录进来,那麽他的终端机名称为/dev/ttys0,同时他所分配到的IPAddress为148.5.3.213;同理,从com2进来则为/dev/ttys1,IPAddress为148.5.3.214。

/usr/lib/ppp/pppd

这个程式是由先前编译ppp22b2.tgz,然後install产生的,ppplogin在取得IPAddress(不管是固定IP或DYNAMICIP)後,就把执行权交给pppd,至此,连结的两端完全进入PPP模式,而pppd就是上述PPP原理的实作程式。

上线看看

以下是笔者用WIN95连上自己所架的PPPServer的过程,首先是架好如图叁的硬体,然後拨号上线之後,出现khhp83login:,接着笔者回应ppp来登录,如图四,等一会而我们就成功的上线啦!如图五所示。

PPP分析

读者可用ifconfig、netstat与先前编译好的PPP应用程式pppstates来去分析PPP;另外README.linux是个很不错的PPPServer说明,读者解开ppplogin.tgz後就可看到,同时该说明也提及一些不错的PPPServer的安全手则,蛮有意思的。PPP的基本的原理请参阅RFC1661与RFC1662,同时由於PPP协定较为烦琐,它还包含有很多的细目,如RFC1332的IPCP、RFC1333PPPLinkQualityMonitory、RFC1334PPPAuthenticationProtocols,有兴趣的读者可参阅上述的RFC;同时笔者认为,若各位对PPP协定有兴趣,不要光读那些RFC,最好自己也能装一次PPPServer与研读原始程式,这样才能真正了解PPP协定与PPPServer。

原作者:不详

来源:LINUX技术支持

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有