当前位置:Linux教程 - Linux - 拨号服务器设置

拨号服务器设置



         By Josh Gentry翻译:李涛



    摘要

    本文是教你如何去建立一个基于电话线路使用SLIP和PPP的拨号服务器.

    本文著作权归作者(Josh Gentry)所有.作者鼓励散发本文,包括商业或非商业用途.但希望通知作者.请不要修改本文,但并不计较当你在讲述时所作的改动.

    本文的大多数内容来源于下列LDP HOWTOs文档:

    Linux Serial HOWTO
    Linux Modem HOWTO
    Linux Kernel HOWTO
    Linux PPP HOWTO
    在Gert Doering的有关mgetty+sendfax的随机文档也包含大量信息.此外,当你在mgetty中配置AutoPPP时,下面两篇文章也极有帮助:
    http://member.bellatlantic.net/~mrdennis/mgetty.htm,, Mick Dennis
    http://oh3tr.ele.tut.fi/~oh3fg/ppp/ppps.html,Kalevi Hautaniemi
    从下面文章中你可以了解到有关PAP方面的知识:
    Olaf Kirch\s Linux Network Adminstrators\ Guide
    S.u.S.E. Support Data Base http://wi-pc44.fh-konstanz.de/support-db/sdb_e/kfr_17.html
    本文中的大部分内容来源于为Mr. James Hart建立一个RedHat5.1的拨入服务器.他工作于Technical/Vocational Institute in Albuquerque, NM. Tony Lucero则是我的另一个工作伙伴.他们的帮助和指导对我都是有着很大意义的.
    最后,我要特别感谢那些编写了Linux内核及应用程序的人们,本文是我对他们努力的一点小贡献.

    声明:本文不包含任何显现的或是隐含的保证,同时也不对本文的准确性负责.作者希望本文有些帮助,但你必须意识到其中的风险.作者不对使用本文而造成的损失负责.

    1.导论

    通常一个提供拨入服务的主机都配有一个Modem并连有电话线,允许其他有同样配置的计算机通过电话线联接.这样做的理由是:使用提供拨入服务的主机上的资源;如果那台主机在一个网络上,则我们可以通过它而访问网络;进一步的,如果那台机器连入了Internet,则它就成为了进入Internet的端口.

    LDP HOWTO中包含了大部分有关设置一个拨入服务器的内容.但当我参照那个文档去做时,却发现它并不完善.本文则循序渐进的阐述建立一个DailIn Server 必要过程.

    建立一个拨入服务器是一件普通的事但并不简单.本文试图清晰的阐述这一过程.但你也要参考其他资料,最主要的是LDP HOWTOs,但不要忽视getty和PPP的相关文档.

    通过电话线连结两台主机的协议是一种对等协议;并不区分谁是主叫或被叫.但从概念上以”客户服务器”模式理解会容易些.”你的主机拨叫另一台主机并建立PPP联接,则您是客户,对方是服务器”(Linux PPP HOWTO, Hart).余下我们仍将使用这一模型来讨论.

    2.安装调制解调器

    作为一个拨入服务器,你至少得有一个调制解调器和与它相连的电话线.由于调制解调器是串行设备,所以你需要阅读Linux Serial HOWTO和Linux Modem HOWTO.

    Linux并不能很好的支持即插即用(Plug-and-Play)型的调制解调器,所以你可能需要一个可用跳线设置的或外置调制解调器.

    串口像所有设备一样都有一个地址.通常Linux初始化四个串行设备.这很像常称的COM 1-4.Linux中把它们定义为ttys0-ttys3.记住,如果你使用了不是这四个串口,你必须用\"setserial\"来初始化它.外置调制解调器会插在PC机上的RS232口上,它会被Linux自动分配地址的.内置调制解调器则插在内部的PCI或ISA槽中.一个内置调制解调器就是串口加调制解调器,你得自行设置它们的地址和中断.因为PC机已经占有两个串口,你的内置调制解调器则被推荐用ttys2或更高.

    3.内核的支持

    这部分并不像大多数新手想象的那样困难.如果你做错了,通常只需重新编译内核而已.参考Linux Kernel HOWTO.

    其实我们并不一定要把PPP模块编译进内核.你可以当作一个可加载的模块安装它,这样可使内核更小些.但把它放到内核中可使系统执行快一些.当然你也可以按照下述方式把可加载模块编译进内核.但如果你安装了\"insmod\"命令,就不需要重新编译内核了.使用命令\"insmod ppp\"就可加载PPP的驱动.但我发现你必须先执行\"insmod slhc\",才能成功安装PPP\"insmod ppp\".我不知道为何PPP模块依赖于slhc模块.命令\"lsmod\"可以列出所有已安装的模块;同样你也可以用命令卸载模块.

    内核是一个可执行二进制文件.开发人员并不直接写可执行代码,他们写出源代码而后由编译器来产生可执行代码.对Linux来说,你是拥有源代码的,这样你可以重新调整你的内核,使它干净而有效.基于此,你必须意识到你的内核不一定会包含你所需要的,所以你必须作一些检查.必要时,你就得考虑重新编译内核.

    为了编译内核,你必须建立一个配置文件.你也可以检查你现有的配置文件,看是否都包含了你所需要的东西.大多数拨入服务器都是基于局域网的.假定你的机器已经设置上局域网.如果没有,你必须参考有关资料安装.

    我喜欢用XConfig,使用图形界面要容易些.但必须安装XWindows和Tk.XConfig下你可以在\"Networks device\"中寻找SLIP和PPP的选项,这将用于拨入服务器的设置.如果连有局域网的话,内核必须支持IP forwarding,你可以查看\"Network options\".可参考Linux Kernel HOWTO,以下是基本步骤:

    作一份现有内核的拷贝.
    cd /usr/src/linux-(kernel version number)
    命令\"make config\",XWindow下可用命令\"make xconfig\"
    对所有有关网络的选项都回答\"yes\":SLIP, PPP, IP forwarding, etc.
    存盘退出.
    make dep
    make clean
    make zImage
    cd /usr/src/linux-(kernel version number)
    cp zImage /vmlinuz
    lilo
    Linux kernel HOWTO告诉你可以用命令\"make zlilo\",这样可以自动拷贝并安装内核.
    4.终端设备 gettys

    你需要一个getty去处理调制解调器的通信.通常从inittab启动,并作为一个后台运行,知道有呼叫进入.它会和呼叫方进行Modem间的握手并建立连接.有好多个gettys可以作这件事.我们选用mgetty.你可以得到modem-sendfax包,这也包含在RedHat5.1中 /etc/mgetty+sendfax.但你需注意,对不同的Linux套件及不同的机器,\"sbin/mgetty\"的路径并不一定适用,你需要检查一下你自己的机器设置.

    对它的设置最重要的在:\"/etc/megtty+sendfax/mgetty.config.我们可以使用缺省的设置,修改它你可参考有关文档.如果你希望使用AutoPPP,得编辑 \"/etc/mgetty+sendfax/login.config\".更细节的部分我们将在后面讨论.

    编辑/etc/inittab来启动mgetty.linux Serial和Modem HOWTO对此很有帮助.你必须告诉mgetty哪个口需要监视.这些口通常命名为ttys*(0-3).例如:

    S2:2345:respawn:/sbin/mgetty ttyS2 -D /dev/ttyS2

    选项\"-D\"告诉mgetty仅处理数据,不包括传真.再这之后,我们需要用命令\"kill -1 l\"来强迫initd重读inittab,mgetty将会启动.但如果你使用了一个多串口板,口的名字将不同于标准口.Mick Dennis建议为/dev/ttyC*.缺省设置下,mgetty使用SLIP建立连接,并通过/etc/passwd来验证.这可使用户进入Shell.需要的话,我们也可以让用户在登录完后启动PPP协议而不是SLIP.步骤如下:

    让所有用户都有权利执行pppd. chmod u+s /usr/sbin/pppd
    把这一行加到/etc/bashrc. alias ppp = \"exec /usr/sbin/ppd -detach\"
    我们也可以用另外一种方法,建立一个PPP账号,修改/etc/passwd如下:
    ppp:x:351:230:pppclient:.home/ppp:/usr/sbin/pppd

    这样用户一旦以ppp账号登录,就自动启动pppd.

    对WIndows客户来说,他们需要在联接完启动终端窗口,但这并不是缺省设置,按如下方法设置:

    进入My Computer
    进入Dial-Up Network
    在connection图标上击鼠标右健
    进入Properties
    进入Configure
    进入Options
    选中\"Bring up terminal window after dialing\"
    大多数Windows用户不习惯联接之后的登录窗口.你可以启用AutoPPP来去掉这一步.这需要你重新编译mgetty.(很多人告诉我RedHat5.2缺省情况下就是AutoPPP).编译前你得设置makefile文件:
    约在110行:CFLAG=-02 -Wall -pipe -DAUTO_PPP

    编译mgetty.然后你得编辑\"/etc/mgetty_sendfax/login.config\"文件:

    约在50行: /AutoPPP/- -/usr/sbin/pppd file /etc/ppp/options.server

    这样一旦收到LCP设置请求,mgetty会自动启动pppd(对于LCP你可参考pppd man page).file选项告诉pppd使用\"/etc/ppp/options.server\"而不是缺省的\"/etc/ppp/options\".我们使用特别选项文件可明确主机是作为Server或Client.假定你已设置好\"/etc/mgetty+sendfax/mgetty.config\",但不要忘记重新启动以使新选项生效.

    如果你希望使用被mgetty监视的Modem拨号,你必须注意你所用的应用程序所使用的设备.参考 http://www.leo.org/~doering/mgetty_10.html#SEC10

    5.PPP

    PPP使最广泛使用的基于电话线的通信协议.

    可按照ppp随机文档编译pppd.但如果你使用了shadow password的话,得加入如下命令行:

    make HAS_SHADOW=1

    使用MS-DNS选项来兼容WIndows,

    make USE_MS_DNS=1 HAS_SHADOW=1

    参考 http://ph3tr.ele.tut.fi/~oh3fg/ppp/ppps.html

    配置pppd:

    这是通过编辑被pppd读取的配置文件来实现的.记住mgetty启动时传入的是/etc/ppp/options.server.在pppd man page中有最全的选项列表.如果你不配置PAP或CHAP,则配置文件如下:

    -detach - 不成为后台进程
    asyncmap 0 - 允许pppd可作为一个telnet或rlogin工作
    modem - 使用Modem信号控制线
    srtscts - 使用硬件流量控制
    lock - 确定pppd在串行设备使用UUCP类型的加锁方式
    proxyarp - 把IP加入到ARP表中
    ms-dns aa.bb.cc.dd 将被Windows客户使用的DNS地址.但我并没有发现对应的非Windows客户选项
    ms-dns ee.ff.gg.hh
    配置pppd+PAP(Password Authentication Protocol):
    PAP是最常用的两种验证协议之一,另一个是CHAP(Challenge Handshake Authentication Protocol),它是更严格的安全协议,但不如PAP那样被广泛支持.本文阐述PAP的使用.对于PAP和CHAP可参考Olaf Kirch\s Linux Network Administrator\s Guide. 既然PPP是对等协议,所以PAP允许双向验证.这意味着\"Server\"可验证\"Client\",反之亦然.对于增加PAP是很简单的事,就在我们上面的配置文件/etc/ppp/options.server加两行:

    require-pap
    refuse-chap
    这样pppd就会参照文件\"/etc/ppp/pap-serects\"来检查用户的登录名和密码,只有在该文件中设有账号的才可登录:
    #user server secret adddrs
    jode * password *
    使用/etc/password的PAP:
    如果你不想创建/etc/ppp/pap-secrets作为PPP的帐号文件,你也可以指定使用/etc/password.只要加一项\"login\"到/etc/ppp/options.server中即可.如下:

    -detach
    asyncmap 0
    modem
    srtscts
    lock
    require-pap
    refuse-chap
    login
    proxyarp
    ms-dns aa.bb.cc.dd
    ms-dns ee.ff.gg.hh
    如果\"login\"被使用,/etc/ppp/pap-secrets就不须存在了.实际上,它可能会对PAP造成影响,你可以删掉这个文件也可以让它包含如下行:
    * * \" \"

    保留/etc/ppp/pap-secrets的好处在于你可以限制那些在/etc/passwd中间有账号的人使用PPP登录.这可以在上面一行下加入:

    username * - *

    例如:

    #user server secret adddrs
    * * \"\" *
    jdoe * - *
    分配IP地址
    为了PPP工作,Client就必须有IP地址.但大多数拨入的Client并没有自己的IP地址,这就需要给它们分配一个IP给连接在串口上的Client.先前我们定义了一个配置文件/etc/ppp/options.server来设置PPP的连结选项.同样我们也可定义一个文件来约束在串口上的连结,对ttyS2,建立文件/etc/ppp/options.ttyS2.在这个文件可用的选项之一就是分配IP地址,格式如下:

    ii.jj.kk.ll:mm.nn.oo.pp

    第一IP是分给Server的;第二个是给连结在串口上Client.你必须确定给Client的地址没有被分配各其他主机.

    全文完.

     

     

    Feed back on this document is appreciated: email [email protected]

    发布人:netbull 来自:Linux公报