[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 应用技术 > 其它 > 正文
如何让FreeBSD成为PPP拨接服务器?
http://www.fanqiang.com (2001-04-16 14:23:38)
本文举例如何以kernel mode PPP, 即pppd(8), 提供PPP 拨接伺服器的功能。 

请注意所用MODEM必须是可以 
1. auto answer incoming call, and 
2. can auto reset when DTR signal drops. 

ZZ. 
AA.让kernel 支援ppp device 
BB.设定MODEM 
CC.设定/etc/ttys 
DD.决定PPP 两端的IP 
EE.设定pppd的options 
FF.怎麽用? 
  

AA. 
请确定您所用的kernel 支援ppp device. 如果没有的话您必须修改它。 
(FreeBSD handbook, 5.3.8. Networking, pseudo-device ppp number) 
如果有支援,那麽打ifconfig -a 大概会有如下这样的讯息: 

ppp0: flags=8010 mtu 1500 
ppp1: flags=8010 mtu 1500 

显示有两个ppp device。 
  

BB. 
接下来请参照modem的说明书将他设定为前述的: 
1. auto answer. 
2. Reset when DTR signal drops, 以及 
3. 关掉command line echo. 
4. 不要display result code. 

当然您必须要先有适当的cable连接modem 和主机的RS-232 port。 
连接好了之後可以用cu 指令来跟modem讲话(通常只有root才可以用cu): 
# cu -l /dev/cuaa1 -s 115200 
connected 

当cu 打开/dev/cuaa1 时,连接cuaa1 的modem 的DTR灯会亮。 
在cu 下,可打~. 跳出。 
  

CC. 
您必须知道如何接序列埠的terminal,(FreeBSD handbook, 11. Serial Communications, 
11.2.3. Configuration) 
例如/etc/ttys中: 

# Serial terminals 
ttyd0 "/usr/libexec/getty std.9600" unknown off secure 
ttyd1 "/usr/libexec/getty std.115200" vt100 on insecure 
ttyd2 "/usr/libexec/getty std.9600" unknown off secure 
ttyd3 "/usr/libexec/getty std.9600" unknown off secure 

设定ttyd1使能 上相连的terminal,连线速度(transmittion speed between modem and 
the interface)固定115200bps,当作vt100 terminal 对待,不允许root login。 

如果您的modem 已经 上com2 (ttyd1),这时kill -1 1 就会见到modem 上的DTR灯亮起 
表示主机已经待命。如果modem DTR灯没有亮起来,那就。。。。 
至此您可以用普通terminal 模拟程式拨进那台modem 看看,拨通之後应该可以看到 
FreeBSD的login画面。 login 进去後,再logout, 则modem 挂断。 
  

DD. 
每一个dialup连上後要用掉两个IP,local端与remote端各一,也就是 
server端与client端各一。除非您拥有正式核发的IPs,不然请千万从 
Private IP里挑选您喜欢的来用。 

10.0.0.0 - 10.255.255.255 (10/8 prefix) 
172.16.0.0 - 172.31.255.255 (172.16/12 prefix) 
192.168.0.0 - 192.168.255.255 (192.168/16 prefix) 

比如设server端为 172.16.0.10 
client端为 172.16.0.20 
这样为 一对,一个client拨上来要用掉 一对 IP。 
假如您提供两个或三个MODEM让人拨接,那麽就需要两对或三对IP。 
  

EE. 
设定/etc/ppp/options 档。 
/etc/ppp/options 内容设定了pppd(8)启动後的动作,options 可以在 
命令行里指定,不过/etc/ppp/options这个档必须是存在的。它可用来当作 
对各个ttyd?的default设定,ttyd?的个别设定可以放在/etc/ppp/options.ttyd? 
之中。 

/etc/ppp/options 
crtscts # Hardware flow control 
netmask 255.255.255.0 # netmask ( not required 因为好像改了也没用...呵) 
domain abc.efg.net # your domain 
passive # wait for LCP 
modem # modem line 

/etc/ppp/options.ttyd1 
172.16.0.10:172.16.0.20 # local:remote IP 
# i.e. server-side will get IP 172.16.0.10 
# client-side will get IP 172.16.0.20 

FF. 
拨通後,login,打pppd就开始ppp pocket-mode. 

===================================================================== 

From: eddie@eddie.seed.net.tw (Eddie Wang) 
Newsgroups: tw.bbs.comp.386bsd 
Subject: 另一个架ppp server的方式 
Date: Sun, 10 Aug 1997 14:08:00 GMT 

在这提供一种简单架设ppp server的方法,主要是利用 
danny@freebsd.org 所提供的pppkit.tgz来使FreeBSD 
成为一个使用系统密码档及pap方式认证的terminal server。 
大家可以在下列地方取得pppkit.tgz 
ftp://ftp.hilink.com.au/pub/FreeBSD/pppkit.tgz or 
ftp://freebsd.csie.nctu.edu.tw/pub/jdli/collect/ppp/pppkit.tgz 
除此之外我还参考了handbook第11、12章以及FAQ第十章, 
有兴趣的人可顺便看一下。 
我的系统是 2.2 stable (0803) 
cuaa0==>GVC 宝时捷33.6k 
cuaa1==>创巨 modem blaster 28.8k 
以下的说明皆以我的系统为范例,请自行依需要修改。 

解开pppkit.tgz後的档案如下: 
pppkit/etc/ppp/ppp.ports 
指定由ttyxx拨入後将得到的ip 

pppkit/etc/ppp/ppp.disabled 
设定哪些人不可用pap ppp的方式拨入 

pppkit/etc/ppp/options 
设定给拨入端的DNS server 

pppkit/etc/ppp/ppp.users 
设定给某些特定的user固定ip,前提是这些user用一般的 
Login:/Password:提示符号login的而不是用pap(设定方法请 
参考README) 

pppkit/etc/gettytab 
参考用的 

pppkit/bin/ppplogin.sh 
提供给ppp user的login shell并且也让getty去启动pppd 

pppkit/bin/fancyppplogin.sh 
同上 

pppkit/usr/sbin/pppd-22 
提供给2.2+使用者的pppd 

pppkit/usr/sbin/pppd-215 
给2.1.5+的pppd 

pppkit/usr/libexec/getty 
2.1.5的user需要将原来的getty换成这个 

pppkit/README 
说明文件,我这篇post 80%+都在里面有说明 

开始吧 
* 先确定kernel中有ppp interface,并把modem接好,power on。 

* cp pppkit/usr/sbin/pppd-22 /usr/sbin/pppd 
(这是README说的,我没做:p ) 
chown root.bin /usr/sbin/pppd ; chmod 4555 /usr/sbin/pppd 

* cp pppkit/etc/ppp/* /etc/ppp 

* 修改/etc/ppp/options 将给拨入端的的dns server ip填入 
假如你预备将ppp0的ip设定成和你网卡的ip相同的话,请加上 
proxyarp这个keyword 

* 修改/etc/ppp/ppp.ports 我只预备将ttyd1提供拨入,因此只要 
设定一行"d1 xxx.xxx.xxx.xxx" 

* cp pppkit/bin/ppplogin.sh /usr/local/bin 
并修改其中 LOCAL=xxx.xxx.xxx.xxx 将xxx....换成你预备指定 
给local端的ip(如上所说,可设定成和网卡相同) 

* 编辑一个/etc/ppp/ppp.shells 格式如同/etc/shells 
至少要加上/usr/local/bin/ppplogin.sh以及你预备提供拨接服务 
的user所用的shell 

* 看看/etc/ppp/ppp.disabled中少列了哪些你不想让他拨入的,加上去。 

* 将/etc/ttys中关於ttyd1那行改成: 
ttyd1 "/usr/libexec/getty std.57600" dialup on insecure 

* 将/etc/gettytab中开头是std.57600那项设定改成: 
std.57600|57600-baud:\ 
: np:sp#57600:pp=/usr/local/bin/ppplogin.sh 

大致设定完成了,现在请 kill -HUP 1;ps -ax应该会看到这行 
13143 ?? I 0:00.01 /usr/libexec/getty std.57600 ttyd1 

现在要设定数据机了,handbook上说要上数据机能够正常提供dialin 
的话必须: 
1.CD asserted when connected (&C1) 
2.DTR asserted for operation; dropping DTR hangs up line & 
resets modem (&D2) 
3.CTS transmitted data flow control (&K3) 
4.Disable XON/XOFF flow control (找不到:p,不过这项在rc.serial 
应该已经是预设的了) 
5.RTS received data flow control (&K3) 
6.Quiet mode (no result codes) (Q1) 
7.No command echo (E0) 
另外我想要把这些设定储存起来 (&W0) 
以及要modem在响一声後自动接电话 (S0=1) 
翻翻modem的手册,我的modem blaster应设定如下: 
AT&C1&D2&K3E0Q1S0=1&W0 

要设定modem请先在/etc/remote中加上一行: 
cuaa1:dv=/dev/cuaa1:br#57600:pa=none 
然後就可以用tip cuaa1来设定了,设定完用"~."结束。 

现在可以试拨看看了。在拨入端的设定和一般拨SEEDNet(非广告) 
一样,不论是95,nt,or FreeBSD都很顺利。当初我在测试的时候 
用cuaa0拨到ttyd1,然後用ifconfig -a去看..真是精采:) 

(http://www.fanqiang.com)
    进入【UNIX论坛

相关文章

===更多相关===
 

★  樊强制作 欢迎分享  ★