点对点daemon协议
名称
pppd - 点对点协定隐形程式
(Point to Point Protocol daemon)
语法
pppd [ 选项 ] [ 终端设备名称(tty_name) ] [ 速率 ]
描述
这个点对点协定 (PPP) 提供一种在点对点串列线路上传输资料流
(datagrams) 的方法。PPP 是由三个部份所组成的:一个在串列线
路上封装(encapsulating)资料流的方法, 一个可延伸的连结控制
协定(Link Control Protocol: LCP),以及一些用来建立并配置不
同网路层协定的网路控制协定(Network Control Protocols: NCP)
封装的机制(scheme)是由核心中的驱动程式码来提供。 pppd 提供
基本的 LCP ,验证(authentication)的支援, 以及一个用来建立
并配置网际网路协定 (Internat Protocol (IP) )(叫做 IP 控制
协定, IPCP)的 NCP 。
常用选项
在该名称的设备上进行通讯。 如果需要的话可以前置一个
"/dev/" 字串。如果没有给设备名称,pppd 将会使用控制
台的终端机(controlling teriminal),并且产生(fork)出
来时将不会把自己放到背景去。
将鲍率设为 。 在像是 4.4BSD 以及 NetBSA 的系
统上,可以指定任何速率。 其他系统 (e.g. SunOs) 只允
许有限的几种速率。
asyncmap
把非同步(async)字元设为对照到 。这个对照表
描述哪些控制字元不能在串列线路上成功地接收。pppd 将
会要求彼端以两个位元组的逸出序列(escape sequence)来
传送这些字元。 其参数是 32 位元的十六进位数字而每个
位元代表一个得避开(escape)的字元。位元 0 (00000001)
代表字元 0x00 ;位元 31 (80000000) 代表字元 0x1f 或
是 ^_ 。如果给了多个 asyncmap 选项, 这些数值会以逻
辑的或(OR)合在一起。如果没有给 asyncmap 选项, 将没
有非同步字元对照表会被加以协商来导引接收。 这样彼端
将会避开所有的控制字元。
auth 要求彼端在允许传送或接收网路封包之前先验证它自己。
connect
使用以所指定的可执行指令或是 shell 指令来设定
串列线路。 这个指令稿一般会使用 "chat" 程式来拨数据
机并开始远端 ppp 区段作业(session) 。
crtscts
使用硬体流量控制 (i.e. RTS/CTS) 来控制串列埠上的资
料流。
xonxoff
使用软体流量控制 (i.e. XON/XOFF) 来控制串列埠上的资
料流。这个选项在 BSD 或是 Ultrix 系统上目前并没有实
作出来。
-crtscts
这是一个 xonxoff 的同义词。
defaultroute
当 IPCP 协商完全成功时, 增加一个预设递送路径到系统
的递送表,将彼端当作闸道器使用。这个项目在 ppp 连线
中断後会移除。
disconnect
在 pppd 已经终结该连线之後执行以所指定的可执行
指令或是 shell 指令。这个指令稿可以用来,例如,如果
硬体的数据机控制信号无法使用时, 发出指令给数据机使
其挂断电话。
escape xx,yy,...
指定在传输上确实应该要避开的字元 (不管对方是否有用
它的非同步控制字元对照表要求避开它们)。 这些要被避
开的字元是以用逗号隔开的一串十六进位数字指定的。 要
注意到几乎任何字元都可以用 escape 选项指定避开, 不
像 asyncmap 选项只允许指定控制字元。 不能避开的字元
是那些有十六进位值 0x20 - 0x3f 或是 0x5e 者。
file
从档案 里读取选项(其格式叙述在後)
lock 指定 pppd 应该在此串列设备上使用 UUCP 式的锁定以确
定对该设备为互斥(exclusive)存取。
mru
把 MRU [Maximum Receive Unit 最大接收单元] 的值设为
n 来进行协商。 pppd 将会要求彼端传送不比 位元组
更长的封包。最小的 MRU 值是 128 。预设的 MRU 值则是
1500 。对於慢速线路上的建议值是 296(其中 40 个位元
组给 TCP/IP 表头 + 256 个位元组的资料)。
netmask
把该界面网路遮罩设为 ,这是一个以″十进位数值加
小数点″("decimal dot")符号表示的 32 位元网路遮罩。
(e.g. 255.255.255.0)
passive
在 LCP 中开启 "passive" 选项。加上这个选项,pppd 将
会试图初使一个连线; 如果没有从彼端接收到回应,那麽
pppd 将只会被动地等待从彼端所传来的一个有效 LCP 封
包(代替结束离开,就像它在没有这个选项时所作的)。
silent 加上这个选项, pppd 将不会传输 LCP 封包来初使一个连
线一直到从彼端接收到一个有效的 LCP 封包。(就像是给
旧版 pppd 使用的 "passive" 选项)。
选项
:
设定本地以及/或是远端界面的 IP 位址。 两者之中的任
何一个都可以省略。 该 IP 位址可以利用主机名称或者是
十进位数值加小数点符号指定 (e.g. 150.234.56.78) 。
预设的本地位址是系统的(第一个)IP 位址(除非有加上
noipdefault 选项)。 远端位址如果没有在任何选项中指
定的话将从彼端取得。 因此,在简单的案例中,这个选项
不是必须的。 如果有一个本地以及/或是远端的 IP 位址
以这个选项加以指定的话,pppd 将不会接受在 IPCP 协商
中从彼端所传来不同的值, 除非加上 ipcp-accept-local
以及/或是 ipcp-accept-remote 选项,个别地。
-all 不要求或允许任何对於 LCP 以及 IPCP 选项的协商(使用
预设值)。
-ac 关闭位址/控制的压缩协商(使用预设的, i.e. address
/control field disabled )。
-am 关闭 asyncmap 的协商(使用预设的 asyncmap ,i.e. 避
开所有的控制字元)。
-as
与 asyncmap 相同
-d 递增侦错层级(与 debug 选项相同)。
-detach
不要产生成背景程序 (否则如果有指定一个串列设备的话
pppd 将会自动成为背景程序)。
-ip 关闭 IP 位址协商 (加上这个选项的话,远端的 IP 位址
必须在指令列上或是以一个选项档中的选项加以指定)。
-mn 关避魔术数字(magic number)协商。 加上这个选项的话,
pppd 无法侦测到回授的(looped-back)线路。
-mru 关闭 MRU [Maximum Receive Unit 最大接收单元] 协商。
(使用预设的, i.e. 1500 。)
-p 与 passive 选项相同。
-pc 关闭协定栏位压缩协商。(使用预设的, i.e. protocol
field compression disable 。)
+ua
若彼端要求的话同意使用 PAP[Password Authentication
Protocol 密码验证协定] 来验证, 并使用在档案中
的使用者以及密码资料来传送给彼端。 该档案包含远端使
用者姓名,跟著一列新行,跟著远端的密码, 跟著一列新
行。这个选项是过时的。
+pap 要求彼端使用 PAP 验证它自己。
-pap 不要同意使用 PAP 进行验证。
+chap 要求彼端使用 CHAP [Cryptographic Handshake Authen-
ticate Protocol 密码化沟通验证协定] 来验证它自己。
-chap 不要同意使用 CHAP 进行验证。
-vj 关掉 Van Jacobson 式的 IP 表头压缩协商。 (使用预设
的, i.e. 无压缩。)
debug 递增侦错层级(与 -d 相同)。如果加上这个选项, pppd
将以可供阅读的格式记录所有传送或接收的控制封包内容。
这些封包透过 syslog 以 facility daemon 还有 level
debug 加以记录。该资讯可以适当设定 /etc/syslog.conf
来导向到一个档案去。(参阅 syslog.conf(5) )。(如果
pppd 以开启扩充侦错(extra debugging)编译的话, 它将
会使用 facility local2 取代 daemon 来记录讯息)。
domain
新增领域名称 到本地主机名称以支援验证。例如,如
果 gethostname() 回应 porsche 这个名称, 但是完整合
格的领域名称是 porsche.Quotron.COM 的话,你可以使用
domain 选项来将领域名称设为 Quotron.COM 。
modem 使用数据机控制线路。在 Ultrix 上, 这个选项会实作硬
体流量控制,像 crtsct 选项作的。 (这个选项没有完整
地实作出来。)
kdebug n
开启核心层级中的 PPP 驱动程式侦错码。 参数 n 是一个
由下列值所组合的数字: 1 开启一般侦错讯息,2 要求印
出所接收到的封包内容,而 4 要求印出传输的封包内容。
local 不要使用数据机控制线路。
mtu
将 MTU [Maximum Transmit Unit 最大传输单元] 的值设
为 。除非彼端经由 MRU 协商要求一个更小的值,pppd
将会要求核心网路程式码透过 PPP 网路界面所传送的资料
封包不超过 n 个位元组。
name
将本地系统的名称设为 用来进行验证。
user
将使用者名称设为 以便让使用 PAP 的彼端验证这台
机器时使用。
usehostname
强迫主机名称使用本地系统的名称来进行验证。 (这会盖
过 name 选项)。
remotename
将远端系统的假设名称设为 以进行验证。
proxyarp
以彼端的 IP 位址以及该系统的乙太网路位址增加一个项
目到系统的 ARP [Address Resolution Protocol 位址解
译协定] 表格。
login
使用系统密码资料库验证使用 PAP 的彼端。
noipdefault
关闭在没有指定本地 IP 位址时所进行的预设动作, 这是
用来由从主机名称决定(如果可能的话)决定本地 IP 位
址。加上这个选项的话, 彼端将必须在进行 IPCP 协商时
(除非在指令列或在选项档中明确地指定它) 提供本地的
IP 位址。
lcp-echo-interval
如果有给这个选项,pppd 每 秒将会送出一个 LCP 回
应要求(echo-request)封包(frame)给彼端。 在 Linux 系
统下,回应要求在 n 秒内没有从彼端接收到封包时会被送
出。 一般彼端应该以传送一个回应回覆(echo-reply)来反
应该回应要求。 这个选项可以与 lcp-echo-failure 选项
一起使用来侦测不再连线的彼端。
lcp-echo-failure
如果有给这个选项,那麽如果传送 n 个 LCP 回应要求没
有接收到有效的 LCP 回应回覆的话 pppd 将会推测彼端是
死掉的。如果发生这种情形,pppd 将会终结该连线。这个
选项的使用要求一个非零的 lcp-echo-interval 参数值。
这个选项可以用在硬体数据机控制线路无法使用的情况下
当实际连线被中断之後( e.g., 数据机已经挂断) 终结
pppd 的执行。
lcp-restart
将 LCP 重新开始的间隔(重新传输的时间限制)设为
秒钟(预设为 3 )。
lcp-max-terminate
将 LCP 终结要求(terminate-request)传输的最大数目设
为 (预设为 3 )。
lcp-max-config
将 LCP 配置要求(configure-request)传输的最大数目设
为 (预设为 10 )。
lcp-max-failure
将开始传送配置拒绝(configure-Rejects)之前的 LCP 配
置未接收(configure-NAKs)的最大数目以 取代(预设
为 10 )。
ipcp-restart
将 IPCP 重新开始的间隔(重新传输的时间限制)设为
秒钟(预设为 3 )。
ipcp-max-terminate
将 IPCP 终结要求(terminate-request)传输的最大数目设
为 (预设为 3 )。
ipcp-max-configure
将 IPCP 配置要求(configure-request)传输的最大数目设
为 (预设为 10 )。
ipcp-max-failure
将开始传送配置拒绝(configure-Rejects)之前的 IPCP 配
置未接收(configure-NAKs)的最大数目以 取代(预设
为 10 )。
pap-restart
将 PAP 重新开始的间隔(重新传输的时间限制)设为
秒钟(预设为 3 )。
pap-max-authreq
将 PAP 验证要求(authenticate-request)传输的最大数目
设为 (预设为 10 )。
chap-restart
将 CHAP 重新开始的间隔(重新传输的时间限制)设为
秒钟(预设为 3 )。
chap-max-challenge
将 CHAP 盘查(challenge)传输的最大数目设为 (预
设为 10 )。
chap-interval
如果有给这个选项,pppd 将会每 秒重新盘查彼端。
ipcp-accept-local
加上这个选项的话,pppd 将会接受彼端对於本地 IP 位址
的意见,即使本地的 IP 位址已经在某个选项中指定。
ipcp-accept-remote
加上这个选项的话,pppd 将会接受彼端对於它的 IP 位址
的意见,即使远端的 IP 位址已经在某个选项中指定。
选项档案
选项可以从档案取出使用就如同使用命令列一般。 pppd 在查看指
令列之前先从档案 /etc/ppp/options 以及 ~/.ppprc 读取选项。
一个选项档案以空白字元为界被剖析成一串单字。空白字元可以用
双引号 (") 包括在一个单字里。倒斜线引用其後的字元。 而杂凑
(#)符号开始一段注解持续到该行结束。
验证
pppd 提供系统管理人员充份的存取控制能力这表示以 PPP 存取一
台伺服机器可以提供给合法的使用者使用而不必担心危及该伺服器
或所在网路的安全性。这有一部份是以 /etc/ppp/options 档案来
提供,在这里系统管理人员可以放置在执行 pppd 的时候用来要求
验证的选项,而部份是由 PAP 以及 CHAP 暗号档案来提供, 其中
系统管理人员可以限制个别的使用者可以使用的一群 IP 位址。
pppd 预设的动作是如果有要求就同意进行验证, 并且不要求从彼
端做验证。然而如果没有可以用来验证的暗号则 pppd 将不会同意
以特殊的协定来验证它自己。
验证的基础是由暗号档案选择的暗号( /etc/ppp/pap-secrets 是
给 PAP 使用的, /etc/ppp/chap-secrets 则是给 CHAP 使用)。
这两个暗号档案都具有相同的格式,而且两者都可以储放暗号给数
种伺服器(验证彼端)及客户(被验证端)组合使用。 注意 pppd
可以最为伺服端以及客户端,而且如果需要的话两方可以使用不同
的协定。
一个暗号档案如同选项档案一般被剖析成单字。一个暗号是由最少
包含 3 个单字的一行所指定,依序是客户,伺服器,暗号。 在同
一行中任何跟在其後的单字都被当作是给客户的可接受 IP 位址列
表。如果该行只有 3 个单字, 这假设任何 IP 位址都可以;不允
许所有的 IP 位址的话,使用 "-" 。如果暗号是以 '@' 开始,其
後所接的单字将被假设为可以从中读取暗号的档案名称。而以一个
"*" 字元作为客户或伺服端的名称会符合任何名称。在选择一个暗
号时, pppd 会选择最符合的, i.e. 最少万用字元的那个。
如此一个暗号档案包含用来验证其它主机,以及用来为其它主机验
证自己两者的暗号。选择使用哪个暗号是根据该主机(’本地名称
’)以及其彼端(’远端名称’)而定。本地名称的设定如下:
如果 有给 usehostname 选项,
那麽 本地名称就是这台机器的主机名称
(附领域名称,如果有给的话)
否则 如果 有给 name 选项,
那麽 使用第一个 name 选项的参数
否则 如果 IP 位址是以一个主机名称加以指定,
那麽 使用该名称
否则 使用这台机器的主机名称(附领域名称,如果有给的话)
当使用 PAP 验证我们自己的时候,也有一个 'username' 预设为
本地名称,但是可以用 user 选项或是 +ua 选项加以设定。
远端名称的设定如下:
如果 有给 remotename 选项,
那麽使用最後一个 remotename 选项的参数
否则 如果 远端的 IP 为只是以一个主机名称加以指定,
那麽 使用那个主机名称
否则 远端名称是空字串 "" 。
从 PAP 暗号档案中选择暗号如下:
* 要验证彼端, 寻找一个在 PAP 验证要求里的暗号其客户 == 使
用者,而且伺服器 == 本地名称。
* 要为彼端验证我们自己,寻找一个暗号其客户 == 我们的使用者
名称,伺服器 == 远端名称。
当以 PAP 验证彼端时,一个 "" 暗号符合任何由彼端所提供密码。
如果密码不符合暗号,密码被以 crypt() 编码并且再次检查暗号;
因此验证彼端的暗号可以编码方式储放。如果指定有 login 选项,
使用者名称以及密码也会被以系统的密码资料库检查。因此系统管
理人员可以设定 pap-secrets 档案以便只允许某些使用者以 PPP
连线,并且限制每个使用者可以使用一些 IP 位址。
从 CHAP 暗号档案中选择暗号如下:
* 要验证彼端, 寻找一个在 CHAP - 回应讯息里的暗号其客户 ==
名称,而且伺服器 == 本地名称。
* 要为彼端验证我们自己,寻找一个暗号其客户 == 本地名称,而
且在 CHAP - 盘查讯息里伺服器 == 名称。
验证必须在 IPCP (或任何其它网路控制协定)开始之前被完全地
满足。如果验证失败, pppd 将会终结连线(关闭 LCP )。 如果
IPCP 协商出一个无法接受的远端主机 IP 位址,IPCP 将会关闭。
IP 封包只有在 IPCP 打开的时候才能传送或接收。
即使本地主机一般会要求验证,在某些案例中会希望允一些无法验
证它们自己的主机连线并使用所限制的 IP 位址其中之一。如果彼
在被要求时拒绝验证它自己, pppd 将会把它当成等於是在使用者
名称以及密码上使用空字串来以 PAP 验证。所以, 藉由增加一行
指定空字串为客户以及密码到 pap-secrets 档案去, 允许拒绝验
证自己的主机进行有限制的存取是可能的。
递送
当 IPCP 协商成功地完成时,pppd 将会通知核心该 ppp 界面本地
以及远端的 IP 位址。这足够用来建立一个主机到该连线远端的递
送路径,该路径将使两端能交换 IP 封包。与其它的机器进行通讯
往往需要更进一步地修改递送表格 (routing tables) 以及/或是
ARP (位址解译协定)表格。在某些案例中这将透过 routed 或是
gated 隐形程式的动作自动地完成,但是在大部分的案例中需要更
进一步的介入。
有时候会希望透过远端主机来增加一个预设递送路径,像是在一台
只透过 ppp 界面连线到 Internet 的机器。 此 defaultroute 选
项使得 pppd 在 IPCP 完成时建立起这麽一个预设的递送路径,并
且在该线路被终结时将之删除。
在某些情况下会希望使用 proxy ARP , 例如在一台连结到区域网
路的伺服机器上,为了能够允许其它的主机与远端主机进行通讯。
proxyarp 选项引发 pppd 去寻找一个与远端主机在相同子网路上
的网路界面(一个支援广播(boardcast)以及 ARP 的界面,不但要
是可用的并且不是一个点对点或回授界面)。如果找到, pppd 会
以该远端主机的 IP 位址以及所找到的网路界面之硬体位址建立一
个永久的,公开的 ARP 项目。
范例
在这个最简单的案例中,你可以连接两台电脑的串列埠并发出一行
指令像是:
pppd /dev/ttya 9600 passive
到每一台机器上,这假设没有在串列埠上执行 getty 程序。 如果
在一台机器上有执行 getty ,你可以在另一台机器上使用 kermit
或是 tip 来签入第一台机器并发出一行指令像是:
pppd passive
然後从通讯程式中离开(确定该连线没有断掉),然後发出一行指
令像是:
pppd /dev/ttya 9600
签入到另一台机器以及开始 pppd 的程序可以使用 connect 选项
执行 chat 来加以自动化,例如:
pppd /dev/ttya 38400 connect 'chat "" "" "login:"
"username" "Password:" "password" "% " "exec pppd
passive"'
(注意到无论如何像这样执行 chat 将使密码在 pppd 以及 chat
的参数列表中成为可见的。)
如果你的串列连线比直接以线路连接更复杂的话,你可能会需要做
些调整以便避开一些控制字元。特别是,通常避开 XON (^Q) 以及
XOFF (^S) 是有用的,可以使用 asyncmap a0000 。如果该路径包
含 telnet 的话,你可能应该也要避开 ^] (asyncmap 200a0000)。
如果该路径包含 rlogin 的话,你将需要在执行 rlogin 的客户端
上使用 escape ff 选项,因为许多 rlogin 的实作并非是透通的;
它们将会从资料流中移除 [0xff, 0xff, 0x73, 0x73, 跟随的任何
8 位元组] 这些序列。
诊断
讯息使用 facility LOG_DAEMON 送到 syslog 隐形程式。 (这个
可以藉著以所要的 facility 定义 LOG_PPP 巨集来重新编译 pppd
加以改变。)为了能够看到错误以及侦错讯息,你将需要编辑你的
/etc/syslog.conf 档案来将讯息导向到所希望的设备或档案。
debug 选项使得所有送出以及接收的控制封包内容都被记录下来,
这是指所有的 LCP, PAP, CHAP, 或是 IPCP 封包。如果 PPP 协商
没有成功的话那麽这可能会有用。如果在编译时期开启侦错功能的
话,pppd 会使用 facility LOG_LOCAL2 来取代 LOG_DAEMON ,而
且 debug 选项会使得额外的侦错讯息被记录下来。
侦错功能也可以藉著传送一个 SIGUSR1 到 pppd 程序来启动。 侦
错功能可以藉著传送一个 SIGUSR2 到 pppd 程序来关闭。
档案
/var/run/pppn.pid (BSD), /etc/ppp/pppn.pid (SunOS)
在 ppp 界面单元 n 上的 ppp 程序之 Process-ID 。
(Process-ID for pppd process on ppp interface unit
n.)
/etc/ppp/ip-up
当线路可以传送以及接收 IP 封包时(也就是 IPCP 完成
时)执行的一支程式或指令稿。它是以界面的名称、 终端
设备、速度、本地-IP-位址、远端-IP-位址为参数执行。
这支程式或是指令稿是以与 pppd 程式相同的 real 以及
effective user-ID 执行的, 也就是说,至少 effective
user-ID 而且可能该 real user-ID 将会是 root 。 这是
因为如此它可以操纵递送路径, 执行需要特权的隐形程式
(e.g. dendmail) 等等。 要小心注意 /etc/ppp/ip-up 以
及 /etc/ppp/ip-down 指令稿的内容别要危及到你系统的
安全。
/etc/ppp/ip-down
当线路不再允许传送以及接收 IP 封包时执行的一支程式
或指令稿。 这个指令稿可以用来回复 /etc/ppp/ip-up 指
令稿的影响。它以与 ip-up 指令稿相同的参数启动,并且
有相同的安全考量, 因为它以与 pppd 相同的 effective
以及 real user-IDs 执行。
/etc/ppp/pap-secrets
由 PAP 验证所使用的使用者名称、密码以及 IP 位址。
/etc/ppp/chap-secrets
由 CHAP 验证所使用的名称、暗号以及 IP 位址。
/etc/ppp/options
pppd 的系统预设选项,在使用者预设选项或指令列选项之
前读取。
~/.ppprc
使用者预设选项,在指令列选项之前读取。
/etc/ppp/options.ttyname
所要使用之串列埠的系统预设选项,在指令列之後读取。
参阅
RFC1144
Jacobson, V. Compressing TCP/IP headers for low-
speed serial links. 1990 February.
RFC1321
Rivest, R. The MD5 Message-Digest Algorithm. 1992
April.
RFC1332
McGregor, G. PPP Internet Protocol Control Proto-
col (IPCP). 1992 May.
RFC1334
Lloyd, B.; Simpson, W.A. PPP authentication proto-
cols. 1992 October.
RFC1548
Simpson, W.A. The Point-to-Point Protocol (PPP).
1993 December.
RFC1549
注意
下列信号传送到 pppd 程序时有特别的影响
SIGINT, SIGTERM
这些信号使得 pppd 终止该连线(关闭 LCP ),回存串列
串列设备的设定,并结束离开。
SIGHUP 指出实体层已经被断线。pppd 将会试图回存串列设备的设
定(这可能会在 Suns 上产生错误讯息),然後结束离开。
虫虫
数据机控制线路的使用以及数据机和 local 选项的影响没有定义
完全。
作者
Drew Perkins, Brad Clements, Karl Fox, Greg Christy, Brad
Parker (brad@fcr.com), Paul Mackerras
(paulus@cs.anu.edu.au)