第三十章 PPP

第三十章 PPP30.1. 简介30.2. 配置PPP30.2.1. 基本设置30.2.2. 高级配置30.2.2.1. PAP和CHAP身份验证30.2.2.2. 使用PPP网络地址转换功能30.2.3. 最终系统配置30.2.4. 使用 ppp30.2.5. 配置拨入服务30.3. PPP连接故障排除30.3.1. 检查设备节点30.3.2. 手动连接30.3.3. 调试30.4. 使用以太网PPP(PPPoE)30.4.1. 使用PPPoE服务标签30.4.2. 带有3Com®HomeConnect™ADSL调制解调器双链路的PPPoE30.5. 使用ATM上的PPP(PPPoA)30.5.1. 使用mpd30.5.2. 使用pptpclient

30.1. 简介

FreeBSD支持点对点(Point-to-Point,PPP)协议,该协议可用于使用拨号调制解调器建立网络或互联网连接。本章介绍如何在FreeBSD中配置基于调制解调器的通信服务。

阅读本章以了解: • 如何配置、使用和排除PPP连接故障。 • 如何设置以太网PPP(PPPoE)。 • 如何在ATM上设置PPP(PPPoA)。

在阅读本章之前: • 熟悉基本的网络术语。 • 了解拨号连接和PPP的基础知识和目的。

30.2. 配置PPP

FreeBSD提供了使用 ppp(8) 管理拨号PPP连接的内置支持。默认的FreeBSD内核支持tun,tun用于与调制解调器硬件交互。通过编辑至少一个配置文件来执行配置,并且提供包含示例的配置文件。最后, ppp 用于启动和管理连接。

为了使用PPP连接,需要以下项目:

• 互联网服务提供商(ISP)的拨号帐户。 • 拨号调制解调器。 • ISP的拨号号码。 • ISP分配的登录名和密码。 • 一个或多个DNS服务器的IP地址。通常,ISP会提供这些地址。如果没有,FreeBSD可以配置为使用DNS协商(negotiation.)。

如果缺少任何所需信息,请联系ISP。

以下信息可能由ISP提供,但并非必需:

本节的其余部分将演示如何为常见的PPP连接场景配置FreeBSD。所需的配置文件是 /etc/ppp/ppp.conf ,其他文件和示例可在 /usr/share/examples/ppp/ 中找到。

30.2.1. 基本设置

为了配置PPP连接,首先使用ISP的拨入信息编辑 /etc/ppp/ppp.conf 。此文件描述如下:

根据 ppp(8) 是手动启动还是自动启动,可能还需要创建包含以下行的 /etc/ppp/ppp.linkup 。在 -auto 模式下运行 ppp 时需要此文件。此文件在建立连接后使用。此时,IP地址将已分配,现在可以添加路由表条目。创建此文件时,请确保提供程序与 ppp.conf 第11行中显示的值匹配。

当在静态IP地址配置中“猜测”默认网关地址时,也需要此文件。在这种情况下,从 ppp.conf 中删除第17行,并使用上述两行创建 /etc/ppp/ppp.linkup 。此文件的更多示例可以在 /usr/share/examples/ppp/ 中找到。

默认情况下, ppp 必须以 root 身份运行。要更改此默认值,请将应运行 ppp 的用户的帐户添加到 /etc/group 中的 network 组中。

然后,使用 allow 允许用户访问 /etc/ppp/ppp.conf 中的一个或多个条目。例如,要只允许 fredmary 访问 provider: 条目,请在 provider: 部分添加此行:

要让指定用户访问所有条目,请将该行放在默认部分。

30.2.2. 高级配置

可以配置PPP以按需提供DNS和NetBIOS名称服务器地址。

为了在PPP 1.x版本中启用这些扩展,可以在 /etc/ppp/ppp.conf 的相关部分添加以下行。

对于PPP版本2及以上:

这将告诉客户端主名称服务器地址和辅助名称服务器地址,以及NetBIOS名称服务器主机。

在版本2及以上版本中,如果省略了 set dns 行,PPP将使用 /etc/resolv.conf 中的值。

30.2.2.1. PAP和CHAP身份验证

一些ISP设置了他们的系统,以便使用PAP或CHAP身份验证机制完成连接的身份验证部分。如果是这样的话,ISP在连接时不会给出 login: 提示,但会立即开始谈论PPP。

PAP的安全性不如CHAP,但安全性通常不是问题,因为密码虽然以明文形式与PAP一起发送,但只能通过串行线传输。crackers “eavesdrop”的空间不大。

必须进行以下更改:

30.2.2.2. 使用PPP网络地址转换功能

PPP能够使用内部NAT,而无需内核转移功能。此功能可以通过 /etc/ppp/ppp.conf 中的以下行启用:

或者,NAT可以通过命令行选项 -nat 启用。还有一个名为 ppp_nat/etc/rc.conf 旋钮,默认情况下是启用的。

使用此功能时,包含以下 /etc/ppp/ppp.conf 选项以启用传入连接转发可能很有用:

或者根本不信任外界

30.2.3. 最终系统配置

虽然现在配置了 ppp ,但仍需要对 /etc/rc.conf 进行一些编辑。

在此文件中从上到下工作,确保设置了 hostname= 行:

如果ISP提供了静态IP地址和名称,请使用此名称作为主机名。

查找 network_interfaces 变量。要将系统配置为按需拨号ISP,请确保将tun0设备添加到列表中,否则将其删除。

确保在 /etc/rc.conf 中使用以下行将路由器程序设置为 NO

routed 守护进程不启动很重要,因为 routed 往往会删除 ppp 创建的默认路由表条目。

确保 sendmail_flags 行不包含 -q 选项可能是一个好主意,否则 sendmail 会不时尝试进行网络查找,可能会导致机器拨出。试试这个:

缺点是每当ppp链接时, sendmail 都会被迫重新检查邮件队列。要实现自动化,请在 ppp.linkup 中包括 !bg

另一种方法是设置一个“dfilter”来阻止SMTP流量。有关更多详细信息,请参阅示例文件。

30.2.4. 使用 ppp

剩下的就是重新启动机器。重新启动后,请键入:

然后 dial provider 以启动PPP会话,或者,要配置 ppp 以在有出站流量且start_if.tun0不存在时自动建立会话,请键入:

ppp 程序在后台运行时可以与之对话,但前提是已设置了合适的诊断端口。为此,请在配置中添加以下行:

这将告诉PPP监听指定的UNIX®域套接字,在允许访问之前要求客户端提供指定的密码。名称中的 %d 将替换为正在使用的tun设备号。

一旦设置了套接字, pppctl(8) 程序就可以在希望操纵正在运行的程序的脚本中使用。

30.2.5. 配置拨入服务

【29.4. 拨号服务】很好地描述了如何使用 getty(8) 启用拨号服务。

getty 的另一种选择是 comms/mgetty+sendfax 端口,这是 getty 的一个更智能的版本,设计时考虑了拨号线路。

使用 mgetty 的优点是它可以主动与调制解调器通信,这意味着如果 /etc/ttys 中的端口关闭,调制解调器将不会接听电话。

mgetty 的后续版本(从0.99beta开始)也支持自动检测PPP流,允许客户端无脚本访问服务器。

参见 http://mgetty.greenie.net/doc/mgetty_toc.html 有关 mgetty 的更多信息。

默认情况下,comms/mgetty+sendfax 端口启用了 AUTO_PPP 选项,允许 mgetty 检测PPP连接的LCP阶段并自动生成PPP shell。但是,由于没有出现默认登录/密码序列,因此有必要使用PAP或CHAP对用户进行身份验证。

本节假设用户已成功编译并在其系统上安装了 comms/mgetty+sendfax 端口。

确保 /usr/local/etc/mgetty+sendfax/login.config 具有以下内容:

此命令将告诉 mgetty 对检测到的PPP连接运行 ppp-pap-dialup

创建一个名为 /etc/ppp/ppp-pap-dialup 的可执行文件,其中包含以下内容:

对于 /etc/ttys 中启用的每条拨号线路,在 /etc/ppp/ppp.conf 中创建一个相应的条目。这将与我们上面创建的定义愉快地共存。

使用此方法登录的每个用户都需要在 /etc/ppp/ppp.secret 中有一个用户名/密码,或者添加以下选项,通过 /etc/passwd 的PAP对用户进行身份验证。

要为某些用户分配静态IP号码,请将该号码指定为 /etc/ppp/ppp.secret 中的第三个参数。有关示例,请参阅 /usr/share/examples/ppp/ppp.secret.sample

30.3. PPP连接故障排除

本节介绍在调制解调器连接上使用PPP时可能出现的一些问题。一些ISP显示 pssword 提示,而另一些则显示密码。如果 ppp 脚本没有相应地编写,登录尝试将失败。调试 ppp 连接的最常见方法是按照本节所述手动连接。

30.3.1. 检查设备节点

使用自定义内核时,请确保在内核配置文件中包含以下行:

uart设备已经包含在 GENERIC 内核中,因此在这种情况下不需要额外的步骤。只需使用以下命令检查调制解调器设备的 dmesg 输出:

这应该显示一些关于uart设备的相关输出。这些是我们需要的COM端口。如果调制解调器的作用类似于标准串行端口,则应将其列在uart1或COM2上。如果是这样,则不需要重新构建内核。匹配时,如果调制解调器在uart1上,则调制解调器设备将是 /dev/cuau1

30.3.2. 手动连接

通过手动控制 ppp 连接到互联网是快速、简单的,也是调试连接或获取ISP如何处理 ppp 客户端连接信息的好方法。让我们从命令行启动PPP。请注意,在我们所有的示例中,我们将使用 example 作为运行PPP的机器的主机名。要启动 ppp

第二个命令将调制解调器设备设置为cuau1。

这将连接速度设置为115200 kbps。

这个命令告诉 ppp 配置解析程序并将名称服务器行添加到 /etc/resolv.conf 。如果 ppp 不能确定主机名,可以稍后手动设置。

这将切换到 terminal 模式,以便手动控制调制解调器。

使用 at 初始化调制解调器,然后使用 atdt 和ISP的号码开始拨号过程。

确认连接,如果我们遇到任何与硬件无关的连接问题,我们将尝试解决这些问题。

在此提示下,返回ISP提供的用户名提示。

在此提示下,使用ISP提供的密码进行回复。就像登录FreeBSD一样,密码不会回声。

根据ISP的不同,此提示可能不会出现。如果是这样,它会询问是在提供者上使用shell还是启动 ppp 。在这个例子中,选择 ppp 是为了建立互联网连接。

请注意,在这个例子中,第一个 p 被大写。这表明我们已成功连接到ISP。

我们已成功通过ISP的身份验证,正在等待分配的IP地址。

我们已就IP地址达成协议,并成功完成了连接。

在这里,我们添加了默认路由,我们需要在与外界通信之前这样做,因为目前唯一建立的连接是与对等体的连接。如果由于现有路线而失败,请放置一个bang字符 !add 的前面。或者,在实际连接之前设置此选项,它将相应地协商新的路由。

如果一切顺利,我们现在应该有一个与互联网的活动连接,可以使用 CTRL+z 将其抛到后台。如果 PPP 返回到 ppp ,则连接已丢失。知道这一点很好,因为它显示了连接状态。大写的 P 表示与ISP的连接,小写的 p 表示连接已丢失。

30.3.3. 调试

如果无法建立连接,请使用 set ctsrts off 将硬件流CTS/RTS关闭。这主要是在连接到某些支持PPP的终端服务器时发生的情况,PPP在尝试向通信链路写入数据时挂起,并等待可能永远不会到来的清除发送(Clear To Send,CTS)信号。使用此选项时,请包含 set accmap ,因为可能需要它来击败依赖于从头到尾传递某些字符的硬件,大多数时候是XON/XOFF。有关此选项及其使用方法的更多信息,请参阅 ppp(8)

较旧的调制解调器可能需要 set parity even 。默认情况下,奇偶校验设置为 none ,但在较旧的调制解调器上,奇偶校验用于流量大幅增加的错误检查。

PPP可能不会返回到命令模式,这通常是一个协商错误,ISP正在等待协商开始。此时,使用 ~p 将强制ppp开始发送配置信息。

如果登录提示从未出现,则很可能需要PAP或CHAP身份验证。要使用PAP或CHAP,请在进入终端模式之前向PPP添加以下选项:

其中 myusername 应替换为ISP分配的用户名。

其中 mypassword 应替换为ISP分配的密码。

如果已建立连接,但似乎找不到任何域名,请尝试 ping(8) 一个IP地址。如果有100%(100%)的数据包丢失,则很可能没有分配默认路由。仔细检查连接过程中是否设置了 add default HISADDR 。如果可以连接到远程IP地址,则可能未将解析器地址添加到 /etc/resolv.conf 中。此文件应如下所示:

其中 x.x.x.xy.y.y.y 应替换为ISP DNS服务器的IP地址。

要配置 syslog(3) 为PPP连接提供日志记录,请确保 /etc/syslog.conf 中存在此行:

30.4. 使用以太网PPP(PPPoE)

本节介绍如何设置以太网PPP(PPP over Ethernet,PPPoE)。

以下是一个工作的 ppp.conf 示例:

作为 root 运行:

将以下内容添加到 /etc/rc.conf

30.4.1. 使用PPPoE服务标签

有时需要使用服务标签来建立连接。服务标签用于区分连接到给定网络的不同PPPoE服务器。

ISP提供的文档中应包含任何所需的服务标签信息。

作为最后的手段,可以尝试安装 net/rr-pppoe 包或端口。但是请记住,这可能会对调制解调器进行去编程并使其无用,所以在这样做之前要三思而后行。只需安装调制解调器附带的程序即可。然后,从程序中访问系统菜单。配置文件的名称应列在那里。通常是ISP。

配置文件名称(服务标签)将在 ppp.conf 中的PPPoE配置条目中用作 set device 的提供者部分。有关详细信息,请参阅 ppp(8) 。它应该看起来像这样:

不要忘记将 xl1 更改为以太网卡的正确设备。

不要忘记将 ISP 更改为配置文件。

如需更多信息,请参阅Renaud Waldura的《DSL上FreeBSD更便宜的宽带》。

30.4.2. 带有3Com®HomeConnect™ADSL调制解调器双链路的PPPoE

此调制解调器不遵循RFC 2516中定义的PPPoE规范。

为了使FreeBSD能够与此设备通信,必须设置sysctl。这可以在启动时通过更新 /etc/sysctl.conf 自动完成:

或者可以使用以下命令立即完成:

不幸的是,由于这是一个系统范围的设置,因此无法同时与正常的PPPoE客户端或服务器和3Com®HomeConnect™ADSL调制解调器进行通信。

30.5. 使用ATM上的PPP(PPPoA)

下面描述了如何在ATM上设置PPP(PPP over ATM,PPPoA)。PPPoA是欧洲DSL提供商的热门选择。

30.5.1. 使用mpd

mpd 应用程序可用于连接各种服务,特别是PPTP服务。它可以使用 net/mpd5 包或端口安装。许多ADSL调制解调器要求在调制解调器和计算机之间创建PPTP隧道。

安装后,配置mpd以适应提供商的设置。该端口放置了一组示例配置文件,这些文件在 /usr/local/etc/mpd/ 中有很好的记录。配置mpd的完整指南以HTML格式提供在 /usr/ports/shared/doc/mpd/ 中。这是一个使用mpd连接到ADSL服务的示例配置。配置分布在两个文件中,首先是 mpd.conf

① 用于向ISP进行身份验证的用户名。 ② 用于向ISP进行身份验证的密码。

有关要建立的一个或多个链接的信息,请参阅mpd.links。下面给出了上述示例的mpd.links示例:

① 运行mpd的FreeBSD计算机的IP地址。 ② ADSL调制解调器的IP地址。阿尔卡特SpeedTouch™Home默认为10.0.0.138。

通过以 root 身份发出以下命令,可以轻松初始化连接:

要查看连接状态,请执行以下操作:

建议使用mpd连接FreeBSD的ADSL服务。

30.5.2. 使用pptpclient

也可以使用FreeBSD通过 net/pptpclient 连接到其他PPPoA服务。

要使用 net/pptpclient 连接到DSL服务,请安装端口或包,然后编辑 /etc/ppp/ppp.conf 。下面给出了 ppp.conf 的示例部分。有关 ppp.conf 选项的更多信息,请参阅 ppp(8)

① DSL提供商的用户名。 ② 帐户的密码。

这将为到DSL路由器的PPP会话打开一个隧道。以太网DSL调制解调器有一个预配置的LAN IP地址可供连接。对于阿尔卡特SpeedTouch™Home,此地址为 10.0.0.138 。路由器的文档应列出设备使用的地址。要打开隧道并启动PPP会话,请执行以下操作:

将创建一个tun虚拟隧道设备,用于pptp和ppp进程之间的交互。一旦返回提示,或者pptp进程确认了连接,请检查隧道:

如果连接失败,请检查路由器的配置,通常可以使用web浏览器访问路由器。此外,请检查 pptp 的输出和日志文件 /var/log/ppp.log 的内容以获取线索。