如何设置 Solaris 的 PPPoE 以支持 DSL 访问
概述
本文简要说明了如何在客户机 Solaris 环境中配置 PPPoE 以便支持
通过 ADSL 建立宽带拨号连接。PPPoE(Point to Point Protocol
over Ethernet)是指以太网之上的点对点协议,它是一种基于隧-道(
Tunneling)技术的协议,即在一种协议之上传输的另一种-协议。利用
PPPoE 协议,客户端可以通过 DSL 调制解调器使用宽带数据服务。
配置 PPPoE 客户机的网卡
PPPoE 建立在在以太网协议之上,它需要客户机配有相应的网卡。因
此,首先需要确保你的客户机的网卡已经配置,并工作正常。
检查软件需求
Solaris 8 10/01 及以后版本提供了对 PPPoE 的支持。默认安装过程
将安装 PPPoE 所需的全部软件。首先确认系统中是否已经安装了以下
必要的软件包:
SUNWpppd - Solaris PPP 设备驱动程序
SUNWpppdr - Solaris PPP 配置文件
SUNWpppdt - Solaris PPP 隧道
SUNWpppdu - Solaris PPP 守护程序和实用工具
SUNWpppdx - Solaris PPP 64 位支持(仅用于 64 位 SPARC)
可以使用 pkginfo(查阅手册获得命令的帮助)检查系统中是否安装
了这些软件。这一步和之后的大部分操作都需要 root 权限,所以这
里首先 su 成为 root。检查的方法是:
# pkginfo -l | grep ppp
PKGINST: SUNWpppd
PKGINST: SUNWpppdr
PKGINST: SUNWpppdt
PKGINST: SUNWpppdu
PKGINST: SUNWpppg
注意上面的输出来自于我的主机,其中没有用于 64 位 SPARC 机的包
,而有一个 SUNWpppg 包。后者是 GNU 的 PPP 实用工具,在我们这
里的示范中,没有用到。
如果你的主机没有安装必须的软件,参见手册的说明,利用 pkgadd
命令安装上面提到的软件包。
在一个正确安装上述所需软件的系统中,存在两个用于 PPP 访问目的
的串行设备。参见下面的例子:
# ls /dev | grep ppp
sppp
sppptun
其中设备名称中的 s 应该是指 Solaris,而 ppp 为点对点协议,tun
则为隧道(tunneling)。
配置工具
上面的软件包中含有以下配置 PPPoE 客户端将使用的工具:
/usr/lib/inet/pppoed
这是建立 PPPoE 访问服务器(Access Server)所需的守护程序
。我们这里配置的是客户机环境,不会用到这个程序。
/usr/lib/inet/pppoec
我们将通过 /usr/bin/pppd 间接地调用该程序,而该程序将负责
与服务器端的对话。
/usr/bin/pppd
这是我们实际将使用的,调用 /usr/lib/inet/pppoec 的守护程
序。
/usr/sbin/sppptun
该实用工具用于手工配置和查询 PPPoE 的设备。
/etc/init.d/pppd
该脚本用于根据配置文件 /etc/ppp/pppoe.if 中的内容,为其中
指定的网卡加载或者卸载 PPPoE 协议。
pppoe.so 插件
pppoe.so 是必须被 PPPoE 加载的的共享对象。这个插件为客户
端(也包括服务器端)提供 PPPoE 协议支持。在客户端,
/usr/bin/pppd 根据用户在访问服务器信息配置文件中指定的
plugin pppoe.so 选项加载该插件。
手工加载协议
可以使用 /usr/sbin/sppptun 实用工具来手工配置和检索网卡接口。
主要的命令包括 plumb(加载),unplumb(卸载)以及 query(查询
),参见手册获得完整的说明。
下面的例子说明了如何为指定的网卡加载协议:
# /usr/sbin/sppptun plumb pppoed sfe0
sfe0:pppoed
# /usr/sbin/sppptun plumb pppoe sfe0
sfe0:pppoe
注意,命令行参数中的 pppoe 和 pppoed 指定的是 PPPoE 的两个协
议,分别为会话阶段(Session Stage)协议和发现阶段(Discovery
Stage)协议。这两个协议都必须加载。需要加以区别的是守护-程序
/usr/lib/inet/pppoed 是用于建立访问服务器的程序。
另外一个有用的命令是 query 命令,用于检索协议加载的状态。参见
下面的例子:
# sppptun query
sfe0:pppoed
sfe0:pppoe
有时,你可能需要卸载协议,这是通过 unplumb 命令完成的。参见下
面的例子:
# sppptun unplumb hme1:pppoed
# sppptun unplumb hme1:pppoe
自动加载协议
上面我们说明了如何手工加载协议,但一般我们是使用更为方便的脚
本 /etc/init.d/pppd 来加载协议的。该脚本在系统启动时执行,读
取配置文件 /etc/ppp/pppoe.if 中的内容,自动加载协议到配置文件
中指定的网卡接口上。
配置文件 /etc/ppp/pppoe.if 需要手工创建。其中每一个将加载
PPPoE 协议的网卡接口的名称占一行。当然,作为客户端的机器通常
只指定一个网卡用于 PPPoE 协议。参见下面的例子:
# cat /etc/ppp/pppoe.if
sfe0
脚本 /etc/init.d/pppd 有两个选项,start 和 stop 分别用于加载
协议和卸载协议。使用上面的配置,参见下面的例子:
#/etc/init.d/pppd start
sfe0:pppoe
sfe0:pppoed
加载协议之后可以使用以下命令检查协议加载的结果:
# sppptun query
sfe0:pppoed
sfe0:pppoe
为客户机定义远端的 PPPoE 访问服务器信息
定义客户端将要连接的远端访问服务器需要建立相应的
/etc/ppp/peers/peer-name 配置文件。其中 peer-name 为自定义的
远端服务器名称,比如要定义一个被称为 myisp 的远端服务器,则需
要建立一个配置文件 /etc/ppp/peers/myisp
下面是一个典型的信息配置文件:
# cat /etc/ppp/peers/myisp
sppptun # 指定 sppptun 为使用的串行设备
plugin pppoe.so # 要求 pppd 加载 pppeo.so 插件
connect "/usr/lib/inet/pppoec sfe0"
# 运行 pppoec 并指定 sfe0 为使用的网卡
noccp # 关闭链路的 CCP 压缩选项
noauth # 服务器端不用向客户端认证
user 8888888888 # 连接服务器的用户名
password 123456 # 连接服务器的密码
noipdefault # 不指定默认 IP 而从服务器端获得 IP
defaultroute # 为客户端安装默认的路由
注意,Solaris 提供了 myisp.tmpl 可以用作该配置文件的起点。不
过,该文件用于普通的 PPP 连接。我们的例子中的 connect 行与之
不同。
noccp 选项的作用是关闭链路的压缩控制协议(Compression Control
Protocol)选项。这是因为大部分的 ISP 都使用自己的压缩技术。关
闭这些选项,以及其它类似选项,比如 novj noaccomp 等等,可以避
免服务器和客户端之间没有必要的协商,从而提高效率。
noauth 选项指的是服务器不用向客户端认证。这一点很明显,ISP 很
少向他的客户认证身份的,但客户当然需要向 ISP 进行认证。选项
user 和 password 分别用于指定向服务器进行认证的用户名和密码。
该配置文件中还有很多选项,这里就不再详细讲解,请参考 pppd 的
手册获得更多的信息。上面的这个例子应该可以适用于绝大多数典型
用户了。
连接到服务器
完成 PPPoE 的配置后,就可以建立到服务器的连接了。参考下面的例
子:
# /usr/bin/pppd call myisp
Serial connection established.
Using interface sppp0
Connect: sppp0 <--> /dev/sppptun
Remote message: Welcome to use Quidway ROUTER, Huawei Tech.^M^J
local IP address 61.149.65.105
remote IP address 61.149.44.1
上面例子中的输出表明已经成功的连接到服务提供商。通过 ifconfig
命令可以发现一个新增的网络接口,其名称为 spppN,其中 N 为序
号,典型的比如 sppp0。
如果想关闭连接,则简单地杀掉 /usr/bin/pppd 的进程即可。
PPP 认证协议
PPPoE 有两个认证协议,分别是密码认证协议(Password
Authentication Protocol,PAP)和质询-握手认证协议(
Challenge-Handshake Authentication Protocol,CHAT)。ISP 可以
使用两者中的任何一个协议。但是对客户端而言,PAP 和 CHAP 的区
别仅在于用户名和密码放在那个配置文件中而已。 上面的例子中的
password 选项可以不必在服务器端信息配置文件中指定,而在以下两
个文件中指定:
/etc/ppp/chap-secrets
/etc/ppp/pap-secrets
这两个文件分别用于两种认证协议,并且具有相同的格式。如果你知
道你的 ISP 使用的认证方式,则只需要相应的密码文件。同时在两个
文件中指定也没有坏处。
密码文件中每一行为一项认证信息,格式如下:
username myisp password
其中 * 可以用来表示所有服务器。上面例子中的用户名和密码可以在
密码文件中这样指定:
# cat /etc/ppp/pap-secrets
8888888888 * 123456
选项配置文件
除了在服务器端信息配置文件中指定 pppd 的选项之外,还可以在相
应的选项配置文件中指定。配置文件 /usr/ppp/options 可以用于指
定适用于系统中所有 PPP 连接的选项。此外,对于特定的串行端口,
可以在配置文件 /usr/ppp/options.ttyname 中指定该端口之上的所
有 PPP 选项。其中 ttyname 为端口的名称。比如在我们的例子中,
可以在配置文件 /usr/ppp/options.sppptun 中指定所需的选项。其
中 sppptun 正是我们 PPPoE 协议所使用的端口。