最近因工作需要,要在Linux上装个PPPserver,接受拨接进来的电
话,连上整个公司的ethernet网路,再经由router接上internet,过程并
不顺利,整台Linux有许多地方需要设定,为避免大家浪费许多无谓的时间,
所以有这篇FAQ的产生,我所使用的是Linux1.0.9这份FAQ并没有完整的介
绍Linux PPP的部份,只针对PPP server的部份,把我安装的经验写出来,
适合已装上PPP,并能用来连接其他PPP server的人。 若想从无到有,你可
以叁考开放系统与网路杂志1994年,八月份出版, 曾瑞源先生的Internet低
廉上网,再叁考本篇及各种FAQ就可以建立一个PPP server了。 若想更进一
步, 让不同网路的PPP server相连,可以造成一 个router,让两个网路
互通有无,但这部份我没试过,请各位努力研究。要建立PPP server有三个步骤:
1.你的modem必须要能接电话。
2.你的linux必须能透过serial line显示login prompt。
3.建立呼叫pppd的account
一、 如 何 让modem接 电 话。
我不会用linux来设定,所以用windows 3.1的终端机来设定modem,
执行windows的终端机。对modem下ATS0=1,这是叫modem在电话响一声後就接,
=2就是响两声。AT&W,把刚设的状态存起来,今後每当电话响一声,modem就
接起来了。
二、 如何透过serial line显示login prompt。
在/etc底下,有个inittab,有段内容要设定如下:
# Serial lines 这是我的设定, 可能与你的不同。
#s1:45:respawn:/sbin/getty ttyS0 19200 vt100 s2:45:respawn:/sbin/getty ttyS1
19200 vt100 每一行之前若加上#,代表注解。 意义为
id:runlevel:action:/etc/getty [options] line [speed [term [lined]]]
其getty必须为getty_ps,这部份说明可以在Serial-HOWTO中找到。有了这段设定,
重头开机,并连上後,若下ps aux指令,应可看到一些资料,其中某些栏位已省略。
.... root 88 232 v02 S 10:58 0:00 /sbin/getty tty2 3840
root 88 233 v03 S 10:58 0:00 /sbin/getty tty3 3840
root 92 264 psf S 11:33 0:00 /sbin/getty ttyS1 19200 .. ..
/dev/ttyS1是给拨进来的connection使用的。
/dev/cua1是拨出去用的。
以上两者皆为com2到目前为止,如果用modem拨进来,将可出现login prompt的画面如
下: login:
此时整条serial line已通,可以login,并下一些简单的命令,
但local端和remote端并未开始商议PPP。
三、 为了提供PPP service,我们要建立一个account,如:ppp01,他的login shell可
以把pppd叫起来?nbsp;并和对方沟通。作法如下:下一adduser命令
linux>adduser
----------------------这 以 下 为adduser AP的user interface
Adding a new user. The username should be not exceed 8 characters
in length, or you many run into problems later.
Enter login name for new account (^C to quit): ppp01
Editing information for new user [ppp01]
Full Name: ppp01
GID [100]:100
Checking for an available UID after 500
501...502...503...504...505...506...507...508...
First unused uid is 509
UID [509]:509
Home Directory [/home/ppp01]: /home/usr/ppp01
Shell [/bin/bash]: /etc/ppp/ppplogin
Password [ppp01]:xxxxx
-------------------------以 上 为adduser
一般login shell为/etc/bash或/etc/csh, 但我们为了在login时就执行pppd,
建立一个ppp connection,所以写了一 个executable scrip内容如下:
------------以 下 为/etc/ppp/ppplogin
#!/bin/csh
exec /usr/etc/pppd passive netmask 255.255.255.0 proxyarp :140.xxx.xxx.xxx
------------以 上 为/etc/ppp/ppplogin
passive意思是pppd一开始会尝试negotiate,若没有回应,则等待。
netmask 255.255.255.0设定subnet mask。
proxyarp add an entry to this systems ARP table。
∶140.xxx.xxx.xxx设定拨进来那端的IP
关於pppd这部份的option,可用man pppd来研究。
做了adduser後/etc/passwd的内容如下:
ppp01:(encrypted password):505:100:ppp01:/home/usr/ppp01:/etc/ppp/ppplogin
上述是server端建立的方法,至於client连接ppp server不多做介绍,
只指出要注意的地方,我使用的软体是winspan 3.0,至於Trumpt winsock、linux
pppd,只听过没用来连过,各位就多见谅了,其设定是大同小异的。Winspan里有
个configure,里头有界面卡,选择ppp、设定,设定baud rate等,重要的是local ip
address,这个地方要和ppplogin中所设的:140.xxx.xxx.xxx一样,因为这linux pppd
的设定方法,把这ip固定了,所以要设一样的。至於要dynamic assign IP、或更多
条线,这就叁考其他faq,我并没有尝试。至此大功告成,用ppp01帐号login後,pppd就
开始和对端商议PPP了。但事情真的这麽顺利吗?可能没有,你可能碰到某些状况如下:
1.modem可以接电话了,但接下来没有任何动作,login prompt并不会出现。解法:
/etc/default下, 有getty一开始要读的档案,其内容可能如下:
CLEAR = NO HANGUP=YES INIT="" ATZ\r OK WAITFOR=RING
CONNECT="" ATA\r CONNECT \s\A
你若是用man getty研究其option就知道为什麽不出现prompt,所以我改成
CLEAR = NO
HANGUP=YES
login prompt就出现了。
2.怎麽一切设对,ppp connection也建立起来了,可以从local端telnet到linux上了,
但却无法到其他机器上。原因:pppd的ARP table并没有成功建立,packet无 法route出
去。理论上pppd应可自动建立ARP table,但我不知哪里设错,无法建立。解法:
手动建立ARP table,可叁考NET-2-HOWTO或NET-3-HOWTO的9.Routing。
#
#Proxy ARP for those dialin users who will be using this
#machine as a server
#
/sbin/arp -s 140.xxx.xxx.xxx 00:00:C0:AD:37:1C pub
#End proxy arps
以arp -a指令将可发现? (140.xxx.xxx.xxx) at 00:00:C0:AD:37:1C
这样才可以正确route出去。
注意:00:00:C0:AD:37:1C是ethernet address,也就是网路卡的hardware address,
在linux开机时注意看将可发现。
3.可以正常显示,并当terminal Server,但用ppp帐号login後就断了. 原因:
pppd根本没有执行,可在console以ppp帐号login,看该帐号是否的确可以执行PPPD.
希这篇能给那些想在办公室或实验室装个PPP server的人一点帮助?nbsp;若本篇FAQ有错误
的地方,请多多见谅..