27.2. 设定PPP

FreeBSD 内置了 PPP 功能,可以使用 ppp(8) 管理拨号连接。FreeBSD 默认内核提供了 tun,用于与调制解调器硬件进行交互。可通过配置文件对其进行配置。最后,ppp用于启动和管理连接。

为了使用PPP连接,需要以下信息:

以上信息有不明确的请联系您的ISP

以下信息ISP可能会提供,但也可能不需要:

本章节的其他部分将介绍 PPP 的常用配置。所需的配置文件位于/etc/ppp/ppp.conf,,其他示例位于/etc/ppp/ppp.conf

注意:

在本节中,许多文件实例都显示了行号。添加这些行号是为了更容易跟上讨论,并不是要放在实际文件中。

编辑配置文件是,适当的缩进很有必要。如基础配置章节中的配置文件所示,行首无空格,且以:结尾的行,其下一行应使用空格或 tab 缩进。

27.2.1. 基础设定

为了配置PPP连接,首先编辑/etc/ppp/ppp.conf,并添加ISP的拨号信息。文件内容如下:

1     default:
2       set log Phase Chat LCP IPCP CCP tun command
3       ident user-ppp VERSION
4       set device /dev/cuau0
5       set speed 115200
6       set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
7                 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
8       set timeout 180
9       enable dns
10
11    provider:
12      set phone "(123) 456 7890"
13      set authname foo
14      set authkey bar
15      set timeout 300
16      set ifaddr x.x.x.x/0 y.y.y.y/0 255.255.255.255 0.0.0.0
17      add default HISADDR
第一行:

标识default条目。当运行ppp时,该条目中的命令(第2行到第9行)会自动执行。

第二行:

启用详细日志记录参数以测试连接。一旦配置工作令人满意,此行应修改为:

set log phase tun
第三行:

显示ppp(8)到连接另一端运行的PPP软件的版本。

第四行:

标识调制解调器所连接的设备,其中COM1/dev/cuau0COM2/dev/cuau1

第五行:

设置连接速度。如果115200在老调制解调器上不生效,将其替换为38400试试。

第六行和第七行:

以 expect-send 语法写成的拨号字符串。详情请参考 chat(8)

注意,为了可读性,这条命令会继续到下一行。在ppp.conf中的任何命令都可以这样做,如果该行的最后一个字符是\

第八行:

设置超时时间,单位为秒。

第九行:

指示peer确认DNS设置。如果本地网络正在运行自己的DNS服务器,则应将这一行注释掉,在行首添加#,或者删除。

第 10 行:

空行是为了提高可读性。空行将被ppp(8)忽略。

第 11 行:

标记该条目为 provider。这可以更改为ISP的名称,以便load ISP可用于启动连接。

第 12 行:

Use the phone number for the ISP. Multiple phone numbers may be specified using the colon (:) or pipe character (|) as a separator. To rotate through the numbers, use a colon. To always attempt to dial the first number first and only use the other numbers if the first number fails, use the pipe character. Always enclose the entire set of phone numbers between quotation marks (") to prevent dialing failures.

第 13 & 14 行:

使用 ISP 提供的用户名和密码。

第 15 行:

设置连接的默认超时时间(单位为秒)。在此示例中,连接将在 300 秒不活动后自动关闭。为了防止超时,将此值设置为零。

第 16 行:

设置接口地址。使用的值取决于是否从ISP获得静态IP地址,还是在连接过程中接受分配的IP地址。

如果ISP已分配了静态IP地址和默认网关,则将xxxx替换为静态IP地址,然后进行替换yyyy为默认网关的IP地址。如果ISP仅提供了没有网关地址的静态IP地址,则将 yyyy替换为10.0.0.2/0

如果 IP地址在建立连接时会改变,请将此行改为以下值。这将告诉 ppp(8)使用 IP配置协议 (IPCP) 来协商动态的 IP地址:

set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255 0.0.0.0
第 17 行:

保留这一行,因为它为网关添加了一个默认路由。HISADDR 将被自动替换为第16行中指定的网关地址。重要的是,这一行出现在第16行之后。

取决于ppp(8)是手动还是自动启动,可能还需要创建一个/etc/ppp/ppp.linkup,其中包含以下几行。当在-auto模式下运行ppp时,这个文件是必需的。这个文件是在连接建立后使用的。这时,IP地址将被分配,现在可以添加路由表条目了。创建此文件时,请确保providerppp.conf第11行中显示的值一致。

provider:
      add default HISADDR

当静态IP地址配置中的默认网关地址被guessed时,也需要这个文件。在这种情况下,从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:部分添加这一行:

allow users fred mary

若需给指定用户访问所有条目的权限,请将此行放在default 章节。

27.2.2. 高级配置

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

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

enable msext
set ns 203.14.100.1 203.14.100.2
set nbns 203.14.100.5

对于PPP v2 及以上的版本:

accept dns
set dns 203.14.100.1 203.14.100.2
set nbns 203.14.100.5

该配置设置了客户端的首选 DNS 和 备选 DNS,以及 NetBIOS 域名主机。

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

27.2.2.1. PAP 与 CHAP 认证

Some ISPs set their system up so that the authentication part of the connection is done using either of the PAP or CHAP authentication mechanisms. If this is the case, the ISP will not give a login: prompt at connection, but will start talking PPP immediately.

PAP 的安全性不如 CHAP,但安全性通常不是问题,因为密码虽然以纯文本形式随 PAP 发送,但仅通过串行线路传输。其他人没有太多空间可以窃听

必须进行以下更改:

13      set authname MyUserName
14      set authkey MyPassword
15      set login
第 13 行:

此行指定了 PAP/CHAP 的用户名,使用正确参数替换 MyUserName

第 14 行:

这一行指定了PAP/CHAP密码。插入MyPassword的正确值。你可能需要添加一个额外的行,例如:

16      accept PAP

16      accept CHAP

以表明这一点的意图,但PAP和CHAP都是默认接受的。

第 15 行:

使用 PAP 或 CHAP 时,通常不需要登入到 ISP 服务器。此时将set login设置为禁用。

27.2.2.2. 使用PPP网络位址转译功能

PPP有使用内部NAT的能力,不需要内核转移功能。这个功能可以通过向/etc/ppp/ppp.conf文件添加以下行启用:

nat enable yes

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

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

nat port tcp 10.0.0.2:ftp ftp
nat port tcp 10.0.0.2:http http

或拒绝所有进入流量

nat deny_incoming yes

27.2.3. 最终系统设定

ppp 配置完成后还需在 /etc/rc.conf 加入以下行。

从此文件中的自上而下工作,请确保设置了hostname=行:

hostname="foo.example.com"

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

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

network_interfaces="lo0 tun0"
ifconfig_tun0=

注意:

ifconfig_tun0变量应该是空的,然后创建一个名为/etc/start_if.tun0的文件。这个文件应该包含以下一行:

ppp -auto mysystem

这个脚本在配置网络时执行,以自动模式启动 ppp 守护进程。如果这台机器作为网关,请考虑包含-alias。更多详情,请参阅手册页面。

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

router_enable="NO"

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

可能是个好主意,确保sendmail_flags行中没有包含-q选项,否则sendmail会时不时地尝试进行网络查询,可能会导致你的机器拨出。你可以尝试一下:

sendmail_flags="-bd"

缺点是sendmail在 ppp 链接时,会被迫重新检查邮件队列。要想自动完成,将 !bg 添加到 ppp.linkup

1     provider:
2       delete ALL
3       add 0 0 HISADDR
4       !bg sendmail -bd -q30m

另一种方法是设置一个dfilter来阻止SMTP流量。更多详情请参考示例文件。

27.2.4. 使用ppp

重启后配置不会保存,重启后输入:

# ppp

然后dial provider启动PPP会话,如果要配置ppp在有外呼流量且start_if.tun0不存在时自动建立会话,请键入:

# ppp -auto provider

ppp程序在后台运行时,可以与ppp程序进行对话,但前提是要设置一个合适的诊断端口。要做到这一点,在配置中添加以下一行:

set server /var/run/ppp-tun%d DiagnosticPassword 0177

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

设置套接字后,可以在脚本中使用pppctl(8)控制正在运行的程序。

27.2.5. 设定拨入服务

第 26.4 节 “拨入服务” 中介绍了 getty(8) 如何启用拨号服务。

getty 的替代品是 comms/mgetty+sendfax,一个更智能的 getty 替代品。

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

从 0.99 beta 开始,mgetty还支持自动检测PPP流,允许客户端不使用访问服务器。

更多关于 mgetty 的消息请访问http://mgetty.greenie.net/doc/mgetty_toc.html

默认情况下, comms/mgetty+sendfax port 在编译时启用了 AUTO_PPP 选项,它使 mgetty 能够检测 PPP 连接的 LCP 状态, 并自动产生 PPP shell。 不过, 由于在默认配置中的 login/password 序列并不出现, 因此, 就必须使用 PAP 或 CHAP 来严重用户身份。

本节假设用户已经在自己的系统中成功从 Port 中安装了 comms/mgetty+sendfax

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

/AutoPPP/ -     - /etc/ppp/ppp-pap-dialup

这告诉mgetty运行ppp-pap-dialup,以检测PPP连接。

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

#!/bin/sh
exec /usr/sbin/ppp -direct pap$IDENT

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

pap:
  enable pap
  set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40
  enable proxy

每个使用此方法登录的用户都需要在/etc/ppp/pppp.secret中拥有一个用户名/密码,或者在/etc/ppp.secret中添加以下选项来通过PAP认证用户。

enable passwdauth

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

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.