如果你连接的伺服器需要 PAP 或 CHAP 认证,你需要多一点的工作
在上面的选项文档中,加上下面几行
# # 告诉 pppd 使用你的 ISP 名称做为认证过程中的"主机名称" name <your ISP user name> # 你需要改变这一行 # # 如果你执行 PPP *伺服器* 并且需要使用 PAP 或 CHAP 认证,适当除去下面的 # 注解 不要在你做为客户端连上伺服器时使用此选项(即使它使用 PAP 或 CHAP) # 因为这是告诉伺服器必须为它自己在你的机器上提供认证(这几乎是不可能的, # 所以连结会失败) #+chap #+pap # # 如果你使用在 /etc/ppp/pap-secrets 文档中经编码的密码,除去下面一行的注解 # 注意: 这和 Windows NT 上的硬件存取服务里的微软编码密码是不同的 #+papcrypt
微软的 Windows NT 硬件存取服务(RAS)可以被设定为使用一种 CHAP(Challenge/Handshake Authentication Protocol) 的变种
在你的 PPP 源程序中,你可以找到一个叫 README.MSCHAP80
的文档讨论这件事
你可以开启 pppd 的侦错功能判断伺服器是否要求使用此认证协定 如果伺服器使用 MS CHAP 认证,你会看到这样的一行
rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap 80> <magic 0x46a3>]
关键的信息是 auth chap 80
为了使用 MS CHAP,你必须重新编译 pppd 以支持此协定
请参见 PPP 源程序中的 README.MSCHAP80
说明如何编译以使用此变种协定
你还要注意这里的程序码只是让 Linux PPP 做为客户端连接上 MS Windows NT 伺服器用的 它并不支持将 Linux 设立为让客户端使用 MSCHAP80 认证 PPP 伺服器
如果你使用 PAP 或 CHAP 认证,你必须建立这些密码文档 它们是:
/etc/ppp/pap-secrets /etc/ppp/chap-secrets
这些文档拥有者必须为 root,群组为 root,同时为了安全文档权限应为 740
关于 PAP 与 CHAP 第一点要指出的是它们是设计用来认证电脑系统而不是使用者的
"嗯? 有什么不同呢?" 我听到你在问
哦,一旦你的电脑建立与伺服器建立 PPP 连线,你系统上的任何使用者都可以使用此连线 - 不只是你而已 这也是为何你可以使用 PPP 将两个区域网路(LAN)连接起来建立一广域网路(WAN)的原因
PAP (还有 CHAP 也是)需要双向认证 - 也就是每一电脑需要一个合法的名称与密码在另一电脑上 然而,这并不是大部份提供拨接式 PAP 认证连接的 PPP 伺服器运作的方式
也就是说,你的 ISP 可能会给你一个使用者名称与密码以允许你连接到他们的系统进而连接到网际网路上 你的 ISP 对于你电脑的名称一点也不感兴趣,因此你可能必须使用你在 ISP 上的使用者名称做为你电脑的名称
这点要使用 pppd 选项的 name user name
来达成
因此,如果你使用你 ISP 给你的使用者名称,加上这一行
name your_user name_at_your_ISP
到你的 /etc/ppp/options
文档中
从技术上来说,PAP 其实应该要使用 user our_user name_at_your_ISP
这个选项,但是如果使用到 PAP 的话那么 pppd 聪明的足以把 name
解译为 user
使用 name
这个选项的好处是这对于 CHAP 也是有效的
因为 PAP/CHAP 是用来验认电脑的,在技术上你也需要指定硬件电脑的名称 然而,大部分的人只接一家 ISP 所以你可以在密码档里的硬件主机名称使用通用字元(*)
许多 ISP 有多个数据机拨接中心连接到不同的终端机伺服器 - 每个终端机伺服器都有不同的名称,但都从单一的(自动转线)号码拨接 在某些情形下可能因此而很不容易预先知道硬件电脑的名称!
/etc/ppp/pap-secrets
这个文档看起来像
# Secrets for authentication using PAP # client server secret acceptable_local_IP_addresses
这四个栏位是以空白分界而且最后一项可以是空白(如果你使用动态 IP 或由你的 ISP 所提供的静态 IP)
假定你的 ISP 给你的使用者名称是 fred
而密码是 flintstone
的话那么你应该在 /etc/ppp/options[.ttySx]
里设定 name fred
这个选项并且把你的 /etc/ppp/pap-secrets
文档设成下面这样
# Secrets for authentication using PAP # client server secret acceptable local IP addresses fred * flintstone
这是说对于 fred
这个本地机器名称(我们已经告诉过 pppd 使用这个名称,即使这不是我们本地机器的名称也一样)以及任何的伺服器,都使用 flintstone
这个密码(暗码)
注意到我们并不需要指定本地的 IP 位址,除非有要求要我们使用一个特定的,固定的 IP 位址 即使你试著用一固定的 IP,这也不大可能行得通因为对于大部份的 PPP 伺服器(为了安全的理由)不允许硬件系统自行指定 IP 号码
目前的 pppd 版本要求你要有互相验认的方法 - 这是说你必须能够让从你的机器到硬件伺服器以及从硬件伺服器到你的机器这两种验认都能进行
所以,如果你的机器是 fred
而硬件是 barney
的话,则在它们个别的 /etc/ppp/options.ttySx
里你的设为 name fred remotename barney
而硬件机器应设为 name barney remotename fred
fred 这台机器的 /etc/ppp/chap-secrets
文档看起来会像
# Secrets for authentication using CHAP # client server secret acceptable local IP addresses fred barney flintstone barney fred wilma
而 barney 的是
# Secrets for authentication using CHAP # client server secret acceptable local IP addresses barney fred flintstone fred barney wilma
特别要注意的是双方机器都必须具有双向认证的项目 这允许本地的机器向硬件机器认证它自己并且让远地机器向本地机器认证它自己
一些使用者拥有多于一部使用 PAP 的伺服器可连线 如果你的使用者名称在每部你想连接的机器上都不同,这并不是问题
然而,许多使用者在两个系统(或者甚至是全部)上具有相同的使用者名称
这在从 /etc/ppp/pap-secrets
中正确地选择适当一行时会有问题
如你所料地,PPP 提供一种机制以克服此因难 PPP 允许你使用 remotename 选项为硬件伺服器设定一个"假想名称"
假设你连接到两部 PPP 伺服器都使用名称 fred 你以此方式建立 /etc/ppp/pap-secrets
文档
fred pppserver1 barney fred pppserver2 wilma
如此,在与 pppserver1 连线时你在 pppd 选项中使用 name fred remotename pppserver1
并在连线 pppserver2 时使用 name fred remotename pppserver2
因为你可以使用在 pppd 使用 file filename
以指定 ppp 选项,你可以建立一指令稿以连接到每部 PPP 伺服器,正确地取用选项文档并且选择正确的 remotename
选项