如何讓FreeBSD成為PPP撥接服務器?

本文舉例如何以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 
除此之外我還參考了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去看..真是精採:)
arrow
arrow
    全站熱搜

    Bluelove1968 發表在 痞客邦 留言(0) 人氣()