虽然配置 PPP 拨号连接到像互联网这样的网络是最常见的应用,但你们中有些人有更高级的需求。在本节中,我们将讨论一些在 Linux 下使用 PPP 可能实现的高级配置。
以服务器模式运行 pppd 只是配置一个串行 tty 设备,以便在收到传入数据呼叫时使用适当的选项调用 pppd。一种方法是创建一个特殊的帐户,例如 ppp,并为其指定一个脚本或程序作为登录 shell,该 shell 使用这些选项调用 pppd。或者,如果您打算支持 PAP 或 CHAP 身份验证,则可以使用 mgetty 程序来支持您的调制解调器并利用其“/AutoPPP/”功能。
要使用登录方法构建服务器,您需要向您的以下文件添加类似下面这样的行:/etc/passwd文件:[1]
ppp:x:500:200:Public PPP Account:/tmp:/etc/ppp/ppplogin |
ppp:!:10913:0:99999:7::: |
当然,您使用的 UID 和 GID 取决于您希望哪个用户拥有连接以及您如何创建它。您还需要使用 passwd 命令为提及的帐户设置密码。
ppplogin 脚本可能如下所示:
#!/bin/sh # ppplogin - script to fire up pppd on login mesg n stty -echo exec pppd -detach silent modem crtscts |
mesg 命令禁止其他用户使用例如 write 命令写入 tty。 stty 命令关闭字符回显。此命令是必要的;否则,对等方发送的所有内容都将被回显给它。给出的最重要的 pppd 选项是 –detach,因为它阻止 pppd 从控制 tty 分离。如果我们不指定此选项,它将转到后台,导致 shell 脚本退出。这反过来会导致串行线路挂断并且连接断开。 silent 选项使 pppd 等待,直到它收到来自呼叫系统的数据包,然后才开始发送。此选项可防止在呼叫系统启动其 PPP 客户端速度较慢时发生传输超时。 modem 选项使 pppd 驱动串行端口的调制解调器控制线。当将 pppd 与调制解调器一起使用时,您应始终启用此选项。crtscts选项启用硬件握手。
除了这些选项之外,您可能还希望强制某种类型的身份验证,例如,通过指定auth在 pppd 的命令行或全局选项文件中。手册页还讨论了更多具体选项,用于打开和关闭各个身份验证协议。
如果您希望使用 mgetty,您只需配置 mgetty 以支持您的调制解调器连接到的串行设备(有关详细信息,请参阅 第 4.6.1 节”),使用其适当的选项为 PAP 或 CHAP 身份验证配置 pppd。options文件,最后,将类似于以下内容的部分添加到您的/etc/mgetty/login.config文件
# Configure mgetty to automatically detect incoming PPP calls and invoke # the pppd daemon to handle the connection. # /AutoPPP/ - ppp /usr/sbin/pppd auth -chap +pap login |
第一个字段是一段特殊的魔术代码,用于检测传入呼叫是否为 PPP 呼叫。您不得更改此字符串的大小写;它区分大小写。第三列是某人登录后出现在 who 列表中的用户名。该行的其余部分是要调用的命令。在我们的示例中,我们确保需要 PAP 身份验证,禁用了 CHAP,并指定系统passwd文件应用于验证用户身份。这可能与您想要的内容类似。请记住,如果您愿意,可以在options文件或命令行中指定选项。
这是要在您的机器上启用 PPP 拨号功能的一小段任务清单以及您应该执行它们的顺序。在继续下一步之前,请确保每个步骤都有效。
将调制解调器配置为自动应答模式。在 Hayes 兼容的调制解调器上,这是使用如下命令执行的:ATS0=3。如果您要使用 mgetty 守护程序,则不需要这样做。
使用 getty 类型的命令配置串行设备以应答传入呼叫。常用的 getty 变体是 mgetty。
考虑身份验证。您的呼叫者将使用 PAP、CHAP 还是系统登录进行身份验证?
按照本节中的描述将 pppd 配置为服务器。
考虑路由。您是否需要为呼叫者提供网络路由?可以使用ip-up脚本执行路由。
当需要通过链路传输 IP 流量时,按需拨号会导致您的电话调制解调器拨号并建立与远程主机的连接。当您无法将电话线永久切换到 Internet 提供商时,按需拨号最有用。例如,您可能需要支付按时计费的本地电话费,因此仅在需要时打开电话线并在不使用 Internet 时断开连接可能会更便宜。
传统的 Linux 解决方案使用 diald 命令,该命令运行良好,但配置起来相当棘手。 PPP 守护程序的 2.3.0 及更高版本内置了对按需拨号的支持,并且配置非常简单。您也必须使用现代内核才能使其工作。任何较新的 2.0 内核都可以正常工作。
要为按需拨号配置 pppd,您只需将选项添加到您的options文件或 pppd 命令行。下表总结了与按需拨号相关的选项
选项 | 描述 |
---|---|
demand | 此选项指定应将 PPP 链路置于按需拨号模式。将创建 PPP 网络设备,但connect命令在本地主机传输数据报之前不会使用。此选项对于按需拨号工作是必需的。 |
active-filter expression | 此选项允许您指定哪些数据包应被视为活动流量。任何与指定规则匹配的流量都将重新启动按需拨号空闲计时器,确保 pppd 在关闭链路之前再次等待。过滤器语法借用自 tcpdump 命令。默认过滤器匹配所有数据报。 |
holdoff n | 此选项允许您指定在链路终止时重新连接此链路之前要等待的最短时间(以秒为单位)。如果连接在 pppd 认为它正在积极使用时失败,则将在该计时器到期后重新建立连接。此计时器不适用于空闲超时后的重新连接。 |
idle n | 如果配置了此选项,则当此计时器到期时,pppd 将断开链路。空闲时间以秒为单位指定。每个新的活动数据包都将重置计时器。 |
demand holdoff 60 idle 180 |
持久拨号是拥有与网络永久拨号连接的人员想要使用的功能。按需拨号和持久拨号之间存在细微差别。使用持久拨号,连接会在 PPP 守护程序启动后立即自动建立,并且当支持链路的电话呼叫失败时,持久性方面就会发挥作用。持久拨号通过在连接失败时自动重建连接来确保链路始终可用。
您可能很幸运不必支付电话费;也许它们是本地且免费的,或者可能是您的公司支付的。在这种情况下,持久拨号选项非常有用。如果您确实需要支付电话费,那么您必须稍微小心。如果您按时计费的方式支付电话费,那么持久拨号几乎肯定不是您想要的,除非您非常确定您会每天 24 小时相当稳定地使用连接。如果您确实支付电话费,但它们不是按时计费的,则您需要小心保护自己免受可能导致调制解调器无休止地重拨的情况的影响。 pppd 守护程序提供了一个选项,可以帮助减少此问题的影响。
要启用持久拨号,您必须在您的一个 pppd 选项文件中包含 persist 选项。仅包含此选项是您需要做的全部工作,即可使 pppd 在链路失败时自动调用 connect 选项指定的命令来重建连接。如果您担心调制解调器重拨速度过快(在连接另一端的调制解调器或服务器故障的情况下),您可以使用 holdoff 选项来设置 pppd 在尝试重新连接之前将等待的最短时间。此选项不会解决故障导致您浪费电话费的问题,但至少可以减少其中一个故障的影响。
一个典型的配置可能具有如下所示的持久拨号选项:
persist holdoff 600 |
可以将持久拨号与按需拨号结合使用,使用 idle 在链路空闲一段时间后断开链路。我们怀疑很多用户会想要这样做,但如果您想进一步了解,pppd 手册页中简要描述了这种情况。
[1] | useradd 或 adduser 实用程序(如果您有)将简化此任务。 |