轻松建立Linux拨号服务

Author: 刘威 Date: 2001年 13期

    PPP(Point to Point Protocol)协议,即点对点协议,是标准的Internet协议。我们可以利用PPP拨号连接到Internet,也可通过建立拨号服务器,提供PPP拨入服务。例如,有些机构有多个外地部门,在本地已连通Internet,而外地部门有拨号到中心机房连上Internet的需求,则要求中心机房有一台拨号服务器能提供PPP接入服务,如用目前比较流行的Linux操作系统来做,则显得轻松有余。本文以RedHat Linux 7为基础,详细讨论如何安装配置PPP拨号服务器。
  #1    一、软件及网络环境
      RedHat 7、内核2.2.16-22、pppd-2.3.11、局域网、Linux 服务器IP设为202.194.177.9,服务器名称为jsred,分配给拨号用户的固定IP为202.194.177.66,主机名为admin。
  #1    二、服务器端的安装
      (1)安装pppd
      在Linux服务器上查看有没有安装pppd,缺省安装是在/usr/sbin/子目录下。如果存在,再查看系统内核有没有提供对PPP的模块支持,如没有,可以到/usr/src/liunx子目录,用make menuconfig或make config,对内核进行配置。在PPP支持选项上,选上模块标志。然后重新编译内核,用如下命令:
      make dep; make clean;make zlilo;rdev -R /vmlinuz
      (2)安装调制解调器
      在物理线路正确连接后打开Modem的电源,运行minicom来测试Modem是否已经正确安装。输入minicom -s命令设置Modem相关参数,首先查看缺省串口,缺省为 /dev/modem。根据你所用的串行口将其改为/dev/ttyS0或/dev/ttyS1,其次设置通信速率。如果minicom与Modem连接成功,进入会话状态,输入ATS0=1,如果紧接着在下一行出现OK,且Modem的AA灯亮起,Modem进入自动应答状态。表明minicom与Modem通讯正常,Modem可以正常工作了;否则修改串口设置,重复上述步骤。也可用当地的ISP电话号码进行拨号连接,检查能否正确连接,保证Modem正确安装。
      如果Modem能接通,网卡不能工作或网卡能工作而Modem接不通,则要查看是否由于Moem与网卡或其它设备中断冲突引起的。一般检测串行口所占用的中断号。输入:
      # cat /proc/interrupts命令查看当前串口占用的中断号,例:
      0: 8889830 timer
      1: 11557 keyboard
      4: 1940 serial
      可以看到当前串口占用的中断是4。也可以用setserial命令来给串口设置地址和中断号(IRQ),例如:# /sbin/setserial/dev/ttys0 irq 4赋给COM1中断值为4。或:#/sbin/setserial/dev/ttys0 auto_irq 赋给串口任意一个空闲中断号。
      (3)创建登录终端
      在Unix中,将设备看成是一个特殊文件来进行访问控制。通过特殊文件可以访问特定的设备,Linux也不例外。Linux的标准虚拟终端有mingetty、agetty等,本文介绍用mgetty 作为PPP客户登录进来的虚终端,你可以通过网上搜索得到该软件,RedHat 7自带RPM包mgetty-1.1.22-1.i386.rpm,安装命令为:rpm -ivh mgetty-1.1.22-1.i386.rpm ,安装完成后在/sbin子目录下有二进制文件mgetty。然后进到/etc子目录,在inittab文件之后加上一句:
      s1:1235?焤espawn:/sbin/mgetty -D -s 38400 ttyS0
      保存,用init q命令重启进程。用ps -aux命令可看到类似于:
      219 ? S 0:00/sbin/mgetty -D -s 38400 ttyS0
      表明该终端已准备好,可以接受用户的拨入请求了。
      (4)创建或修改PPP相关配置文件
      基于对拨号安全性的考虑,pppd默认要求进行主客户机的身份自验证,即对等验证。除非使用root用户账号拨号或服务器没有连上Internet,因此为了使pppd能正常工作,需要在服务器端设置相应的主客户机验证信息。
      ①编辑/etc/ppp/options文件,在其中加入:
      -detach
      crtscts
      netmask 255.255.255.0
      asyncmap 0
      proxyarp
      其中,asyncmap表示:在对远程机进行串行联接时,连接可能将ASCII控制码(0-31)用于特殊的用途,所以,这些代码不能作为数据包的一部分进行传送,这就要告诉pppd,不要直接用这些控制码。而用特殊的两字符的转义序列来代替它们。asyncmap 0表示不需要对任何控制码进行转义处理。
      基于TCP/IP协议的以太网,并不直接利用IP地址,而是利用网卡MAC地址来传送数据包。Proxyarp告诉它在远程主机的Arp表中增加一项,列出本地机的地址和远程机的网卡MAC地址。Netmask可以根据具体子网划分,修改为相应的子网掩码值。
      ②创建/etc/ppp/options.ttyS0或/etc/ppp/options.ttyS1文件,对相应端口进行设置,在该文件中加入一行:jsred:admin或202.194.177.9:202.194.177.66。在/etc/hosts文件中为拨入进来的客户机登记一项:202.194.177.66 admin。
      ③编辑/etc/ppp/pap-secrets文件,由于拨号采用PAP验证时,需在该文件中设置相应主客户机信息及PAP验证密码。在该文件中设置如下:
      admin jsred “” 202.194.177.66
      第一项为客户机名称或IP,第二项为拨号服务器名称或IP,第三项为PAP密码,由于我们使用标准的password文件来进行身份验证,因而将这里的密码置空,第四项为动态分配给客户机的IP地址。
      (5)建立pcguest拨号用户账号,创建登录Shell
      用户通过电话拨号进来,以什么样的身份和权限进入网络呢?这就要为拨入用户建立相应的账号和登录Shell。如:# adduser pcguest
      在选择其Shell时,不要选/bin/bash,而是填入/etc/ppp/ppplogin,ppplogin为拨入用户的登录Shell文件,相当于Novell网用户的登录脚本。它为拨号用户初始化登录环境。
      脚本如下:#!/bin/sh
      /usr/sbin/pppd auth -chap +pap login 202.194.177.9:202.194.177.66
      第一行表示脚本的其余部分用/bin/sh去解释该脚本。第二行的“+pap login”表示客户端和服务器端采用PAP的验证方式但使用/etc/password文件的内容。用“:”分隔的两项(IP地址)列出PPP拨号服务器和分配给客户机的IP地址。
      将该文件置为可执行模式:chmod 755 ppplogin;pppd默认只能由root用户执行,为了使普通用户能够执行pppd,需要运行命令:#chmod u+s /usr/sbin/pppd。
      最后别忘了在/etc/shells文件中加进一句话:/etc/ppp/ppplogin然后存盘退出。
      (6)启用Linux的IP转发功能,为客户机通过拨号服务器上Internet铺平道路
      RedHat 7默认是屏蔽IP转发的功能,为启用IP转发功能,修改文件/etc/sysctl.conf将 net.ipv4.ip_forward = 0 改为net.ipv4.ip_forward=1 ,保存退出。重启Linux服务器,服务器端设置工作完成。
  #1    三、客户端的安装
      在Windows 98客户机上,安装拨号网络,新建一连接项,选中该连接项,单击鼠标右键弹出菜单,单击“属性”,打开“服务器”标签的“TCP/IP配置”对话窗口,在“指定IP地址”栏,填入拨号服务器分配给远端客户的IP地址,如202.194.177.66,在“主控名称服务器地址”栏中输入Internet上有效的DNS服务器的IP地址,如果该Linux服务器能提供DNS服务,也可填入Linux服务器的IP地址,保存退出。双击连接项,进入拨号状态,当终端窗口中出现登录提示,输入pcguest用户名及相应密码,再点击“继续”按钮,则一个稳定、快速的PPP连接就建立了。