2008年12月5日星期五

ppp

ppp 是点对点传输协议的 daemon,原来主要是作为拨号的程序,随着现在新的宽带的出现,比如 pptp、l2tp 等 VPN,还有 pppoe 这种技术的出现,它担当了一个维护连接、提供给用户一个一致的使用环境的角色。这里简单介绍一下如何使用 ppp 建立一些常用的连接。

这是该包的描述:
$ dpkg -s ppp
Package: ppp
Status: install ok installed
Priority: optional
Section: admin
Installed-Size: 892
Maintainer: Marco d'Itri
Architecture: i386
Version: 2.4.4rel-10
Replaces: ppp-pam, ppp-udeb
Depends: libc6 (>= 2.7-1), libpam-modules, libpam-runtime (>= 0.76-13.1), libpam0g (>= 0.99.7.1), libpcap0.8 (>= 0.9.3-1), netbase, procps
Suggests: iptables
Conflicts: makedev (<<>
含有如下的内容,
/etc/bash_completion.d/pon
/etc/apm/event.d/ppp
/etc/ppp/peers
/etc/ppp/ip-up.d/0000usepeerdns
/etc/ppp/ip-down.d/0000usepeerdns
/etc/ppp/ipv6-up.d
/etc/ppp/ipv6-down.d
/etc/ppp/options
/etc/ppp/ip-up
/etc/ppp/ip-down
/etc/ppp/ipv6-up
/etc/ppp/ipv6-down
/etc/chatscripts
/etc/chatscripts/pap
/etc/logrotate.d/ppp
/etc/init.d/pppd-dns
/etc/pam.d/ppp
/usr/share/ppp/pap-secrets
/usr/share/ppp/chap-secrets
/usr/share/ppp/provider.peer
/usr/share/ppp/provider.chatscript
/usr/share/man/man8/chat.8.gz
/usr/share/man/man8/pppd-radius.8.gz
/usr/share/man/man8/pppd-radattr.8.gz
/usr/share/man/man8/pppd.8.gz
/usr/share/man/man8/pppstats.8.gz
/usr/share/man/man8/pppdump.8.gz
/usr/share/man/man8/pppoe-discovery.8.gz
/usr/share/man/man1/pon.1.gz
/usr/share/doc/ppp/README.MPPE
/usr/share/doc/ppp/README.MSCHAP81
/usr/share/doc/ppp/README.cbcp
/usr/share/doc/ppp/README.pppoe
/usr/share/doc/ppp/README.pwfd
/usr/share/doc/ppp/README.STATIC-IP
/usr/share/doc/ppp/README.win9x
/usr/share/doc/ppp/defaultroute
/usr/share/doc/ppp/copyright
/usr/share/doc/ppp/examples/scripts/chatchat/chatchat.c.gz
/usr/share/doc/ppp/examples/scripts/chatchat/README.gz
/usr/share/doc/ppp/examples/scripts/chat-callback
/usr/share/doc/ppp/examples/scripts/callback
/usr/share/doc/ppp/examples/scripts/pon.1
/usr/share/doc/ppp/examples/scripts/plog
/usr/share/doc/ppp/examples/scripts/ip-down.local.add
/usr/share/doc/ppp/examples/scripts/ip-up.local.add
/usr/share/doc/ppp/examples/scripts/ipv6-down.sample
/usr/share/doc/ppp/examples/scripts/ipv6-up.sample
/usr/share/doc/ppp/examples/scripts/options-rsh-loc
/usr/share/doc/ppp/examples/scripts/options-rsh-rem
/usr/share/doc/ppp/examples/scripts/options-ssh-loc
/usr/share/doc/ppp/examples/scripts/options-ssh-rem
/usr/share/doc/ppp/examples/scripts/poff
/usr/share/doc/ppp/examples/scripts/pon
/usr/share/doc/ppp/examples/scripts/ppp-on-dialer
/usr/share/doc/ppp/examples/scripts/ppp-off
/usr/share/doc/ppp/examples/scripts/ppp-on
/usr/share/doc/ppp/examples/scripts/ppp-on-rsh
/usr/share/doc/ppp/examples/scripts/ppp-on-ssh
/usr/share/doc/ppp/examples/scripts/redialer
/usr/share/doc/ppp/examples/scripts/secure-card
/usr/share/doc/ppp/examples/scripts/README.gz
/usr/share/doc/ppp/examples/scripts/autopppd.gz
/usr/share/doc/ppp/examples/userscripts-down
/usr/share/doc/ppp/examples/userscripts-up
/usr/share/doc/ppp/examples/popp
/usr/share/doc/ppp/examples/filters
/usr/share/doc/ppp/examples/options.ttyXX
/usr/share/doc/ppp/examples/peers-pppoa
/usr/share/doc/ppp/examples/peers-pppoe
/usr/share/doc/ppp/examples/interfaces
/usr/share/doc/ppp/examples/per-linkname
/usr/share/doc/ppp/changelog.Debian.gz
/usr/share/doc/ppp/NEWS.Debian.gz
/usr/share/doc/ppp/changelog.gz
/usr/share/doc/ppp/FAQ.gz
/usr/share/doc/ppp/README.gz
/usr/share/doc/ppp/SETUP.gz
/usr/share/doc/ppp/PLUGINS.gz
/usr/share/doc/ppp/README.MSCHAP80.gz
/usr/share/doc/ppp/README.Debian.gz
/usr/bin/pon
/usr/bin/plog
/usr/bin/poff
/usr/sbin
/usr/sbin/chat
/usr/sbin/pppoe-discovery
/usr/sbin/pppd
/usr/sbin/pppstats
/usr/sbin/pppdump
/usr/lib/pppd/2.4.4/minconn.so
/usr/lib/pppd/2.4.4/passprompt.so
/usr/lib/pppd/2.4.4/passwordfd.so
/usr/lib/pppd/2.4.4/winbind.so
/usr/lib/pppd/2.4.4/rp-pppoe.so
/usr/lib/pppd/2.4.4/pppoatm.so
/usr/lib/pppd/2.4.4/radius.so
/usr/lib/pppd/2.4.4/radattr.so
/usr/lib/pppd/2.4.4/radrealms.so
/usr/share/man/man1/poff.1.gz
/usr/share/man/man1/plog.1.gz
这是一个比较复杂的包,我们一点一点来看。

首先有个目录 /etc/bash_completion.d,这里面是 bash completion 的巢(后面介绍吧),激活 bash completion 只需要运行 /etc/bash_completion(用 source 在当前 shell 里面执行),该包的作用是为 pon/poff 增加补全功能(bash 自己有对目录、文件、变量名的补全)。这个补全是针对一个特定的 peer。

另外一个目录 /etc/apm/event.d 是高级电源管理(advanced power management)的目录,这是当 apmd 决定 suspend/resume 时调用的 ppp 的命令。

/etc/logrotate.d 是 ppp 日志回卷的操作,这是给 logrotate 程序用来操作 ppp 日志的配置。

/etc/inin.d 里面是 ppp 用来解决 /etc/resolv.conf 问题的脚本,原来该文件是手工编辑的,那么当 ppp 连接由于系统崩溃断掉,原来的文件会被 ppp 连接产生的所覆盖。这个脚本会检查这种情况并恢复原来的版本。现在的 DNS 解析似乎是靠另外的东西维护的了,因此觉得是不是可以不要了?

/etc/pam.d 里面是关于使用 ppp 连接进行 login 的 PAM 配置。

/etc/ppp 里面是 pppd 本身的配置,这里面重要的东西有 ip-up 和 ip-down,这里面是 pppd 运行起来后需要调用 ip-up 设置某些东西,断开连接后调用 ip-down 恢复某些东西,它们分别有 ip-up.d 和 ip-down.d 目录用于配置一些细化的项目,如 DNS,如果装过 firestarter 还在这里配置防火墙这些东西。另外 /etc/chatscripts 里面是各种连接会话的过程。

/etc/chatscripts 里面是用于 chat 程序拨号(modem)使用的脚本。

一个标准的 ppp 拨号的配置包含在 peers 里面建立 ppp 拨号脚本,如调用拨号程序,设置一些专有参数,并且调用 /etc/ppp/options 里面公用的参数部分。然后在 /etc/ppp/pap-secrets 或者 /etc/ppp/chap-secrets 里面配置用户、密码等。之后通过 pon 打开这个连接,plog 查看日志,poff 挂断。

先看看几个简单的命令,pppstats 显示 ppp 连接的统计信息,pppdump 是把 ppp record file 转换成为可读的格式。pppoe-discovery 用于发现 ethernet 里面 pppoe 的 AP。

然后就是核心程序 pppd 了,这里依照 man page 里面列出一些常用的选项。ttyname 使用的设备名(和串行连接一样,pppd 会占用一个 pty);speed 连接速率(就是 baud rate);auth/noauth,需要验证才允许连接;call name 是调用 /etc/ppp/peers/name;connect script 是拨号脚本;(no)defaultroute 是将连接上的 peer 作为 default route 加入 route table;replacedefaultroute,这是替换;disconnect 用于断掉连接调用;escape 设置逃脱键;file 从另一个文件读入信息;init 一般是调用拨号(chat)作一些准备工作;lock 为工作的设备设置一个 exclusive 访问的锁;mtu 和 mru 意思很明确。

另外一些选项有 (no)bsdcomp 打开 BSD 压缩;debug 打开调试功能;holdoff 断线等待时间;maxfail 指定最大重连次数,0 为 infinity;idle 闲置切断连接时间;ipparam 为 ip-up/down 提供参数;ipx,打开 ipx 协议;logfile 指定 log file;mppe-stateful 是加密 MPPE 的一种;refuse-* 不使用某认证方式。

下面是几个配置的例子,如教育网直通车,可以在 /etc/ppp/peers 里面加一个 eduexp 内容如下:
pty "pptp 58.207.255.82 --nolaunchpppd"
name fudan_iipl
remotename eduexp
file /etc/ppp/options.pptp.vipedu
ipparam eduexp
这里主要设置了拨号方式,并且设置的 name 方便在 /etc/ppp/chap-secrets 里面获得对应的密码。这里读入的文件 options.pptp.vipedu 是关于其他的参数的配置(常把公用的放在这里),如下
lock
noauth
refuse-eap
refuse-chap
refuse-mschap
nobsdcomp
nodeflate
persist
defaultroute
maxfail 0
holdoff 120
可见配置一个拨号服务是非常容易的。

没有评论: