FreeBSD 提供了内置支持,用于使用 ppp(8)管理拨号 PPP 连接。默认的 FreeBSD 内核提供了用于与调制解调器硬件交互的 tun 支持。配置是通过编辑至少一个配置文件来完成的,并提供了包含示例的配置文件。最后,ppp 用于启动和管理连接。
为了使用 PPP 连接,需要以下项目:
与互联网服务提供商(ISP)拥有拨号账户。
拨号调制解调器。
互联网服务提供商的拨号号码。
由互联网服务提供商分配的登录名和密码。
一个或多个 DNS 服务器的 IP 地址。通常,互联网服务提供商提供这些地址。如果没有提供,FreeBSD 可以配置为使用 DNS 协商。
如果缺少任何必需的信息,请联系 ISP。
ISP 可以提供以下信息,但不是必要的:
默认网关的 IP 地址。如果此信息未知,则 ISP 将在连接设置期间自动提供正确的值。在 FreeBSD 上配置 PPP 时,此地址被称为 HISADDR。
子网掩码。如果 ISP 没有提供子网掩码,在 ppp(8)配置文件中将使用 255.255.255.255。* 如果 ISP 分配了静态 IP 地址和主机名,则应将其输入到配置文件中。否则,在连接设置期间将自动提供此信息。
本节的其余部分演示了如何为常见的 PPP 连接场景配置 FreeBSD。所需的配置文件是/etc/ppp/ppp.conf,其他文件和示例可在/usr/share/examples/ppp/中找到。
要配置 PPP 连接,首先要编辑/etc/ppp/ppp.conf,输入 ISP 的拨号信息。该文件的说明如下:
行 1
标识 default 条目。当运行 ppp 时,此条目中的命令(第 2 行至第 9 行)会被自动执行。
行 2
为测试连接启用详细记录参数。若配置正常工作,应将此行减少到:
行 3
显示运行在连接另一侧的 PPP 软件的版本。
第 4 行
识别调制解调器连接的设备,其中 COM1 是/dev/cuau0,COM2 是/dev/cuau1。
第 5 行
设置连接速度。如果 115200 在旧调制解调器上无法使用,请尝试使用 38400。
第 6 和第 7 行
作为期望-发送语法编写的拨号字符串。有关更多信息,请参考 chat(8)。
请注意,如果行尾是 \,此命令会延续到下一行以提高可读性。ppp.conf 中的任何命令都可能会这样做。
第 8 行
设置链接的空闲超时时间(以秒为单位)。
第 9 行
指示对等方确认 DNS 设置。如果本地网络正在运行自己的 DNS 服务器,则应该将此行注释掉,即在行的开头添加一个 #,或将其删除。
第 10 行
用于提高可读性的空白行。ppp(8)会忽略空白行。
第 11 行
标识名为 provider 的条目。这可以更改为 ISP 的名称,以便可以使用 load ISP 启动连接。
第 12 行
使用 ISP 的电话号码。可以使用冒号( : )或竖线字符( | )作为分隔符指定多个电话号码。要循环拨打这些号码,使用冒号。要始终首先尝试拨打第一个号码,只有在第一个号码失败时才使用其他号码,请使用竖线字符。始终在引号之间括起整组电话号码( " )以防止拨号失败。
第 13&14 行
使用 ISP 的用户名和密码。
第 15 行
设置连接的默认空闲超时时间(以秒为单位)。在此示例中,连接将在 300 秒的不活动后自动关闭。要防止超时,请将此值设置为零。
Line 16
Sets the interface addresses. The values used depend upon whether a static IP address has been obtained from the ISP or if it instead negotiates a dynamic IP address during connection.
If the ISP has allocated a static IP address and default gateway, replace x.x.x.x with the static IP address and replace y.y.y.y with the IP address of the default gateway. If the ISP has only provided a static IP address without a gateway address, replace y.y.y.y with 10.0.0.2/0
.
如果每次连接时 IP 地址都会更改,请将此行更改为以下值。这告诉 ppp(8) 使用 IP 配置协议(IPCP)来协商动态 IP 地址:
第 17 行
将此行保持不变,因为它将默认路由添加到网关。HISADDR 将自动替换为第 16 行指定的网关地址。重要的是这行出现在第 16 行之后。
根据 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 中一个或多个条目的权限。例如,要将 fred 和 mary 的权限限制为仅限于 provider: 条目,将以下行添加到 provider: 部分:
要将指定的用户访问权限扩展到所有条目,请将该行放在 default 部分。
配置 PPP 以按需提供 DNS 和 NetBIOS 名称服务器地址是可能的。
要启用 PPP 版本 1.x 的这些扩展,可能需要将以下行添加到/etc/ppp/ppp.conf 的相关部分。
对于 PPP 版本 2 及更高版本:
这将告诉客户端主要和辅助名称服务器地址,以及 NetBIOS 名称服务器主机。
在 2 版本及以上,如果省略 set dns 行,则 PPP 将使用在/etc/resolv.conf 中找到的数值。
一些 ISP 设置其系统,使连接的认证部分使用 PAP 或 CHAP 认证机制之一完成。如果是这种情况,ISP 在连接时不会给出 login: 提示,而是立即开始进行 PPP 通信。
PAP 比 CHAP 不够安全,但在这里通常安全性不是问题,因为尽管使用 PAP 发送密码是明文的,但密码只是通过串行线传输。黑客很难“窃听”。
必须进行以下修改:
第 13 行
此行指定了 PAP/CHAP 用户名。请插入正确的 MyUserName 值。
第 14 行
这一行指定了 PAP/CHAP 密码。插入 MyPassword 的正确值。你可能希望添加另一行,比如:
或者
以便明确表明这是意图,但 PAP 和 CHAP 默认都被接受。
第 15 行
当使用 PAP 或 CHAP 时,ISP 通常不需要登录到服务器。因此,请禁用“设置登录”字符串。
PPP 具有在没有内核转发功能的情况下使用内部 NAT 的能力。可以通过在/etc/ppp/ppp.conf 中添加以下行来启用此功能:
或者,可以通过命令行选项 -nat 来启用 NAT。还有一个名为 ppp_nat 的/etc/rc.conf 开关,默认情况下已启用。
使用此功能时,可能需要包含以下/etc/ppp/ppp.conf 选项以启用传入连接转发:
要么根本不信任外面
虽然 ppp 现在已经配置好了,但仍然需要对 /etc/rc.conf 进行一些编辑。
从文件顶部开始工作,确保设置 hostname= 行:
如果 ISP 提供了静态 IP 地址和名称,请使用此名称作为主机名。
查找 network_interfaces 变量。要配置系统在需要时拨号 ISP,请确保将 tun0 设备添加到列表中,否则将其移除。
此脚本在网络配置时间执行,以自动模式启动 ppp 守护程序。如果此计算机充当网关,请考虑包含 -alias。有关详细信息,请参阅手册页。
请确保路由器程序设置为 NO,在 /etc/rc.conf 中包含以下行:
重要的是不启动 routed 守护程序,因为 routed 倾向于删除由 ppp 创建的默认路由表条目。
可能是一个好主意确保 sendmail_flags 行不包括 -q 选项,否则 sendmail 会不时尝试进行网络查找,可能会导致你的机器拨号。你可以尝试:
不利之处是 sendmail 被迫在每次 ppp 链接时重新检查邮件队列。要自动化此过程,请在 ppp.linkup 中包括 !bg :
另一种选择是设置一个“dfilter”来阻止 SMTP 交通。有关更多详细信息,请参考示例文件。
唯一剩下的就是重启机器。重启后,要么输入:
然后 dial provider 来启动 PPP 会话,或者,要配置 ppp 来在出站流量时自动建立会话并在 start_if.tun0 不存在时开始,输入:
当 ppp 程序在后台运行时,可以进行交互,但前提是必须设置适当的诊断 port。要做到这一点,请将以下行添加到配置中:
这将告诉 PPP 监听指定的 UNIX® 域套接字,在允许访问之前要求客户端输入指定的密码。名称中的 %d 将被当前使用的 tun 设备号替换。
若套接字设置完成,pppctl(8) 程序可用于希望操作正在运行的程序的脚本。
“拨号服务”提供了使用 getty(8)启用拨号服务的良好说明。
一个替代方案是 comms/mgetty+sendfax port),一种专为拨号线路而设计的更智能版本。
使用 mgetty 的优点是它可以与调制解调器进行积极通信,这意味着如果在 /etc/ttys 中关闭port,调制解调器将不会接听电话。
较新版本的 mgetty (从 0.99beta 开始)还支持自动检测 PPP 流,允许客户端无需脚本即可访问服务器。
更多关于 mgetty 的信息,请参考 http://mgetty.greenie.net/doc/mgetty_toc.html。
默认情况下,comms/mgetty+sendfax port 自带 AUTO_PPP 选项,允许 mgetty 检测 PPP 连接的 LCP 阶段,并自动产生一个 ppp shell。然而,由于默认的登录/密码序列不出现,因此需要使用 PAP 或 CHAP 对用户进行认证。
本节假定用户已成功编译并安装了 comms/mgetty+sendfax port 到他的系统。
确保/usr/local/etc/mgetty+sendfax/login.config 具有以下内容:
这告诉 mgetty 运行 ppp-pap-dialup 以侦测 PPP 连接。
创建一个名为/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 获取示例。
在本节中,许多文件示例显示行号。这些行号是为了更容易跟踪讨论而添加的,并不是要放在实际文件中。 编辑配置文件时,正确的缩进非常重要。以 : 结尾的行应从第一列(行的开头)开始,而所有其他行都应按照显示的方式使用空格或制表符进行缩进。