极限首页 业界焦点 软件工程师之路 系统工程师之路 网络工程师之路 软件下载 技术社区
 CVS使用速成配置
 CVS服务器建立和权限配置
 CVS使用手册
 cvs客户端大全
 Linux使用ADSL拨号上网
 打造基于Linux的VPN服务器
 iSCSI的成熟 几款iSCSI磁盘
 软件路由器coyote linux安
 RedHat系统ADSL配置指南
 用Linux将局域网带入Inter
 CVS使用速成配置
 CVS服务器建立和权限配置
 CVS使用手册
 cvs客户端大全
 Linux使用ADSL拨号上网
 打造基于Linux的VPN服务器
 iSCSI的成熟 几款iSCSI磁盘
 软件路由器coyote linux安
 RedHat系统ADSL配置指南
 用Linux将局域网带入Inter

Shell 中文手册

Python 2.3 中文手册

Python 2.4 中文手册

Mysql 4.x 中文手册

PHP 4.x 中文手册

Apache 2.x 中文手册
更多手册

站内搜索:
当前位置:首页>>网络工程师之路>>网络应用>>正文
玩转Linux下的PPP连接
时间:2005-04-27 作者:不详 来源:不详

  在家庭网络和“家庭办公”一族中,PPP连接是非常实用的一项技术。本文将详细讲解在Linux局域网服务器中如何拨出和拨入的方法与技巧,即如何让Linux服务器成为PPP的客户端和服务器,同时讲解如何设置回拨服务。
Linux下如何拨号上网

在Linux服务器中设置PPP,使其能够拨号,并能连接到ISP,从而将计算机与Internet相连。下面为Linux PPP客户端设置的一般步骤。

1.编译内核使其支持PPP

在大多数情况下,不用重新编译内核。如果不能确认Linux是否需要编译,可以查阅说明文档,注意这个内核是否支持PPP。

2.设置串行端口和调制解调器

(1)串口设备文件

Linux下串口设备文件的命名和DOS的关系如下:

DOC COM1=Linux/dev/cua0(and/dev/ttyS0)

DOC COM2=Linux/dev/cua1(and/dev/ttyS1)

一般来说,/dev/cua*是用来拨出的,/dev/ttyS*是用来拨入的,但现在已经可以不加以区分了,都用的是/dev/ttyS*。如果计算机上没有/dev/ttyS*,则需要用mknod来建立这些设备文件。有个脚本程序MAKEDEV可以简化这个工作:

# cd/dev

# ./MAKEDEV ttyS0

(2)设置中断号和I/O地址

使用如下命令设置中断号:

/sbin/setserial/dev/ttyS0 ieq 3#串行鼠标

/sbin/setserial/dev/ttyS1 ieq 4#MODEM1

使用如下命令来查看系统的中断设置,以确保没有中断冲突:

cat/proc/interrupts

I/O地址与中断一样必须是惟一的,可以设置硬件跳线来改变I/O地址。一般串行口的I/O地址是这样的:

ttyS0 address 0x3f8

可以使用下面命令来查看系统的I/O地址设置,以确保没有冲突:

cat/proc/ioports

(3)设置调制解调器

一般情况下,调制解调器的出厂设置不用改变什么。

3.掌握ISP的信息

需要知道ISP一些基本信息,特别是DNS地址,并自己设置DNS。因为对于Linux来说,它不允许在连线之时动态地指定DNS的IP地址。

4.安装拨号所需软件

PPP客户所需的程序有chat和pppd。还有一个终端通信程序minicom,用来测试拨号用的,也要安装上。

chat程序的用途是拨号,并等待提示,根据提示输入用户名和密码等登录信息。pppd的用途是建立并维持与服务器的PPP连接,并传输数据。

5.手动方式建立ppp连接

整个ppp连接很明显可分成两个步骤:

(1)用pppd建立ppp连接

测试拨号能否成功,退出,然后执行pppd程序如下:

pppd debug lock Modem crtscts defaultroute /dev/ttyS1 115200&

在一个单独的虚拟控制台上运行下面代码:

tail-f/var/log/messages

动态地观察各种日志信息,包括pppd的调试信息。如果看到下面信息就说明PPP连接成功了:

Jun23 16:10:31hxf pppd[1234]:local IP address210.88.131.151

Jun23 16:10:31hxf pppd[1234]:remote IP address192.168.10.21

(2)断开连接

当测试通过后,需要把连接断掉,使用如下命令:

Killall pppd

6.使PPP连接自动化

在经过手动连接测试之后,就要把这些变成自动的,目的是只用一个命令就能实现拨号连接。

要使拨号自动化需要两个程序chat和pppd。要得到自动拨号的效果,具体的可查看相关资料。

7.设置域名解析(DNS)

Linux下设置域名解析不太方便,域名服务器需要自己设定。

(1)设置域名服务器

/ect/resolv.conf文件是存放域名服务器地址的地方,它的内容是这样的:

domain your.isp.domain.name

nameserver202.106.196.152

nameserver202.106.196.115

需要做的事情就是把ISP的域名服务器地址填到这个文件里。

(2)自动化

也许只想在拨号时才加上域名服务器地址,别的时间不需要,因此除了手动之外,还可以让这个过程自动化。可以建立/etc/ppp/ip-up.local和/etc/ppp/ip-down.local两个执行的脚本文件。pppd启动之后,会执行/etc/ppp/ip-up.local里的命令;而pppd结束时,会执行/etc/ppp/ip-down.local里的命令。可以先生成一个包含域名服务器的文件,在ip-up.local中将这个文件改成/etc/resolv.conf,并将/etc/resolv.conf保存下来。在ip-down.local中再将保存的/etc/resolv.conf恢复回来。这样就可以实现添加域名服务器的自动化了。

在局域网中设置拨入服务器

在局域网中设置拨入服务器目的就是将Linux局域网设置成跟ISP一样的拨号服务器。假设用户在公司用Linux设置了拨号服务器,然后在家里通过拨号连到公司的拨号服务器上,进而访问公司的局域网,如此就可以实现“家庭办公”。如果公司的服务器是连在Internet上的,用户就可以浏览Internet了。“设置基本的拨号服务器”将告诉用户怎样实现这一功能。“回拨(Callback)”将讲述怎样节省联网所需的电话费。

因为已经介绍如何用Linux服务器做PPP客户端,所以这一节用Windows 98做客户端来配合讲述Linux服务器。

1.设置基本的拨号服务器

如果安装了PPP服务,可以将/etc/sysconfig/network文件里FORWARD_IPV4=false改成true就行了。之后需要重启以激活IP转发。

(1)使Liunx能够接受电话拨入

现在要做的就是使Modem所接的那个串口可以接受外来连接。打开/etc/inittab,会看到这样的几行代码:

#Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

在这几行之后,加上如下一行代码:

3:2345:respawn:/sbin/mgetty ttyS1

它的意思就是让Mgetty的串口ttyS1上监听,等待连接,如果有连接请求,Mgetty就向用户提示输入用户名和密码。

修改好之后,要使修改有效,可以运行如下代码:

init q

为了从远端登录,还要有一个账号,用useradd命令加一个叫ppp的用户,并用passwd命令为它设置口令。

(2)启动pppd与客户建立PPP连接

打开/etc/passwd文件,找到用户ppp的那一行,应该是这样的:

ppp:x:500:500::/home/ppp:/bin/bash

由此可以看出,用户ppp使用的shell程序是bash,现在要做的就是用pppd换掉这个bash。这样当用ppp登录时,就不会执行bash,而是执行pppd。如此,pppd就在服务器端启动了。

具体可以在/etc/ppp建立一个ppplogin文件,内容如下:

#!/bin/sh

exec/usr/sbin/pppd debug passive asyncmap 0 proxyarp lock Modem crtscts

chmod+x ppplogin

用ppplogin替换用户ppp的登录shell,就像如下代码:

ppp:x:500:500::/home/ppp:/etc/ppp/ppplogin

由于pppd执行必须要root权限,所以还要将pppd设成以root权限执行:

chmod u+s/usr/sbin/pppd

替换了登录shell和修改pppd属性之后,可以试一试。与前面介绍方法一样进行拨号,在输入用户名和密码之后,如果能看到pppd所特有垃圾字符,并且一行一行的没完,就说明服务器端pppd已经启动了。接着单击“继续”按钮,也就是启动客户端的pppd,与服务器的pppd进行握手。过了一段时间,就会看到登录网络成功,其标志就是熟悉的绿色小计算机出现了。

(3)针对Windows 98客户的特殊设置

Windows 98要求域名服务器在连接的时候传给它。pppd有个参数ms-dns,就是用来传DNS给客户的。在ppplogin里加上这个参数就可以了,比如:

#!bin/sh

exec/usr/sbin/pppd debug passive asyncmap 0 proxyarp lock

Modem crtscts ms-dns 202.106.0.20

这两个DNS中,第一个DNS是主,第二个DNS是辅的。

2.回拨(Callback)

Callback就是当用户拨号连到拨号服务器时,服务器先断掉连接,然后再拨回给用户。用户的Modem接收这个呼叫,从而建立拨号连接。这样就给“家庭办公”创造了有利条件,可以在家里用回拨的方式连到公司进行办公。

(1)服务器端设置

在设置之前,应该确保Mgetty的Callback程序安装好了。将下面这行内容加到/etc/mgetty+sendfax/login.config中:

call_hxf--/usr/sbin/callback-d-l ttyS1-s 115200 -S 62345678

前面的call-hxf是指为Mgetty增加一个名为call_hxf的用户入口。这个用户只是Mgetty用来启动Callback程序的,而不是Linux系统中的用户,不要真的用useradd添加一个call_hxf用户,这个call_hxf用户名只是Mgetty用的,不是系统的。用户通过Modem连到Linux上,Mgetty提示输入用户名时,如果输入的是call_hxf,Mgetty就调用/usr/sbin/callback程序来处理回拨。参数-b是指在/var/log/mgetty.ttyS1留下调试信息;-1 ttyS1是指使用ttyS1为拨出设备;-s 115200是串口速率;-S 62345678是指定的回拨电话号码。如果没有-S参数,Mgetty就会提示输入回拨的目的电话号码。基于安全考虑,建议这里指定回拨的目的号码,否则别人用call_hxf登录,同样也可以使用回拨了。

现在可以试一试在Windows 98环境下,使用“拨号后出现终端窗口”的拨号连接。当出现终端口并提示login时,输入call_hxf。如果在login.config中没有指定回拨号码,现在就会有提示问回拨的电话号码了。输入现在使用的号码,此时服务器断开电话准备回拨,但是Windows 98会认为服务器断了,弹出一个对话框告诉用户服务器断开连接,请稍候再试。过一段时间后,电话会振铃,服务器正在回拨,但是Windows 98已经不响应了,看来Windows 98还要设置一下才能协调起来。现在还是把Linux服务器上的那个callback进程停止,不然它会一直播下去的。

(2)客户端设置

服务器准备回拨的时候要把电话先断掉。目的是让Windows 98检测不到这个变化,这样它就不会退出拨号程序了。打开所使用的拨号连接的属性的“常规”、“设置”、“连接”、“高级”、“附加设置”,将AT&C这个命令写在附加设置里。这个命令的意思就是让串口听载波检测(Carrier Detect)那根线保持有效,这样Windows 98就会认为电话一直是通的,服务器回拨时断掉电话它就检测不出来了。这样Windows 98的拨号客户程序就可以继续与服务器对话,并建立连接了。

下面的工作就是使Windows 98能接听服务器回拨的电话,并通过服务器的用户认证。建立一个脚本文件callback.scp,内容如下:

proc main
waitfor "ogin:"
transmit "call_hxf^M"
waitfor "munber for callback:"
transmit "65145678^M"
waitfor "RING"
transmit "ATA^M"
waitfor "ogin:"
transmit "^M"
waitfor "assword:"
transmit $PASSWORD
tramsmit "^M"
endproc


在所使用拨号连接的“属性”、“制作脚本”里填上文件的全路径和文件名。用户根据实际情况修改相应地方。

此脚本由一个一个的waitfor-transmit对组成,收到登录提示符“login:”,就发送callback的用户名call_hxf。如果服务器没有指定回拨的电话号码,就要在收到“number for callback:”这样的字符串后,发送自己的电话号码。当用户给了回拨号码后(或服务器已经指定),服务器就挂断电话、进行回拨。客户端Modem检测一个振铃,就向串口发送一个RING字符串,Windows 98从串口读到这个字符串,就会向Modem发出ATA命令,让它接听这个电话。之后,Mgetty向客户提示输入用户名和密码,这里的$USERID和$PASSWORD就是引用用户在拨号对话框里填入的用户名和密码。

在这个过程中,Windows 98的拨号程序一直通知用户正在验证用户名和口令。因为它不知道在做回拨,所以只好认为是在验证口令了。在整个回拨过程中,不要随便按“取消”,因为服务器端的Callback程序并不知道已取消了,它会一直拨电话。这个Callback程序的反应速度不是很快,在服务器断掉电话到听到回拨的电话铃声,可能要等20~30s。在回拨过程中,会发现在有一个被最小化的终端窗口,它就是Callback.scp脚本文件执行时的窗口。在听到回拨的电话铃声时,会在这个窗口看到“RING”,这表示Modem收到一个振铃。接着Callback.scp就会发出“ATA”接听这个电话,PPP就通了。
推荐】【 】【关闭


关于极限 | 站内地图 | 意见反馈 | 广告服务 | 数据服务 | 联系我们
本站所刊登的文章,技术资料,软件均整理于网络资源或本站原创,转载请务必联系原作者或本站。
Copyright ? 2001-2004 UPLinux.com All Rights Reserved.
本站唯一联系信箱:
京ICP备05010519