28.3. 使用内核级PPP
上一页 | 第 28 章 PPP 和 SLIP | 下一页

## 28.3. 使用内核级PPP

Parts originally contributed by Gennady B. Sorokopud 和 Robert Huff.

### 警告:

这节内容只在 FreeBSD 7.X 上可用。

### 28.3.1. 设立内核级PPP

在开始配置 PPP 之前， 请确认 `pppd` 已经存放在 `/usr/sbin` 中， 并且 `/etc/ppp` 目录是存在的。

`pppd`能在两种模式下工作：

1. 作为一个 “客户” — 您要通过PPP串行线或modem线把您的机器连接到互联网上。

2. 作为“服务器” —计算机已经位于网络上， 且被用于通过PPP与其它计算机连接。

两种情况您都需要设立一个选项文件， (`/etc/ppp/options` 或者是 `~/.ppprc` 如果您的计算机有多个用户使用PPP)。

您还需要一些modem/serial软件(`comms/kermit`就很适合)， 使您能够拨号并与远程主机建立连接。

### 28.3.2. 使用`pppd`作为客户端

Based on information provided by Trev Roydhouse.

下面这个 `/etc/ppp/options`选项文件能够被用来与CISCO终端服务器的 PPP线连接。

crtscts # enable hardware flow control modem # modem control line noipdefault # remote PPP server must supply your IP address # if the remote host does not send your IP during IPCP # negotiation, remove this option passive # wait for LCP packets domain ppp.foo.com # put your domain name here :`remote_ip` # put the IP of remote PPP host here # it will be used to route packets via PPP link # if you didn't specified the noipdefault option # change this line to `local_ip`:`remote_ip` defaultroute # put this if you want that PPP server will be your # default router

连接：

1. 使用 Kermit (或其他 modem 程序来拨号)， 然后输入您的用户名和口令 (或在远程主机上启用 PPP 所需的其他信息)。

2. 退出 Kermit (并不挂断连接)。

3. 键入下面这行：

   `#` `/usr/sbin/pppd `/dev/tty01` `19200``

   一定要使用正确的速度和设备名。

现在您的计算机已经用PPP连接。 如果连接失败， 您可在文件 `/etc/ppp/options` 中添加 `debug` 选项， 并查看控制台信息以跟踪问题。

下面这个`/etc/ppp/pppup`脚本能自动完成这三个步骤：

#!/bin/sh pgrep -l pppd pid=`pgrep pppd` if [ "X${pid}" != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi ifconfig ppp0 down ifconfig ppp0 delete kermit -y /etc/ppp/kermit.dial pppd /dev/tty01 19200

`/etc/ppp/kermit.dial` 是一个 Kermit 脚本， 它会完成拨号， 并在远程主机上完成所有需要的身份验证过程 (这份文档的最后有一个脚本实例)。

使用下面这个脚本`/etc/ppp/pppdown`断开PPP连线：

#!/bin/sh pid=`pgrep pppd` if [ X${pid} != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill -TERM ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi /sbin/ifconfig ppp0 down /sbin/ifconfig ppp0 delete kermit -y /etc/ppp/kermit.hup /etc/ppp/ppptest

通过执行`/usr/etc/ppp/ppptest`， 看看`pppd` 是否仍在运行：

#!/bin/sh pid=`pgrep pppd` if [ X${pid} != "X" ] ; then echo 'pppd running: PID=' ${pid-NONE} else echo 'No pppd running.' fi set -x netstat -n -I ppp0 ifconfig ppp0

执行脚本 `/etc/ppp/kermit.hup`以挂起moderm， 这个文件包含：

set line /dev/tty01 ; put your modem device here set speed 19200 set file type binary set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none pau 1 out +++ inp 5 OK out ATH0\13 echo \13 exit

也可以用`chat` 代替`kermit`：

以下两个文件用以建立`pppd`连接。

`/etc/ppp/options`：

/dev/cuad1 115200 crtscts # enable hardware flow control modem # modem control line connect "/usr/bin/chat -f /etc/ppp/login.chat.script" noipdefault # remote PPP serve must supply your IP address # if the remote host doesn't send your IP during # IPCP negotiation, remove this option passive # wait for LCP packets domain `your.domain` # put your domain name here : # put the IP of remote PPP host here # it will be used to route packets via PPP link # if you didn't specified the noipdefault option # change this line to `local_ip`:`remote_ip` defaultroute # put this if you want that PPP server will be # your default router

`/etc/ppp/login.chat.script`：

### 注意:

以下的内容应该放在一行内。

ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDT`phone.number` CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: `login-id` TIMEOUT 5 sword: `password`

一旦这些被安装且修改正确， 您所要做的就是运行`pppd`， 就像这样：

`#` `pppd`

### 28.3.3. 使用`pppd`作为服务器

`/etc/ppp/options`要包括下面这些内容：

crtscts # Hardware flow control netmask 255.255.255.0 # netmask (not required) 192.114.208.20:192.114.208.165 # IP's of local and remote hosts # local ip must be different from one # you assigned to the Ethernet (or other) # interface on your machine. # remote IP is IP address that will be # assigned to the remote machine domain ppp.foo.com # your domain passive # wait for LCP modem # modem line

下面这个脚本`/etc/ppp/pppserv` 使pppd以服务器方式启动：

#!/bin/sh pgrep -l pppd pid=`pgrep pppd` if [ "X${pid}" != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi # reset ppp interface ifconfig ppp0 down ifconfig ppp0 delete # enable autoanswer mode kermit -y /etc/ppp/kermit.ans # run ppp pppd /dev/tty01 19200

使用脚本`/etc/ppp/pppservdown`停止服务器：

#!/bin/sh pgrep -l pppd pid=`pgrep pppd` if [ "X${pid}" != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi ifconfig ppp0 down ifconfig ppp0 delete kermit -y /etc/ppp/kermit.noans

下面的 Kermit 脚本 (`/etc/ppp/kermit.ans`) 能够启用/禁用您 modem 的自动应答模式。 其内容类似下面这样：

set line /dev/tty01 set speed 19200 set file type binary set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none pau 1 out +++ inp 5 OK out ATH0\13 inp 5 OK echo \13 out ATS0=1\13 ; change this to out ATS0=0\13 if you want to disable ; autoanswer mode inp 5 OK echo \13 exit

一个名为`/etc/ppp/kermit.dial`的脚本用于向远程主机 进行拨号和验证。 您要根据需要定制它。 要加入您的登寻名和密码， 您还要根据 modem 和远程主机的反应修改输入语句。

; ; put the com line attached to the modem here: ; set line /dev/tty01 ; ; put the modem speed here: ; set speed 19200 set file type binary ; full 8 bit file xfer set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none set modem hayes set dial hangup off set carrier auto ; Then SET CARRIER if necessary, set dial display on ; Then SET DIAL if necessary, set input echo on set input timeout proceed set input case ignore def \%x 0 ; login prompt counter goto slhup :slcmd ; put the modem in command mode echo Put the modem in command mode. clear ; Clear unread characters from input buffer pause 1 output +++ ; hayes escape sequence input 1 OK\13\10 ; wait for OK if success goto slhup output \13 pause 1 output at\13 input 1 OK\13\10 if fail goto slcmd ; if modem doesn't answer OK, try again :slhup ; hang up the phone clear ; Clear unread characters from input buffer pause 1 echo Hanging up the phone. output ath0\13 ; hayes command for on hook input 2 OK\13\10 if fail goto slcmd ; if no OK answer, put modem in command mode :sldial ; dial the number pause 1 echo Dialing. output atdt9,550311\13\10 ; put phone number here assign \%x 0 ; zero the time counter :look clear ; Clear unread characters from input buffer increment \%x ; Count the seconds input 1 {CONNECT } if success goto sllogin reinput 1 {NO CARRIER\13\10} if success goto sldial reinput 1 {NO DIALTONE\13\10} if success goto slnodial reinput 1 {\255} if success goto slhup reinput 1 {\127} if success goto slhup if < \%x 60 goto look else goto slhup :sllogin ; login assign \%x 0 ; zero the time counter pause 1 echo Looking for login prompt. :slloop increment \%x ; Count the seconds clear ; Clear unread characters from input buffer output \13 ; ; put your expected login prompt here: ; input 1 {Username: } if success goto sluid reinput 1 {\255} if success goto slhup reinput 1 {\127} if success goto slhup if < \%x 10 goto slloop ; try 10 times to get a login prompt else goto slhup ; hang up and start again if 10 failures :sluid ; ; put your userid here: ; output ppp-login\13 input 1 {Password: } ; ; put your password here: ; output ppp-password\13 input 1 {Entering SLIP mode.} echo quit :slnodial echo \7No dialtone. Check the telephone line!\7 exit 1 ; local variables: ; mode: csh ; comment-start: "; " ; comment-start-skip: "; " ; end:

上一页 | 上一级 | 下一页
28.2. 使用用户级 PPP | 起始页 | 28.4. PPP 连接故障排除

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

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.