BBS水木清华站∶精华区
发信人: MZY (mouse), 信区: Linux
标 题: 在RedHat Linux 5.1下配置PPP/POP拨号服务器
发信站: BBS 水木清华站 (Mon Feb 1 14:18:05 1999)
在RedHat Linux 5.1下配置PPP/POP拨号服务器
作者: Hassan Ali hassan@glcom.com
译者: MZY zdm@163.net
原文: http://www.linuxgazette.com/issue36/ali.html
译文: ftp://nihao.dlut.edu.cn/pub/Linux/ppp_setup.doc
说明: 本方法在我的机器上经过了验证, 你的环境可能有所不同
目的: 在RedHat Linux 5.1上为拨号上网用户安装PPP和POP/IMAP服务
工具: RedHat Linux 5.1 CD
假定: 你已经在PC上安装了RedHat Linux51., 其内核支持IP forwarding
步骤1: 从RedHat Linux 5.1 CD安装"mgetty"(如果没有安装的话)
1. 以root用户登录, 在光驱中插入RedHat Linux 5.1 CD, 用下面的命令将其mount成一
个目录:
# mount -t iso9660 /dev/hdb /mnt/cdrom
(假设你的光驱设备是/dev/hdb, 如果不是可做相应的改动)
2. 进入RPMS目录:
# cd /mnt/cdrom/RedHat/RPMS
3. 安装"mgetty" rpm 文件:
# rpm -Uvh mgetty*
这一步将安装mgetty和其所有的附件, 但谁会管它呢! 如果你讨厌扩展名的方式, 你
可以用"mgetty-1.1.14-2.i386.rpm" 代替"mgetty"
4. 在/etc/mgetty+sendfax/mgetty.config文件的末尾为连接modem的每个串行口添加以
下三行. 这里是一个应用于/dev/ttyS1和/dev/ttyC15的例子
# For US Robotics Sportster 28.8 with speaker off
port ttyS1
init-chat "" ATZ OK AT&F1M0E1Q0S0=0 OK
answer-chat "" ATA CONNECT \c \r
# For Practical Peripheral 14.4 with fax disabled and prolonged
# carrier wait time (90 sec)
port ttyC15
init-chat "" ATZ OK AT&F1M0E1Q0S0=0S7=90+FCLASS=0 OK
answer-chat "" ATA CONNECT \c \r
注意:
1. AT&F1为大多数的modem设置硬件流控制模式. 对于其它的modem要在init-chat行采用
适当的初始化设置.
2. 你可能奇怪我为何用ttyC15端口做例子, 因为如果你使用一块多串口卡的话, 你会有
这样一个端口. 如果你的确需要这样一块卡, 我建议你采用 Cyclades卡
5. 在/etc/mgetty+sendfax/loging.config文件中, 查找以/AutoPPP/.开头的行. 确认这
行没有被注释掉(在行开始处没有"#"符号), 并做以下的修改:
/AutoPPP/ - a_ppp /etc/ppp/ppplogin
如果你想在/var/run/utmp和/var/log/wtmp日志文件中写入用户的登录名(而不是
"a_ppp")的话, 这一行应该改成:
/AutoPPP/ - - /etc/ppp/ppplogin
6. 在/etc/inittab文件中, 查找运行 "getty"的段, 并且在此段的末尾为每个modem端口
添加类似于下面例子的一行. 下面的例子是针对ttyS1和ttyC15的:
7:2345:respawn:/sbin/mgetty -x 3 ttyS1
8:2345:respawn:/sbin/mgetty -x 3 ttyC15
(第一个数字(7,8)可以是任意的(实际上我见过其它的"s1","s2"等). 反正只是给每个
端口不同的数字即可. 为何不用连续的数字呢, 个人意见而已)
7. 将modem连接到串口上, 打开modem的开关, 用下面的命令进行初始化
# init q
注意: 如果你将mgetty赋给一个没有modem连接的端口, 或者modem没有打开, 在
/var/log/messages 和其它mgetty("/var/log/log_mg.ttyXX")日志文件中会产生大量的
错误信息. 实际上还会有错误信息不断的显示在屏幕上, 非常讨厌. 要避免这种干扰,
应在/etc/inittab和/etc/mgetty+sendfax/mgetty.config文件中将那些对应无modem连接
的行注释掉.
步骤2: 从RedHat Linux 5.1 CD安装PPP(如果没有安装的话)
1. 如果RedHat Linux CD已经正确的mount(见步骤1), 用下面的命令安装PPP:
# rpm -Uvh /mnt/cdrom/RedHat/RPMS/ppp*
2. 编辑/etc/ppp/options文件:
-detach
crtscts
netmask 255.255.255.0
asyncmap 0
modem
proxyarp
注意:
1. 用合适的子网掩码, 不一定必须是255.255.255.0, 实际上我用的是
255.255.255.224
2. 阅读pppd帮助理解以上参数的意义.
3. 编辑/etc/ppp/ppplogin文件(如果不存在就创建它)
mesg n
tty -echo
/usr/sbin/pppd silent auth -chap +pap login
使ppplogin成为可执行的文件
# chmod +x /etc/ppp/ppplogin
注意: 我们将使用PAP口令验证而不是用以前的/etc/passwd口令文件. 这是参数
"+pap login"的含义.
4. 对于每个连接modem的端口, 创建一个相应的/etc/ppp/options.ttyXX文件, 这里"XX"
代替每个端口名, "S1"代表ttyS1端口, "S2"代表ttyS2端口, "C15"代表ttyC15端口. 在
这些文件中加入下面的一行:
myhost:ppp01
这里"myhost"是PPP服务器的域名, 把它改成你Linux服务器的真实域名. 如果你忘记了,
你可以用"hostname"命令来查询:
# hostname
"ppp01"是任意选取的虚拟域名, 是和/etc/hosts文件中的PPP拨号上网的主机IP地址
对应的(后面将说明). 在另一个/etc/ppp/options.ttyXX文件中, 你可以这样写 :
myhost:ppp02
这里你定义了另外一个PPP域名"ppp02". 对每一个串口要定义一个不同的域名. 你可以选
择任何喜欢的名字. 不一定必须是ppp01, ppp02,ppp03. 你可以用'junkie", "newbie",
"noname" 等等.
5. 编辑/etc/ppp/pap-secrets文件并且为每个为拨号用户动态分配的IP地址添加如下的
一行. 当然假定你有足够的IP地址空间分配给你的拨号上网的用户:
# Secrets for authentication using PAP
# client server secret IP addresses
* * "" 10.0.0.3
* * "" 10.0.0.4
这表明: 对于有如上IP地址的从任何地方登录的任何用户不使用PAP口令加密. 这是说
如果我们用/etc/passwd的话就不需要用PAP口令加密. 如果你真的不太固执的话, 你甚至
可以为任何IP地址的用户提供服务.
# Secrets for authentication using PAP
# client server secret IP addresses
* * "" *
6. 用以下命令, 确信/usr/sbin/pppd成为Setuid命令:
# chmod u+s /usr/sbin/pppd
7. 编辑/etc/hosts文件定义IP地址给所有在步骤2.4中定义的PPP域名. 用步骤2.5中的IP
地址空间:
10.0.0.3 ppp01 ppp01.mydomain.com
10.0.0.4 ppp02 ppp02.mydomain.com
注意: 用你的真实域名替换"mydomain.com". 这里我假设你的域名是myhost.mydomain.
com.
步骤3: 从RedHat Linux 5.1 CD安装POP/IMAP(如果没有安装的话)
1. 如果RedHat Linux CD已经正确的mount(见步骤1), 用下面的命令安装POP和IMAP:
# rpm -Uvh /mnt/cdrom/RedHat/RPMS/imap*
2. 察看/etc/inetd.conf文件中"pop-2","pop-3",和"imap"服务是否已经去掉了注释. 如
果没有将其注释去掉(删掉行前的"#"). 如果你只希望提供pop3服务, 你可以只去掉
"pop-3"的注释行, 如果pop2和pop3文件不在"imap"的RPM文件中, 看看是否有"ipop*"的
RPM文件.
3. 用下面的命令激活新的服务:
# kill -HUP `cat /var/run/inetd.pid`
步骤4: 加入IP forwarding
1. 如果你使用的是RedHat5.1自带的核心, 应该已经支持IP forwarding. 如果你使用的
是自己编译的核心. 在编译时应打开"IP: forwarding/gatewaying"选项. 据RFC文档,
启动时缺省时没有激活IP forwarding的. 在/etc/sysconfig/network文件中添加如下一
行来激活IP forwarding:
FORWARD_IPV4=yes
2. 用下面的命令激活 IP forwarding或重启动:
# echo "1" > /proc/net/ip_forward
步骤5: 测试服务器
1. 首先创建用户(如果没有的话). 你可以给它"/home/username"作为用户目录, 如果你
希望用户同时具有PPP和shell登录的权限的话, 可以用"/bin/bash"作为用户的登录
shell.. 如果只希望用户有PPP权限, 则要用"/etc/ppp/ppplogin"作为用户的登录程序.
典型的/etc/passwd文件如下:
jodoe:tdgsHjBn/hkg.:509:509:John Doe:/home/jodoe:/bin/bash
jadoe:t8j/MonJd9kxy:510:510:Jane Doe:/home/jadoe:/etc/ppp/ppplogin
在这个例子中, John Doe同时具有PPP和shell登录的权限, 而Jane Doe则只有PPP的权
限. 如果你奇怪John Doe为何具有PPP权限, 答案在"mgetty"的configure文件中的
/AutoPPP/设置, 它保证了任何用户如果以PPP方式拨号进来, mgettty会自动执行
/etc/ppp/ppplogin程序.
如果John Doe用已经配置好的用来进行PPP连接的Windows95拨号适配器进行拨号, mgetty
会给John Doe以PPP权限. 如果他用任何其它的类似于Hyper Terminal(没有PPP协商功能)
来拨号的话, 他将会获得登录shell. 而Jane Doe则不同, 她在任何情况下只能获得PPP权
限.
实际上, "mgetty" 允许你用同一个modem实现不同的协议. 例如, 你的UUCP客户(如果你
有的话) 可以用同一个modem作为PPP客户! 当然, 你必须要给你的UUCP客户
"/var/spool/uucppublic"作为用户目录以及"/usr/sbin/uucico"作为登录程序.
2. 假设你有一个已经设置好的web服务器(Apache)(设置Apache是非常简单的事情), 在一
个用modem连接的远程PC上运行Web浏览器和POP客户(如Eudora). 如果你用的是
Windows95/98 PC, 设置你的拨号适配器的网关为拨号服务器的IP地址, 设置正确的DNS地
址, 设置远程自动配置IP.
在POP客户程序中设置SMTP和POP的服务器地址.
现在拨入服务器等待连接, 测试Web浏览器和POP邮件的收发. 如果不工作, 那一定是什么
地方设置错误啦 :-)
参考文献:
1. PPP-HOWTO
2. NET-3-HOWTO
3. "Using Linux", Bill Ball, published by Que (around US$30 - highly
recommended)
4. mgetty document
Copyright ? 1999, Hassan O. Ali
Published in Issue 36 of Linux Gazette, January 1999
--
※ 修改:·MZY 於 Feb 1 14:23:36 修改本文·[FROM: 202.118.68.69]
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.118.68.69]
BBS水木清华站∶精华区