拨号服务器设置
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公报