Linux HowTo: PPP

版权

作者保留这份文件的版权。允许藉由电子形式以及光碟散布这份文件,但必须完全依照其原始的格式。同时也允许列印这份文件的拷贝供个人使用。
The copyright of this document is retained by the author.  Permission  is granted to distribute the document by electronic means and  on CDs  provided that it is kept entirely in its original format. Permission  is also granted to print a copy of this document for personal use.

没有版权所有者的允许禁止藉由任何不同於上述形式的方式重新发行这份文件的部份或全部内容。
The republishing of this document in part or in whole without the  permission of the copyright holder by any means other than as noted  above is prohibited.

发布

一旦这份文件有新的版本产生就会贴到 comp.os.linux.answer 讨论群。也可以在此取得 HTML 格式的文件:
  。http://sunsite.unc.edu/mdw/linux.html#howto
  其它格式(SGML, ASCII, postscript, DVI)的文件可以从这里取得:
  ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats
  因为 sunsite.unc.edu  的负载非常地重,请使用最靠近你的适当映射  (mirror)节点。

1.  简介
PPP (点对点协定)是在串列连结上跑 IP (网际网路协定)以及其它网路协定的一种机制,串列连结可以是直接的串列连接(使用无数据机缆线)或是使用数据机以及电话线路所造出的连结。使用PPP, 你可以把你的 Linux PC 连接到一台 PPP  伺服器上并存取该伺服器所连接的网路资源(几乎)就如同你是直接连接在该网路上一般。

你也可以把你的 Linux PC 设为一台 PPP  伺服器,这样一来其它电脑就可以拨入你的电脑并且存取在你区域网路里的资源。

因为 PPP  是一种点对点 (peer-to-peer) 的系统,因此你也可以使用两台 Linux PC 上的 PPP  把网路连结在一起(或是把区域网路连结到网际网路上)。

最主要的差异当然是速度 - 标准的乙太网路连线是以 10 Mbps(每秒百万位元)这个理论上的最大贯通量在动作,而在数据机这方面最大是以 33.6 kbps(每秒千位元)的速度在动作。同时,依据 PPP  连线的型态,某些应用以及服务在使用上可能会有些限制。

1.1.  客户端以及伺服端
PPP 是一种完完全全是点对点的协定;拨接的机器以及接受拨接的机器之间(在技术上)并没有差异。然而,为了清楚明白的缘故,以伺服端与客户端的方式来思考是很有用的。

当你拨入一个节点要建立 PPP  连线时,你是客户端。你所连线的那台机器是伺服端。

当你在设定一台 Linux box  使其接收并处里拨入的 PPP  连线时,你正在设立一台 PPP  伺服器。

任何 Linux PC 都可以是 PPP  伺服端以及客户端 - 甚至於如果你有一个以上的串列埠(以及数据机,如果有必要)的话还可以同时扮演这两种角色。如同前面所说的,就 PPP  而言,一旦连线建立那麽客户端与伺服端之间并不真的有什麽差异。

为了清楚明白的关系,这份文件把启始呼叫(即”拨入”)的那台机器称作客户端,而把回应电话,核对拨入请求之验认(利用使用者代号,密码以及其它可能的机制)的那台机器称作伺服端。

使用 PPP  做为客户端把某个地方的一台或多台机器连结到网际网路上是有可能的,大多数人都有这个兴趣。在这份文件中所描述的程序将会让你能够建立并自动化你的网际网路连线。

这份文件也将在把你的 Linux PC 设为 PPP  伺服器以及使用 PPP  来连结两个区域网路(有完整的递送设定)这些方面给你指引(这常常被称作建立广域网路连结)。

2.  IP  号码
每一个连上网际网路的设备都必须拥有它们自己的,唯一的 IP 号码。这些是由每个国家的有关单位集中指定的。

请注意在这整份文件里所使用的 IP 号码(有一些个例外)都是从保留给没有(不曾)连上网际网路的网路所使用的‘未连线网路号码’系列来的。

如果你要把区域网路连上网际网路,在你的区域网路里你所拥有的所有电脑及设备都必须使用从指定给你的网路范围里分配的 IP 号码。即使连接另一个区域网路(在网际网路之外)你也绝不能凭空取用 IP 号码因为这将会引起全体性的大破坏。

有一些特别留给不连接网际网路的网路使用的 IP 号码。这些 IP 号码依序是:

  。1 个 A-等级 的位址
     10.0.0.0 - 10.255.255.255

  。16 个 B-等级 的位址
     172.16.0.0 - 172.31.255.255

  。256 个 C-等级 的位址
     192.168.0.0 - 192.168.255.255

如果你的网路还没从你国家的权责单位分配到 IP 号码,那麽你的机器应该使用前面所列这些网路号码中的一个。

这些号码永远不该使用在网际网路上。

不过,使用 Linux  以及 ipfwadm  软体的 IP 伪装能力,你就可以把你的区域网路连上网际网路(提供的服务会有些限制)。

对於大部分的使用者,经由 PPP  连接单一机器到网际网路服务提供者(Internet Service Providers: ISP) ,取得一个 IP 号码(或更正确的说,一个网路号码)的使用者是没有这个必要的。

如果你希望连接一个小型的区域网路到网际网路上,许多网际网路服务提供者可以从他们已有的 IP 位址空间中提供给你一个次网路(特定的一段 IP 号码)。

对於经由 ISP  连接单一 PC 到网际网路上的使用者,大部分的提供者使用动态的 IP 指定。这是说,连线程序的一部份中,你所联系的 PPP  服务将会告诉你的机器在现下这次连线的期间里该 PPP  界面应该使用  什麽 IP 号码。

使用动态的 IP 号码,你每次的连线不会都取得相同的 IP 号码。这对在你 Linux  机器上的伺服型态应用程式像是 sendmail, ftpd, httpd  以及诸如此类的软体而言会产生问题。由於动态的 IP 号码指定而有所限制的服务(以及避免的方法,可能的话)稍後会在这份文件中讨论。

3.  这份文件的企图达成的目的
3.1.  设立 PPP  客户端
这份文件提供想要使用 Linux  以及 PPP  拨接到某一台 PPP  伺服器并且使用 PPP  设立 IP 连线的人们一些指引。文件中假设 PPP  已经编译好并且安装在你的 Linux  机器上(但简短地涵盖重新配置/重新编译你的核心以便包含 PPP  支援的部份)。

3.1.1.  使用 DIP -  不,使用 CHAT 取代之

虽然 DIP(建立 SLIP 连线的标准方式)可以用来创造 PPP  连线,但DIP 指令稿一般都相当地复杂。因为这个缘故,这份文件并不涵盖使用DIP 来创造 PPP  连线的部份。

取而代之的是,这份文件描述标准的 Linux PPP  软体(chat/pppd) 。

3.2.  设立 PPP  伺服器

这份文件提供如何配置你的 Linux PC 做为 PPP  伺服器的指引(允许其他人拨接到你的 Linux PC 并且建立 PPP  连线)。

你应该注意的是设定 Linux  作为 PPP  伺服器的方法有无数种。这份文件(目前)给你一种方式 - 作者用来它设立一台小型 PPP  伺服器(共有 16 台数据机)。

这个方式已知运作良好。不过,它不一定是最好的方式。如果其他使用者有特别聪明的 PPP  伺服器设定,请别在意把它们寄给这份使用说明的作者。

3.3.  使用 PPP  连结两个区域网路或连结一个区域网路到网际网路上
这份文件提供关於连结两个区域网路或连结一个区域网路到网际网路上的(基本)资讯。

3.4.  这份文件目前尚未涵盖的...

  。连接以及配置数据机到 Linux  上(细节)
    参阅 Serial-HOWTO

  。使用 DIP  创造 PPP  连线
    使用 chat 取代...

  。使用 socks  或是 IP Masquerade
    已经有涵盖这两个套件的绝佳文件。

4.  涵盖的软体版本
这份使用说明假设你使用 Linux 1.2.x  核心配合 PPP  2.1.2 软体或Linux 1.3.X/2.0.x 以及 PPP 2.2  版。

使用 PPP 2.2.0  配合核心 1.2.13 是有可能的。然而,要这样做需要核心修补。这份文件不包括这个软体组合。

请注意这份文件不包括使用 Linux  核心 2.0.x  的可载入模组所引起的问题。请参阅 kerneld mini-HOWTO 以及核心/模组 2.0.x  的文件(在 Linux 2.0.x  的原始程式目录里)。

因为这份文件是设计来协助新手的,强烈建议你使用已知能稳定地共同运作的 Linux  版本及适当的 PPP  版本。

5.  其它有用的/重要的文件
鼓励使用者阅读:
 。随附於 PPP  套件的文件
 。pppd  以及 chat 的线上使用手册
 。Linux 网路管理指引 (NAG)
 。the Net-2 HOWTO
 。在 /usr/src/linux/Documentation 里的 Linux  核心文件
 。由 O'Reilly and Associates  出版的最佳 Unix/Linux 书籍(参阅http://www.ora.com/里的目录)。如果你是 Unix/Linux 的新手,立刻跑(不要用走的)到离你最近的电脑书店去投资几样这些资料。

虽然即使不必阅读这些资料中的任何一份你也可以使用这份文件来建立你的 PPP  连结,但是如果你去阅读这些文件那麽你对於究竟发生了些什麽的了解将会好的多。

这些文件(与各种其它文件,包括相关的 RFCs 等)提供额外的以及比这份使用说明所能包含的更多细节解释。

如果你要使用 PPP  连接区域网路到网际网路上,那麽你将得知道一些关於 TCP/IP 网路运作的知识。补充一点这份文件前面提到的资料,你将会发现 O'Reilly 出版的 "TCP/IP Network Administration"  以及  "Building Internet Firewalls" 很有好处。

6.  配置你的 Linux  核心
为了要能够使用 PPP  ,你编译的 Linux  核心必须包含 PPP  的支援。如果你还没有 Linux  的原始程式码请先取得 - 在 Linux  的档案系统标准中它是放在 /usr/src/linux 里面。

Linux 核心的原始程式可以从 sunsite.unc.edu  或其映射节点取得。

一旦你的 /usr/src 里面有 linux  核心的包裹档案後,使用这个指令解开它们:
  ______________________________________________________________________
  tar xzf linux-2.0.6.tar.gz
  ______________________________________________________________________

一旦解开後,你将会发现 /usr/src/linux...  目录树已经建立,其中包含著原始程式码。

在 /usr/src/linux 里你将会发现最少有一个解说(README)档。这包含如何去配置以及编译一个新核心的最佳解释。阅读这个档案(虽然你得直到编译足够多次以後才能知道你该怎麽做但是把它列印出来并在手边持有一份拷贝是个好主意)。

6.1.  □解你的硬体
如果你要重新编译你的核心你必须知道在你 PC 里面的界面卡/设备!!  对於某些设备(像是音效卡)你也得知道各种设定(像是硬体中断号码,输出入位址以及诸如此类的资讯)。

6.2.  编译核心 - the Linux 1.2.13 kernel

要开始配置程序,首先依照在解说档里的说明适当地安装原始程式码。然後以下面的指令开始核心的配置程序。
        make config
为了要能够使用 PPP  ,你必须配置核心包含 PPP  的支援(使用 PPP  需要 pppd 以及核心的 PPP  支援两者)。
  ______________________________________________________________________
    PPP (point-to-point) support (CONFIG_PPP) [n] y
  ______________________________________________________________________

根据在你 PC 里面的硬体以及你想要的 Linux  作业系统特色回答其它的配置问题。然後继续依照该解说档来编译并安装你的新核心。

注意:
如果你想要把你的 Linux  设为 PPP  伺服器或是网路间的闸道,那麽你也应该包含 IP 转送(forwarding)的支援(你将会需要它的! )。

虽然连上网际网路但如果你关心你的电脑以及/或是区域网路的安全,你可能会想要加入 IP 防火墙(firewalls) 的支援。

这个 1.2.13 版的核心只会建立 4  个 PPP  设备。对於多埠的串列卡,你将得编辑核心的 ppp  原始程式以获得更多的埠。(请参阅随附於PPP-2.1.2 套件的 README.linux 档案以便了解你需要做的简单编辑的全部细节)。

注意: 这个 1.2.13 的配置对白不允许你回头 - 所以如果你在回答其中一个问题时犯了错的话,藉由键入 CTRL C 脱离并再次开始。

6.3.  编译核心 - the Linux 1.3.x and 2.0.x kernels

对於 Linux 2.0.x  的核心,你可以使用类似 Linux 1.2.13 的程序。再一次,依照在解说档里的说明适当地安装原始程式码。然後以下面的指令开始核心的配置程序。

        make config

然而,你也有另外的选择

        make menuconfig

这提供一个以选单为基础配合线上辅助的配置系统,允许你在配置程序中随意所之。

也有一个以 X windows  为基础的配置界面

        make xconfig

你可以直接编译 PPP  的支援到核心里去或者是做成可载入模组。如果你只在你 Linux  机器运作的一部份时间里使用 PPP  的话,那麽建议你把 PPP  的支援编译为可载入模组。使用 'kerneld',你的核心将会在你开始你的 PPP  连结程序时自动载入提供 PPP  支援所需的模组。这节省了宝贵的记忆体空间(因为核心没有任何一个部份可以被置换到记忆体外)。

要这样做的话,你需要打开可载入模组的支援:
  ______________________________________________________________________
          Enable loadable module support (CONFIG_MODULES) [Y/n/?] y
  ______________________________________________________________________

要加入 PPP  的核心支援,回答下列这个问题:
  ______________________________________________________________________
          PPP (point-to-point) support (CONFIG_PPP) [M/n/y/?]
  ______________________________________________________________________

要做成可载入模组的话,回答 M  即可,否则就编译成核心的一部份,回答 Y  就是。

与 1.2.13 的核心不同的是,2.0.x 的核心视需要自动建立 PPP  设备并且一点都不需要去研究原始程式码以增加可用的 PPP  设备。

6.4.  配置核心的一般考量
如果你要把你的 Linux PC 设为一台 PPP  伺服器的话,那麽你必须把IP forwarding 的支援编译进去。

如果你要连接一个区域网路到网际网路上(或者甚至只是连接两个区域网路),你应该要关心安全上的问题。在核心中加入 IP firewalls 的支援可能是必须的!

如果你想要用 IP 伪装连接使用前述任何一个‘未连线’IP  网路号码的区域网路那麽你也需要这个配置。

一旦你完成新核心的安装以及重新启动之後,你就可以开始配置并测试你的 PPP  连结。

7.  取得你所需要关於 PPP  服务的资讯
在你可以建立到某台伺服器的 PPP  连线之前,你需要取得下列的资讯(从 PPP  伺服器的系统管理/使用者支援人员取得):

。拨接服务的电话号码
    如果你是在私用交换机(PABX)系统下,你还需要拨出外线信号的私用交换机号码 - 通常是零。

。伺服器使用动态或静态的 IP 号码?
    如果伺服器使用静态的 IP 号码,那麽你需要知道在 PPP  连线中你这端要使用哪个 IP 号码。大部分的网际网路服务提供者都使用动态的 IP 号码。如前述,这对於你可以使用的服务会有些限制。

。如果你使用静态的 IP 号码,查问你的 ISP  使用的网路遮罩。

。ISP 的领域名称伺服器 IP 号码是什麽?
    虽然只需要一个但最少应该得要有两个。

。该伺服器是否需要使用 PAP/CHAP ?
    如果是这样你需要知道你用来连线 "id" 以及 "secret" 。(这大概会是你的使用者名称以及密码)。

。伺服器会自动起动 PPP  或者在一旦你签入之後需要发出任何指令来起动伺服端的 PPP?
    如果你必须发出某个指令来起动 PPP  的话,它是什麽?

  仔细地注意这些资讯 - 你马上要使用它们!

7.1.  测试你数据机的拨接连线

你应该确认你的数据机设定正确而且你知道它连接到哪个串列埠。

  谨记:
  。DOS com1: = Linux /dev/cua0 (and /dev/ttyS0)
  。DOS com2: = Linux /dev/cua1 (and /dev/ttyS1)
    et cetera

使用你的终端机通讯软体(像是 minicom),拨到你想使用 PPP  连线的那台 PPP  伺服器。

(注意: 在这个阶段我们并不尝试建立 PPP  连线 - 只是要证实我们拥有正确的电话号码以及为了签入并且起动 PPP  而确实地找出伺服器究竟传送给我们什麽讯息)。

在这个过程中,可以截取(记录到一个档案里)整个签入的过程或者是小心地(非常小心地)确实写下远端伺服器所给你提示输入你的使用者名称以及密码的讯息(以及任何建立 PPP  连线需要下达的指令)。


这最少值得拨接两次 - 某些伺服器会在每次你签入时改变提示(例如依时间改变! )。你的 Linux box  在每次你拨入的时候要能够辨认的两个主要的提示是:
 。要求你输入使用者名称的提示;
 。要求你输入密码的提示;

如果你必须发出某个指令来起动伺服端的 PPP  ,那麽你也会需要找出一旦你签入之後伺服器所给你的提示。

如果你的伺服器自动起动 PPP  的话,一旦你签入完成,你将开始见到萤幕上出现垃圾 - 这是 PPP  伺服端传送给你的机器以起动并且配置 PPP 连线的资讯。

这看起来应该会是像这样的东西:

       ~y}#.!}!}!} }8}!}$}%U}"}&} } } } }%}& ...}'}"}(}"} .~~y}

(而且它还会一直进来! )

这个时候,你就可以挂断你的数据机(通常是,快速地键入 +++  一旦你的数据机回应 ok 然後接著发出 ATHO 指令。

在某些系统中 PPP  必须在伺服端上明确地加以起动。这通常是因为该伺服器被设定成允许使用相同使用者名称/密码配对来做 PPP  签入及一般使用界面(shell) 的签入。如果是这样,一旦你签入就发出该指令。再一次,你将会见到 PPP  连线伺服端起动的垃圾资讯 - 所以现在你可以挂断了。

如果当伺服端起动 PPP  的时候你并没有在你的萤幕上见到这些垃圾,那麽相当有可能(虽然并不确定)是你做错了些什麽。
即使如此,某些 PPP  伺服器被设定成被动的 - 它们不传送任何讯息直到客户端(你的电脑)从你这边起动 PPP  程序。

无论如何,大多数的伺服器都是设定为主动的而且你应该会见到这些个垃圾。

如果你不能使你的数据机运作的话,阅读你的数据机使用手册,你通讯软体的线上使用手册以及 Serial HOWTO!  一旦你解决该问题,继续进行前面所说的。

8.  关於串列埠以及速度上的注意事项
如果你使用高速数据机(14,400 Baud or above)的话,你的串列埠必须有能力处理这样的一台数据机所能产生的贯通量,特别是在数据机压缩资料的时候。你的串列埠需要使用像是 16550(A) 这样的现代化  UART  (通用非同步接收转换器)。如果你使用的是旧机器(或者是旧的串列界面卡),你的串列埠相当可能只有 8250 UART,这在使用高速数据机的时候将会引起值得考虑的问题。

使用这个指令

       setserial -a /dev/ttySx

要求 Linux  报告你所拥有之 UART 的型态。如果你没有 16550A 型的UART,投资一块新的串列界面卡吧(大约 $50  以下就可以取得)。

注意: 第一版的 16550 UART 晶片有个错误。这很快就被发现而且新版的晶片已经出来了 - 此即 16550A UART。然而少数有错误的晶片已经流入市场。你不太可能会遇上这些晶片但你仍应找寻显示 16550A 的回应讯息,特别是在某些期间的串列界面卡上。

9.  配置你的数据机
为使用 PPP  你将得正确地配置你的数据机 - 要完成这件工作请阅读你的数据机使用手册! 大部分的数据机都有 PPP  所需求的的出厂预设选项。

  硬体流量控制 (RTS/CTS)(在许多使用海斯指令集的数据机上是 &K3  指令)你应该要研究的其它设定(使用标准海斯指令)是:

  。 E1 开启指令的本地回应( chat 运作所需)
  。 Q0 回报执行结果代码( chat 运作所需)
  。 S0=0 关闭自动回应(除非你想让你的数据机接听电话)
  。 &C1  只在连线之後侦测载波
  。 &S0  Data Set Ready (DSR)  永远设为开启
  。 (depends)   Data Terminal Ready

在你的电脑与数据机之间的数据机串列面界面如何运作也值得研究了解。大部分现代的数据机都允许你以固定的速度使用串列界面,即使电话线路界面切换到最高的速度它跟远端数据机都能够处理。

这称为 split speed operation  。如果你的数据机能支援这项功能,把数据机的串列界面锁定在它的最高速度(通常是 115,200 baud )。

使用你的通讯软体(例如 minicom)找出关於你数据机的配置资讯并且设为 PPP  所需的设定。许多数据机会在 AT&V 指令的回应中回报它们目前的设定状况,但是你应该查看一下你的数据机使用手册。如果你把设定全都弄乱了,那麽你可以藉由发出 AT&F 指令回到稳定状态(通常可以) - 回到出厂设定。(在我遇过的大部分现代数据机中,出厂的设定包含所有使用 PPP  所需的设定 - 但是你应该做个检查)。

把你的数据机配置储存到不会消失的记忆体里(通常可以使用 AT&W 此数据机指令达成 - 但是请检查你的数据机使用手册)。

正确的数据机配置已经存入数据机之後,重置数据机将会使其开始作用。这样的安排大大简化了 PPP  连线所需的 chat 指令稿。

9.1.  串列流量控制注意事项
当资料在串列通讯线路上流动的时候,可能会发生资料到达的比电脑能处理的还要快这种情况(电脑可能忙著做其它的事 - 记得,Linux 是一个多使用者,多工的作业系统)。为了确保资料不会漏失(在缓冲区中的资料不会超载而因此漏失掉),需要某些控制资料流量的方法。

有两种方法可以在串列线路上达成这个目的:

  。使用硬体信号 (Clear To Send/Request to Send - CTS/RTS)
  。使用软体信号 (control S and control Q).

虽然後者用在终端机(文字)连结上可能很好,但是在 PPP  上的资料使用整个 8 bit  编码空间 - 而且在资料中的某个地方相当可能存在会被转成 control S  以及 control Q  的位元组。所以,如果数据机设成使用软体流量控制的话,那麽传输很容易被扰乱!

对於 PPP(使用 8 bit  资料编码)硬体流量控制是很重要的。

10. 使用 PPP  以及 root 权限
因为 PPP  需要设定网路设备,变更核心递送表格以及诸如此类的动作,所以它需要以 root 的权限来做这些事。

如果 root 以外的使用者要能设立 PPP  连线,那麽 pppd 程式应该设为以 root 的身分执行(setuid):

       -r-sr-xr-x   1 root     root        95225 Jul 11 00:27 /usr/sbin/pppd

如果 /usr/sbin/ppd  不是设定为这样,那麽以 root 的身分发出这个指令:

       chmod u+s /usr/sbin/pppd

另外一种办法,允许使用者使用 sudo 来起动 ppp  连结(比起前述的方式这个方法在安全性上更占优势)。

根据你希望你的系统如何运作而定,特别是如果你希望你系统里的任何使用者都能启始 PPP  连结,你应该把你的 ppp-on/off 指令稿设定为全部的人都可以读取/执行。(如果你的 PC 只由你使用那麽这样大概不错)。

无论如何,如果你不希望任何人都能起始 PPP  连线(例如,你的孩子在你的 Linux PC 上有帐号而你不希望他们在没有你的监督下连上网际网路),你将得建立一个 PPP  群组(编辑 /etc/group 档案)并且:
。使 ppp-on/off 指令稿由使用者 root 以及群组 PPP  所拥有
。使 ppp-of/off 指令稿能由群组 PPP  读取/执行
。关闭其它的存取权限
。把能够起动 PPP  的使用者加入 /etc/group 档案的 PPP  群组里
   -rwxr-x---   1 root     PPP           587 Mar 14  1995 /usr/sbin/ppp-on
    -rwxr-x---   1 root     PPP           631 Mar 14  1995 /usr/sbin/ppp-off

此外,你将得把 ppp-off  设为以 root 的身分执行(或者再一次允许PPP 群组使用 sudo 存取)。没有这样做的话,使用者将不能终止他们启始的 PPP  连结。

在我家里的 PC 上,我并没有把 pppd 设为以 root 的身分执行。为了起动 ppp  连结我必须先切换成 root 。这提供我监督我儿子存取网际网路的能力。

11. 设定 PPP  连线的档案
你必须以 root 签入来建立这些目录并且编辑这些设立 PPP  连线所需的档案,即使你想让所有的使用者都能使用 PPP  。

在你的 /etc 目录里应该要有个目录:

       drwxrwxr-x   2 root     root         1024 Oct  9 11:01 ppp

如果它不存在的话 - 建立它。

如果这个目录已经存在,它应该会包含一个称为 options.tpl  的选项档案样板。这个档案包括在下面。

因为它包含所有 PPP  选项的解释所以请你把它印出来(配合 pppd 的线上使用手册来阅读将会是很有用的)。虽然你可以使用这个档案作为/etc/ppp/options  档案的基础,但是建立你自己的,没有包含所有在这个样板里的指令的选项档案可能会更好 - 它会短得多而且比较容易阅读/维护。

如果你有多个串列线路/数据机(典型的例子是 PPP  伺服器),那麽建立一个一般化的 /etc/ppp/options 档案,其中包含每个你提供支援拨入的串列埠所使用的共同选项并且为每一个需要个别设定以建立 PPP 连线的串列线路设立个别的选项档案。

这些档案名为 option.ttyx1, option.ttyx2 依此类推(其中 x  是你串列埠的适当代字)。

然而,对於单一 PPP  连线,你可以直接使用 /etc/ppp/options 这个档案。另外一种办法,你可以把所有的选项放进 pppd 指令作为参数。

使用 /etc/ppp/option.ttySx  档案的设定方式会比较容易加以维护。
如果你使用 PPP  来连线到好几个不同的节点去的话,那麽你就可以在/etc/ppp/options.site 里面为每个节点建立选项档案然後在你连线时指定选项档案作为 PPP  指令的参数。

11.1. 替代的 options.tpl
某些个 PPP  的发行套件似乎漏失了 options.tpl  这个档案,所以在这里有个完整的档案。我建议你不要直接编辑这个档案来建立你自己的 /etc/ppp/options。把它拷贝到一个新的档案然後编辑该档案比较好。
如果你弄乱了你编辑的档案,你可以回头从原始档案再度开始。
  ______________________________________________________________________
  # /etc/ppp/options -*- sh -*- general options for pppd
  # created 13-Jul-1995 jmk
  # autodate: 01-Aug-1995
  # autotime: 19:45

  # Use the executable or shell command specified to set up the serial
  # line.  This script would typically use the "chat" program to dial the
  # modem and start the remote ppp session.
  #connect "echo You need to install a connect command."

  # Run the executable or shell command specified after pppd has
  # terminated the link.  This script could, for example, issue commands
  # to the modem to cause it to hang up if hardware modem control signals
  # were not available.
  #disconnect "chat -- /d+++/d/c OK ath0 OK"

  # async character map -- 32-bit hex; each bit is a character
  # that needs to be escaped for pppd to receive it.  0x00000001
  # represents '/x01', and 0x80000000 represents '/x1f'.
  #asyncmap 0

  # Require the peer to authenticate itself before allowing network
  # packets to be sent or received.
  #auth

  # Use hardware flow control (i.e. RTS/CTS) to control the flow of data
  # on the serial port.
  #crtscts

  # Use software flow control (i.e. XON/XOFF) to control the flow of data
  # on the serial port.
  #xonxoff

  # Add a default route to the system routing tables, using the peer as
  # the gateway, when IPCP negotiation is successfully completed.  This
  # entry is removed when the PPP connection is broken.
  #defaultroute

  # Specifies that certain characters should be escaped on transmission
  # (regardless of whether the peer requests them to be escaped with its
  # async control character map).  The characters to be escaped are
  # specified as a list of hex numbers separated by commas.  Note that
  # almost any character can be specified for the escape option, unlike
  # the asyncmap option which only allows control characters to be
  # specified.  The characters which may not be escaped are those with hex
  # values 0x20 - 0x3f or 0x5e.
  #escape 11,13,ff

  # Don't use the modem control lines.
  #local

  # Specifies that pppd should use a UUCP-style lock on the serial device
  # to ensure exclusive access to the device.
  #lock

  # Use the modem control lines.  On Ultrix, this option implies hardware
  # flow control, as for the crtscts option.  (This option is not fully
  # implemented.)
  #modem

  # Set the MRU [Maximum Receive Unit] value to <n> for negotiation.  pppd
  # will ask the peer to send packets of no more than <n> bytes. The
  # minimum MRU value is 128.  The default MRU value is 1500.  A value of
  # 296 is recommended for slow links (40 bytes for TCP/IP header + 256
  # bytes of data).
  #mru 542

  # Set the interface netmask to <n>, a 32 bit netmask in "decimal dot"
  # notation (e.g. 255.255.255.0).
  #netmask 255.255.255.0

  # Disables the default behaviour when no local IP address is specified,
  # which is to determine (if possible) the local IP address from the
  # hostname. With this option, the peer will have to supply the local IP
  # address during IPCP negotiation (unless it specified explicitly on the
  # command line or in an options file).
  #noipdefault

  # Enables the "passive" option in the LCP.  With this option, pppd will
  # attempt to initiate a connection; if no reply is received from the
  # peer, pppd will then just wait passively for a valid LCP packet from
  # the peer (instead of exiting, as it does without this option).
  #passive

  # With this option, pppd will not transmit LCP packets to initiate a
  # connection until a valid LCP packet is received from the peer (as for
  # the "passive" option with old versions of pppd).
  #silent

  # Don't request or allow negotiation of any options for LCP and IPCP
  # (use default values).
  #-all

  # Disable Address/Control compression negotiation (use default, i.e.
  # address/control field disabled).
  #-ac

  # Disable asyncmap negotiation (use the default asyncmap, i.e. escape
  # all control characters).
  #-am

  # Don't fork to become a background process (otherwise pppd will do so
  # if a serial device is specified).
  #-detach

  # Disable IP address negotiation (with this option, the remote IP
  # address must be specified with an option on the command line or in an
  # options file).
  #-ip

  # Disable magic number negotiation.  With this option, pppd cannot
  # detect a looped-back line.
  #-mn

  # Disable MRU [Maximum Receive Unit] negotiation (use default, i.e.
  # 1500).
  #-mru

  # Disable protocol field compression negotiation (use default, i.e.
  # protocol field compression disabled).
  #-pc

  # Require the peer to authenticate itself using PAP.
  #+pap

  # Don't agree to authenticate using PAP.
  #-pap

  # Require the peer to authenticate itself using CHAP [Cryptographic
  # Handshake Authentication Protocol] authentication.
  #+chap
  # Don't agree to authenticate using CHAP.
  #-chap

  # Disable negotiation of Van Jacobson style IP header compression (use
  # default, i.e. no compression).
  #-vj

  # Increase debugging level (same as -d).  If this option is given, pppd
  # will log the contents of all control packets sent or received in a
  # readable form.  The packets are logged through syslog with facility
  # daemon and level debug. This information can be directed to a file by
  # setting up /etc/syslog.conf appropriately (see syslog.conf(5)).  (If
  # pppd is compiled with extra debugging enabled, it will log messages
  # using facility local2 instead of daemon).
  #debug

  # Append the domain name <d> to the local host name for authentication
  # purposes.  For example, if gethostname() returns the name porsche,
  # but the fully qualified domain name is porsche.Quotron.COM, you would
  # use the domain option to set the domain name to Quotron.COM.
  #domain <d>

  # Enable debugging code in the kernel-level PPP driver.  The argument n
  # is a number which is the sum of the following values: 1 to enable
  # general debug messages, 2 to request that the contents of received
  # packets be printed, and 4 to request that the contents of transmitted
  # packets be printed.
  #kdebug n

  # Set the MTU [Maximum Transmit Unit] value to <n>. Unless the peer
  # requests a smaller value via MRU negotiation, pppd will request that
  # the kernel networking code send data packets of no more than n bytes
  # through the PPP network interface.
  #mtu <n>

  # Set the name of the local system for authentication purposes to <n>.
  #name <n>

  # Set the user name to use for authenticating this machine with the peer
  # using PAP to <u>.
  #user <u>

  # Enforce the use of the hostname as the name of the local system for
  # authentication purposes (overrides the name option).
  #usehostname

  # Set the assumed name of the remote system for authentication purposes
  # to <n>.
  #remotename <n>

  # Add an entry to this system's ARP [Address Resolution Protocol]
  # table with the IP address of the peer and the Ethernet address of this
  # system.
  #proxyarp

  # Use the system password database for authenticating the peer using
  # PAP.
  #login

  # If this option is given, pppd will send an LCP echo-request frame to
  # the peer every n seconds. Under Linux, the echo-request is sent when
  # no packets have been received from the peer for n seconds. Normally
  # the peer should respond to the echo-request by sending an echo-reply.
  # This option can be used with the lcp-echo-failure option to detect
  # that the peer is no longer connected.
  #lcp-echo-interval <n>
  # If this option is given, pppd will presume the peer to be dead if n
  # LCP echo-requests are sent without receiving a valid LCP echo-reply.
  # If this happens, pppd will terminate the connection.  Use of this
  # option requires a non-zero value for the lcp-echo-interval parameter.
  # This option can be used to enable pppd to terminate after the physical
  # connection has been broken (e.g., the modem has hung up) in
  # situations where no hardware modem control lines are available.
  #lcp-echo-failure <n>

  # Set the LCP restart interval (retransmission timeout) to <n> seconds
  # (default 3).
  #lcp-restart <n>

  # Set the maximum number of LCP terminate-request transmissions to <n>
  # (default 3).
  #lcp-max-terminate <n>

  # Set the maximum number of LCP configure-request transmissions to <n>
  # (default 10).
  #lcp-max-configure <n>

  # Set the maximum number of LCP configure-NAKs returned before starting
  # to send configure-Rejects instead to <n> (default 10).
  #lcp-max-failure <n>

  # Set the IPCP restart interval (retransmission timeout) to <n>
  # seconds (default 3).
  #ipcp-restart <n>

  # Set the maximum number of IPCP terminate-request transmissions to <n>
  # (default 3).
  #ipcp-max-terminate <n>

  # Set the maximum number of IPCP configure-request transmissions to <n>
  # (default 10).
  #ipcp-max-configure <n>

  # Set the maximum number of IPCP configure-NAKs returned before starting
  # to send configure-Rejects instead to <n> (default 10).
  #ipcp-max-failure <n>

  # Set the PAP restart interval (retransmission timeout) to <n> seconds
  # (default 3).
  #pap-restart <n>

  # Set the maximum number of PAP authenticate-request transmissions to
  # <n> (default 10).
  #pap-max-authreq <n>

  # Set the CHAP restart interval (retransmission timeout for
  # challenges) to <n> seconds (default 3).
  #chap-restart <n>

  # Set the maximum number of CHAP challenge transmissions to <n>
  # (default 10).
  #chap-max-challenge

  # If this option is given, pppd will rechallenge the peer every <n>
  # seconds.
  #chap-interval <n>

  # With this option, pppd will accept the peer's idea of our local IP
  # address, even if the local IP address was specified in an option.
  #ipcp-accept-local

  # With this option, pppd will accept the peer's idea of its (remote) IP
  # address, even if the remote IP address was specified in an option.
  #ipcp-accept-remote
  ______________________________________________________________________

11.2. 我应该使用什麽选项?
嗯,完全视情况而定(唉)。

这里所提供的是涵盖最普通情况的两个基本版本。

无论如何,如果它无法运作的话,阅读样板档(/etc/ppp/options.tpl)  以及 pppd 的线上使用手册并且告诉你所连线之伺服器的系统管理/使用者支援人员。

11.2.1. /etc/ppp/options (NO PAP/CHAP)

下面这个设定应该能够在不需要 PAP/CHAP 验认的连线上运作。
  ______________________________________________________________________
  # /etc/ppp/options (NO PAP/CHAP)
  #
  # If you are using a STATIC IP number, edit the 0.0.0.0 part of the
  # following line to your static IP number.
  0.0.0.0:
  #
  # use the modem control lines
  modem
  # use uucp style locks to ensure exclusive access to the serial device
  lock
  # use hardware flow control
  crtscts
  # create a default route for this connection in the routing table
  defaultroute
  # do NOT set up any "escaped" control sequences
  asyncmap 0
  # use a maximum transmission packet size of 552 bytes
  mtu 552
  # use a maximum receive packet size of 552 bytes
  mru 552
  #
  #-------END OF SAMPLE /etc/ppp/options (no PAP/CHAP)
  ______________________________________________________________________

11.2.2. /etc/ppp/options (using PAP/CHAP)
如果你连线的伺服器需要 PAP  或是 CHAP 验认,在上述的选项档案中加入下列几行
  ______________________________________________________________________
  #
  # force pppd to use your ISP username as your 'host name' during the
  # authentication process
  name <your ISP username>        # you need to edit this line
  #
  # If you need to force PAP or CHAP authentication on the server,
  # uncomment the appropriate one of the following lines.
  #+chap
  #+pap
  #
  # If you are using ENCRYPTED secrets in the /etc/ppp/pap-secrets
  # file, then uncomment the following line.
  #+papcrypt
  ______________________________________________________________________

12. 设立你的 /etc/resolv.conf 档案
虽然我们人类喜欢给事物取个名称,电脑喜欢数字。在 TCP/IP 网路上(这也就是网际网路),我们藉由特定的名称呼叫某台机器,而且每台机器都存在於一个特定的标记;领域标记里面。举例而言,我的 Linux  工作站称为 archenland 而它是存在於 hedland.edu.au 这个领域里。所以它在人们心目中的位址就是 archenland.hedland.edu.au  。为了使网际网路上的其它机器找的到这台机器,事实上它是藉由其 IP 号码来认知的。

把机器(以及领域)的名称转译(解析)成为在网际网路上所实际使用的 IP 号码是提供领域名称服务之机器的工作。

当你创造出 PPP  连线时,你需要告诉你的 Linux  机器它可以在哪里找到主机名称对照到 IP 号码(位址解析)的资讯,如此你就可以使用机器的名称而你的电脑可以把这些名称转译成它运作所需的 IP 号码。

一个方法是输入所有你想联络的主机到 /etc/hosts 档案里(如果你是连上网际网路的话这真的是完全不可能的事);另一个方法是使用相对於机器名称的 IP 号码(要记得全部的 IP 位址是不可能的除非在最小的区域网路上)。

最好的方法是设定你的 Linux  使它知道该到哪取得这项名称到号码的资讯 - 自动地。这项服务是由领域名称伺服器系统所提供。需要做的全部工作是把 IP 号码输入到你的 /etc/resov.conf  档案里。

你的 PPP  伺服器系统管理/使用者支援人员应该要提供给你两个 DNS  的 IP 号码(只需要一个 - 但是两个在出问题时可以多些帮助)。

你的 /etc/resolv.conf  看起来应该会像这样:
  ______________________________________________________________________
  domain your.isp.domain.name
  nameserver 10.25.0.1
  nameserver 10.25.1.2
  ______________________________________________________________________

编辑这个档案(如果有必要就建立它)以呈现你的 ISP  提供的资讯。
它的拥有者以及权限应该像下面这样:

       -rw-r--r--   1 root     root           73 Feb 19 01:46 /etc/resolv.conf

如果你因为本来就在区域网路上所以已经设立 /etc/resolv.conf 档案的话,只要简单的把 PPP  连线的 DNS  伺服器 IP 号码加到你已有的档案里即可。

13. PAP/CHAP 暗码档
如果你有使用 pap  或是 chap 验认,那麽你也需要建立这些暗码档。它们是:
  ______________________________________________________________________
  /etc/ppp/pap-secrets
  /etc/pp/chap-secrets
  ______________________________________________________________________

关於 PAP  以及 CHAP 第一点要注意的是它们是设计来验认电脑系统而不是使用者的。

我听见你在问”哼? 那有什麽差别? ”

现在呢,一旦你的电脑建立到伺服器的 PPP  连线之後,在你系统上的任何使用者都能使用该连线 - 不是只有你而已。这就是为什麽你可以使用 PPP  设立接合两个区域网路的广域网路连结。

这就是说,你的 ISP  可能给你一个使用者名称以及密码让你可以连线到他们的系统并且由此连上网际网路。你的 ISP  对你电脑的名称一点都不感兴趣,所以你大概得要把你在 ISP  里的使用者名称给你的电脑使用。

这是使用 pppd 的 name 使用者名称选项完成的。所以,如果你使用你ISP 所给的使用者名称,那麽加入下面这行
 ______________________________________________________________________
  name your_username_at_your_ISP
 ______________________________________________________________________

到你的 /etc/ppp/options 档案里。

从技术上来说,PAP 其实应该要使用 user 使用者名称这个选项,但是如果使用到 PAP  的话那麽 pppd 聪明的足以把 name 解译为 user 。使用 name 这个选项的好处是这对於 CHAP 也是有效的。
因为 PAP/CHAP 是用来验认电脑的,在技术上你也需要指定远端电脑的名称。然而,大部分的人只接一家 ISP  所以你可以在暗码档里的远端主机名称使用通用字元(*) 。

许多 ISPs 有多个数据机拨接中心连接到不同的终端机伺服器 - 每个终端机伺服器都有不同的名称,但都从单一的(自动转线)号码拨接。
在某些情形下可能因此而很不容易预先知道远端电脑的名称。

13.1. PAP 暗码档
  /etc/ppp/pap-secrets  这个档案看起来像
 ______________________________________________________________________
  # Secrets for authentication using PAP
  # client        server       secret     acceptable local IP addresses
 ______________________________________________________________________

这四个栏位是以空白分界。

假定你的 ISP  给你的使用者名称是 fred 而密码是 flintstone 的话那麽你应该在 /etc/ppp/option.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 位址。

如果你使用 PAP  连接到好几台机器去,那麽不是在每台机器上安排不同的使用者名称就是找出你将要连上的远端机器名称。这样将能允许你增加几行设定到你的 pap-secrets  档案里 - 提供你正确设定你所要连接的各台机器所需的 name 选项。

13.2. CHAP 暗码档
目前的 pppd 版本要求你要有互相验认的方法 - 这是说你必须能够让从你的机器到远端伺服器以及从远端伺服器到你的机器这两种验认都能进行。

所以,如果你的机器是 fred 而远端是 barney 的话,则在它们个别的/etc/ppp/options.ttySx  里你的设为 name fred remotename barney  而远端机器应设为 name barney remotename fred  。

fred  这台机器的 /etc/chap-secrets  档案看起来会像  ______________________________________________________________________
  # Secrets for authentication using CHAP
  # client        server  secret            acceptable local IP addresses
  fred            barney  flintstone
______________________________________________________________________

而 barney 的是
 ______________________________________________________________________
  # Secrets for authentication using CHAP
  # client        server  secret            acceptable local IP addresses
  barney          fred    flintstone
 ______________________________________________________________________

14. 手动设立 PPP  连线
现在你已经建立你的 /etc/ppp/options 以及 /etc/resolv.conf 档案(以及,如果有需要,还有 /etc/ppp/pap|chap-secrets  档案),你可以藉由手动设立 PPP  连线来测试这些设定。(一旦我们使手动连线能运作,我们将会自动化该过程)。

要做这件事,你的通讯软体必须能在不重置你的数据机的情况下结束。Minicom 可以做到 - ALT Q (或者在比较旧的 minicom  版本是使用  CTRL A Q)

确定你以 root 签入。

起动你的通讯软体(像是 minicom),拨接到 PPP  伺服器并且像一般一样的签入。如果你需要发出某个指令来起动伺服端上的 PPP  ,那麽就做吧。你将会看见你以前看过的垃圾。

如果你使用 pap/chap 的话,那麽只是连线到远端系统应该就会起动在远端上的 PPP  而且你将在没有签入的情况下就见到这些垃圾。(虽然这在某些伺服器上不会发生)。

现在,在不要重置数据机的情况下结束通讯软体(ALT Q or CTL A Q in  minicom)并且在 Linux  的提示符号下(以 root 的身分)键入
       pppd -d -detach /dev/cuaX &

如果你使用 pap/chap 验认,你的 pap/chap 档案必须已经设定好。
  -d  这个选项开启侦错功能 - ppp 连线起动时的”交谈”将会记录到你的系统记录里去 - 如果你遇上麻烦这会很有用的。

自然,你应该使用 cua0 或是 cua1 等等 - 你的数据机真正连接的埠,而不是 cuaX!

你数据机的灯现在应该要闪烁,因为要建立 PPP  连线。PPP 连线的建将会花点时间。

此时你可以观察 PPP  界面,藉由发出这个指令 ifconfig

在你所拥有的任何乙太网路以及回授设备之外,你应该会看见像这样的资讯:
______________________________________________________________________
    ppp0     Link encap:Point-Point Protocol
             inet addr:10.144.153.104  P-t-P:10.144.153.51 Mask:255.255.255.0
             UP POINTOPOINT RUNNING  MTU:552  Metric:1
             RX packets:0 errors:0 dropped:0 overruns:0
             TX packets:0 errors:0 dropped:0 overruns:0
______________________________________________________________________

其中
  。inet addr:10.144.153.10 是该连结中你这端的 IP 号码。
--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值