LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 877|回复: 2

哪位兄弟有条件和环境,请试一下按此方法看能否用WINMODEM+普通电话线上网。。。

[复制链接]
发表于 2005-1-8 23:46:21 | 显示全部楼层 |阅读模式
rt,这些是在王波写的使用大全上看的。。。

拨号网络



  局域网上的FreeBSD要和Internet(或其他广域网)连接,就需要使用广域网界面。对于一般用户,采用普通电话线进行拨号的方式,是比较常见的做法。这就需要首先使用计算机的串口连接到modem(调制解调器)上,再通过modem连接到Internet上。
串口和modem
  因此如果采用拨号方式连接一台计算机到远端,则必须配置好计算机的串口和modem。
  个人计算机一般有两个串口,在DOS下称为COM1、COM2,FreeBSD使用Unix的习惯从0开始排列数字,相应的串口硬件为sio0、sio1。启动时系统将自动检测这些硬件,检测结果显示在屏幕上,可以在登录后使用dmesg来查看这些启动信息,判断硬件是否真的被检测到了。如果串口被检测到,就能使用连接到相应串口上的外置 modem进行连接。

  如果使用内置modem卡,卡上将包括一个串口设备,根据这个卡的设置,这个串口设备可以为sio2或sio3 ,因此必须保证内核支持第三、第四个串口设备sio2和sio3。但与DOS不同的是,modem卡使用的IRQ不能与已有串口共享硬件资源。由于DOS是单任务操作系统,不可能同时使用两个串口,共享IRQ是可以的,因此COM1 与COM3共享IRQ 4,COM2与COM4共享IRQ 3。但是对于多用户操作系统FreeBSD来讲,同时会有多个进程访问设备,每个设备必须单独占有IRQ,因此必须在内核中将modem卡的IRQ设为另外的空闲值。

  要更改卡上的跳线或在DOS下运行设置程序更改卡上的设置,以使硬件上设置与内核配置相一致。通常PNP的 modem卡能正确设置硬件资源,也可以通过UserConfig重新设置。

  当FreeBSD的内核检测到串口设备之后,就能够通过相应的设备文件来访问这些串口了。对应第一个串口sio0 的设备文件为/dev/ttyd0和/dev/cuaa0,对应第二个串口sio2的设备文件为/dev/tty d1和/dev/cuaa1,依次类推。

  FreeBSD对一个串口提供了两个设备文件,事实上它们对应同样的硬件,只是属性略有不同。cuaa0主要用来拨出,ttyd0主要用于拨入和直接连接。设置这两个设备文件的原因是计算机与modem相互通信的数据有两类,一种为计算机通过串口发送给modem的控制指令,常用的为Hayes的AT指令,这些数据是发送给modem的,而另一种数据是计算机通过modem发送到电话网上的传输数据,这些数据只需要让modem进行调制解调即可。而对于应用程序来讲,要想非常简单的来区分这两种数据,就可以使用两个初始状态不同的设备文件。

  当外部拨入内部时,电话连接已经设置好了,数据传输是在计算机与电话网之间,modem只进行调制解调,此时就使用ttyd0。而当向外拨号时,modem还没有建立连接,计算机应该向modem发送指令,控制modem执行拨号等操作,此时就使用设备文件cuaa0。一旦连接建立之后,系统将重置设备文件的属性,使得cuaa0同样也是将数据发送向电话网上。

  因此ttyd0和cuaa0这两个设备文件,只是初始状态不同,而并没有本质的差别。事实上大多数拨号软件会重置设备文件的状态,使用哪个设备都可以正确完成拨号过程。然而习惯的做法仍然是使用cuaa0用于拨出,ttyd0 作为拨入,这样能避免某些软件不能正确重置设备文件的状态的问题。
 楼主| 发表于 2005-1-8 23:47:37 | 显示全部楼层
PPP协议
  通过电话连接使用IP协议有两种协议,一种为SLIP协议,另一种为PPP协议,FreeBSD支持这两种协议,但是SLIP协议已经过时,当前已经很少有ISP使用这种方式提供接入服务了,而PPP协议则成为了标准。

  建立一个PPP连接需要以下过程:

    * 在PPP的两端建立一条物理连接,通常为电话连接,但也有直接电缆连接或虚拟的tunnel连接的形式。具体如何建立连接,例如拨号等,并不属于PPP协议本身的任务。
    * 由PPP的服务器端对客户端进行验证,可以有最简单登录的验证方式、PAP或CHAP等验证方式。由于PAP和CHAP并不在线路上传输口令本身,因此更为安全,不必担心口令会泄露出去。
    * 验证完毕之后,PPP服务器将按照配置,分配给客户IP地址,并将网关地址和其他的一些配置信息传送给客户。如果是Microsoft客户,还可以按照MS的扩展协议分配给客户NetBIOS名字服务器的地址。这样就建立了一条PPP连接。

  FreeBSD对PPP提供了两种不同方式的支持,一种为内核级PPP,它将PPP协议代码编译进内核,并运行一个PPP守护进程pppd,提供对PPP的支持,这是一种传统的方法,但配置起来较困难。另一种为用户级PPP,它使用一个应用程序ppp,通过通用tunnel设备传递PPP数据,配置较为容易。一般情况下可以使用用户级PPP 来建立拨号方式的Internet连接。

  要建立PPP连接,首先要检查串口、modem和电话线连接是否正确。可以使用一些通信软件来帮助进行诊断,例如minicom,如果使用minicom能正常拨号,并在拨ISP的拨号服务器时能出现username和password 提示,就说明串口和modem的配置正确无误。接下来就可以配置PPP连接。

    * 用户级PPP设置

  用户级PPP使用tunnel设备进行PPP数据的传递,因此内核中必须支持相应的tunnel设备,通常为 tun0。缺省内核中支持这个伪设备(pesudo-device tun),/dev目录下也具备相应的设备文件t un0。如果同时需要多个拨号连接,就可以增加内核中支持的伪设备数量和相应的设备文件。

  要使用ppp,还需要设置它的配置文件,这些文件位于/etc/ppp目录中。缺省情况下,/etc/ppp 目录下安装了这些文件的例子:


# ls -l /etc/ppp

  total 21

  drwxr-xr-x   2 root     wheel         512 Aug 17 16:18 .

  drwxr-xr-x   8 root     wheel        1536 Aug 29 18:31 ..

  -rw-r--r--   1 root     wheel        5112 May 20 20:06 ppp.conf.sample

  -rw-r--r--   1 root     wheel        1130 May 20 20:06 ppp.conf.server.sample

  -rw-r--r--   1 root     wheel        1894 May 20 20:06 ppp.deny

  -rw-r--r--   1 root     wheel        1665 May 20 20:06 ppp.dialup.sample

  -rw-r--r--   1 root     wheel        1402 May 20 20:06 ppp.linkdown.sample

  -rw-r--r--   1 root     wheel        1422 May 20 20:06 ppp.linkup.sample

  -rw-r--r--   1 root     wheel        1705 May 20 20:06 ppp.pap.dialup.sample

  -rw-r--r--   1 root     wheel         313 May 20 20:06 ppp.secret.sample

  这些以sample结尾的文件都给出了最常用的配置,因此只需复制生成正确的设置文件,再稍加修改,就能用于使用者自己的拨号连接。

    * 手工拨号

  ppp.conf是用户级PPP的主要配置文件,可以从ppp.conf.sample生成适合自己的ppp.conf。ppp.conf 文件使用带有冒号的标签标识不同的选项,第一项标签通常为default:,用于设置缺省的选项。


default:

set log Phase Chat Connect Carrier LCP IPCP CCP tun command

set device /dev/cuaa2

set speed 115200

deny lqr

set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\"
AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"

  注意default:为这一项的标签,必须位于一行的开始,而其他的行是这一项的具体配置,因此使用一个空白字符开头。否则语法错误就造成不能ppp不能正常建立连接的问题。

  第一个设置set log用于设置连接过程中要记录的日志内容,这有助于帮助解决连接过程中出现的故障;第二项设置set device设置连接使用的串口设备,本文件中设为第三个串口cuaa2;第三项设置了串口与mode m的连接速度,115200为PC常用的串口通信芯片UART 16550的最大通信速率;第四项在该medom上屏蔽线路质量请求lpr;最后一项为发送到medom的一些命令和相应的回应,通常称这些为交谈脚本(chat script ),上例中这个设备跨越了两行,实际上它应该位于同一行内。

  设置了default项之后,就可以进入ppp程序测试这些设置是否正确了。


# ppp

ppp > term

atdt 163

username: pppuser

password:

PPP >

  进入ppp程序之后,输入term命令可以进入终端模式,这个模式下用户可以直接输入modem认可的AT指令控制modem,本例中使用atdt 163拨接163,连接之后系统将进行提示输入用户名和口令,此后ppp就建立起PPP连接,而ppp的提示符改变为大写的PPP。

    * 设置拨号连接

  使用手工输入的连接方法不很方便,而且也不适合使用PAP或CHAP等安全认证方式的连接,因此最好在ppp.conf对指定的连接进行配置。这要求对每个要连接的ISP,都配置相应的设置。例如对CHINANET 的接入,使用下列chinanet标签配置:


chinanet:

set phone 163

set login "TIMEOUT 5 ogin:--sername: pppuser word: key123"

set timeout 120

set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0

delete ALL

add 0 0 HISADDR

  这个例子中使用chinanet作为设置的标签,设置了电话号码为163,登录时使用sername匹配对用户名的提示Username,接收到这个字符串后自动输入用户名pppuser,使用word匹配对口令的提示Pas sword,然后自动输入口令。这里只使用了提示信息的一部分来进行匹配,这是为了避免匹配时出现问题。对于不同的系统,这些提示还有所不同,对于使用Unix作登录服务器的提示为通常的Login,而大多数专用拨号服务器的提示为U sername。

  set ifaddr用于设置本地PPP连接的IP地址,由于PPP协议在客户和服务器之间协商客户的IP地址,通常由拨号服务器从自己控制的自由IP地址池中分配给拨号的计算机一个动态IP地址,因此这里的设置只是客户端对地址协商进行的限制。可以针对本地要申请的IP地址,和远端计算机的IP地址进行限制,本地的IP地址和网络掩码为s et ifaddr的第一个参数,而远端的IP地址和网络掩码为set ifaddr的第二个参数,前两个参数的网络掩码是用于限制IP地址所在的网络,可以是真实网络的网络掩码,也可以不是,第三个参数才是用来指定PPP界面使用的网络掩码。

  一般情况下,不需要对双方的IP地址范围进行限制,拨号之后可以接受任意的IP地址,就如上例中设置本地IP 地址和远端IP地址的限制网络掩码长度都为0,由于网络掩码长度为0使得任意IP地址都符合要求,此时掩码前面的IP 地址就没有意义了。

  如果想让拨号的计算机拥有一个静态IP地址,就必须设置网络掩码为32,明确指定IP地址,此时也可以省略掩码,直接使用IP地址本身。例如,本地每次连接都使用静态IP地址192.168.1.98,另一端的IP地址为19 2.168.1.64,那么这一项就应为:

  set ifaddr 192.168.1.98 192.168.1.64 255.255.255.0

  使用静态IP地址就能使FreeBSD使用固定的IP地址,从而能使用DNS域名,以方便提供更多的服务。然而,这个set ifaddr的配置命令可以更灵活,可以在协商IP地址时指定本机使用的IP地址范围,或者指定对方所在的IP地址范围,进行地址限制。例如:

  set ifaddr 192.168.1.98/24 192.168.1.64/24 255.255. 255.0

  这种限制拨号网络IP地址范围的机制对于使用自动拨号的情况十分有用,通常可以使用带参数的命令ppp -a uto将ppp程序放入后台,一旦有网络请求就立即拨号建立连接。但是FreeBSD上有多个网络界面,就需要判断这个网络请求需要使用哪个拨号网络界面进行网络传输,否则如果使用错误的拨号网络进行拨号,即使建立了连接,也不能找到目的计算机建立连接。由于每个连接请求中都具备目的IP地址,便需要根据这个IP地址来进行判断。然而普通的拨号网络在建立连接之前是没有分配IP地址的,因此还是无法确定对这个IP地址的连接请求应该通过那个拨号网络界面进行传输。但是,如果指定了ppp网络界面的IP地址范围,就可以根据这个地址范围来判断连接请求中的IP地址是否在这个范围内,以决定是否使用这个网络界面进行拨号。

  delete all指出删除不必要的路由配置,add 0 0 HISADDR指出将缺省路由设为对方的地址,由于使用动态IP时,在建立连接前对方的IP是未知的,因此使用HISADDR代替。如果已知拨号服务器的IP地址,也可以直接填上这个IP地址。也可以不将拨号服务器作为缺省路由,而只将它作为对某个子网的路由,那么在这个配置中就不可以使用0作为IP地址和网络掩码,必须使用正确的IP地址和子网掩码进行设置。例如add 192.168. 1.0 255.255.255.0 HISADDR,就将对方作为通向192.168.1子网的路由器。事实上这些设置路由的指令等价于执行对应的route指令,以设置路由,如route add 192.168.1.0 HIS ADDR -netmask 255.255.255.0。

  然而对于动态分配IP的情况,问题在于在ppp进行拨号的时候,对方的IP地址HISADDR还没有确定,因此这些设置路由的指令往往不能正确执行。必须在拨号完成,建立了PPP连接之后,HISADDR才能确定,因此设置路由的命令应该放在更合适的位置:ppp连接建立之后立即执行的文件ppp.linkup中。


MYADDR:

delete 0

add 0 0 HISADDR

192.168.1.98:

add 192.168.1.0 0 HISADDR

chinanet:

delete ALL

add 0 0 HISADDR

!bg /etc/ppp/ppp.fetchemail

  ppp.linkup文件格式与ppp.conf文件相同,它在PPP连接建立后执行,执行与拨号使用的标签相同的项,以及客户获得的地址为标签的项。通常使用MYADDR表示本机得到的IP地址,因此这个标签下的内容都将执行;而192.168.1.98项表示获得这个地址时增加下面的路由,最后一项以chinanet为标签,与ppp. conf相同,表示进行这个chinanet拨号后执行的相关动作,其中包括在后台执行的取邮件的脚本ppp.fet chmail。

  如果拨号服务器要求使用PAP或CHAP认证,而不是普通的登录认证方式,则要在ppp.conf中的使用不同的配置选项:


chinanet:

set phone 163

set login

set authname pppuser

set authkey key123

set timeout 120

set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0

delete ALL

add 0 0 HISADDR

  使用authname和authkey来定义PAP或CHAP认证方式下的用户名和口令,就能连接到使用PAP或CHAP 的拨号服务器,而具体使用哪种认证方式则由拨号服务器决定。

    * 进行拨号连接

  设置了针对具体拨号连接的配置之后,拨号就非常方便了,直接使用该拨号服务的标签进行操作。


# ppp

ppp > dial chinanet

PPP >

  使用ppp的dial命令发起连接之后,ppp连接被建立,提示符也由原来的小写ppp>变为大写PPP>,这就表示PPP连接已经正确设立了。这个时候如果使用ifconfig进行查看,就可以看到网络界面tun0 已经设置正确,并可以使用了。

  当要结束连接时,使用close或quit命令关闭连接。结束连接时将执行/etc/ppp目录下的ppp.linkdown 脚本。ppp.linkdown脚本和ppp.linkup格式相同,都会依据相同的标签执行操作。

  如果使用者租用了一条模拟专线,专门用于Internet连接。这样就不希望每次传输时都重新进行连接,而希望建立一条永久连接,ppp在后台自动拨号连接到Internet上,并一直维护这个连接。这样就可以使用-ddial 参数启动ppp。


# ppp -ddial chinanet

  -ddial参数使得ppp立即使用相应参数对应标签设置的拨号连接建立永久连接,而不管有没有实际的数据传输。而绝大多数情况下,使用者并没有租用专线,还是希望在有数据传输时才建立网络连接,在没有数据传输时断开网络连接,以减少电话连接时间。这样就可以使用-auto参数启动ppp。


# ppp -auto chinanet

  这样启动的ppp将一直停留在后台,但并不立即进行连接,而是在应用程序发出网络请求时才进行拨号,这个网络请求的目的地址应该在chinanet标签定义的网络地址范围内。而如果一段时间内没有任何数据传输,就断开连接(这个时间由set timeout命令设置,单位为秒)。


# ppp -backgroud chinanet

  -background选项使PPP立即进行拨号,并停留在后台。但与-auto不同在于,在一段没有数据传输的时间间隔后ppp将断开连接,但是ppp程序也停止执行,而不象auto参数那样,ppp一直驻留在后台监视网络连接,要再次建立连接必须重新执行ppp程序。这个选项适合最普通的网络客户,使用户能明确什么时候才建立连接。


# ppp -alias -ddial chinanet

  ppp程序的另一个有用的选项是alias。如果拨号用户内部有自己的局域网,用户或许希望让整个网络内的计算机共享一个拨号连接。使用ppp的alias选项能使FreeBSD将局域网上的网络连接请求中的本地IP地址替换为FreeBSD系统的ppp网络使用的IP地址,从而使其他用户也能访问外部网络。-alias参数应该和auto或ddial参数联合使用,以驻留在后台提供服务。这种方式比较简洁、易用,当然代理服务器和网络地址转换的方法能提供更多的控制能力。

  当使用这些参数执行ppp程序时,ppp程序将切换在后台维护PPP连接。然而由于ppp程序在后台运行,就无法输入指令以控制ppp程序的执行。为了方便使用者控制后台运行的ppp程序,ppp提供了通过socket连接的方式来接受外部输入。为了支持这个特性,便需要设置set server选项。


    set server 6670 MySecretpassword

  这个选项将使ppp程序监听6670端口,并使用MySecretpassword作为连接时认证的口令,以免ppp程序被非法控制。此后,就可以使用pppctl向ppp程序发送指令,这些指令都是ppp的标准指令。


# pppctl -p MySecretpassword 6670 set timeout 300\; dial

  除了使用标准的Intenet套接字接收pppctl的连接之外,ppp还能通过本地Unix套接字来接收输入。这就需要设置一个套接字使用的文件及其访问属性,具备更好的安全性。


    set server /tmp/ppp MySecretPassword 0177

  而在pppctl中应该使用对应的参数以指明相应的Unix套接字:


# pppctl -p MySecretpassword /tmp/ppp set timeout 300\; dial

    * 内核级PPP及拨号程序

  PPP协议只是定义了两台计算机之间如何进行通信的方式,并没有定义如何进行拨号建立连接。用户级PPP由于以应用程序的方式来实现了PPP协议,因此它可以集成拨号程序,使用起来很方便。但内核级PPP并非如此,它使用一个守护进程pppd来实现ppp协议,因而必须首先使用外部拨号程序建立连接。内核级PPP比较难以使用,因此FreeBSD使用者通常使用用户级ppp。

  但是pppd是实现PPP协议的最早方式,其他继承BSD Unix网络代码的Unix系统中也使用这种 PPP实现方式,这样pppd使用的广泛性就不仅局限于FreeBSD。很多使用者对内核级PPP进行封装,实现了多种图形化的连接工具,假如想使用这些图形化拨号连接工具的话,就需要对pppd有一定了解。因此这里只对pppd的拨号方式加以简单介绍,事实上使用ppp程序建立连接更为常用和方便。

  用来配合pppd的拨号程序有很多,最常使用的是chat,此外如kermit、tip也可以用于和 pppd进行配合。由于拨号程序要和pppd相互配合,因此需要将要发送给拨号程序的命令放入一个文件中,而在启动拨号程序时使用相关参数告诉它到该文件中读取命令。

  对于chat拨号程序,通常将它的拨号程序命名为chat.script,放在/etc/ppp目录下。


ABORT BUSY
ABORT 'NO CARRIER'
# Wait up to 5 seconds for the reply to each of these
TIMEOUT 5
'' ATZ
OK ATDT163
# Wait 40 seconds for connection
TIMEOUT 40
CONNECT
TIMEOUT 5
serrname:-\\r-sername: pppuser
assword: 123456

  使用chat -f /etc/ppp/chat.script可以启动chat进行拨号,chat程序等待PPP服务器发送 Username:提示,发送用户名,等待PPP服务器发送Password:提示,发送用户口令。然而,chat程序只能负责拨号,至于拨号完成之后的任务,就必须由pppd来负责了。

  pppd使用网络界面ppp0,当然可以在内核配置中增添配置值并重新编译核心,就可以根据需要增加可使用的ppp界面的数量。例如将可以使用的ppp界面改变为3个,则内核配置文件应包括 “ pseudo-device ppp 3” ,这样在重新编译内核,建立相应的设备文件并重新启动后,就可以使用ifconfig命令来查看可以利用的网络界面:


# ifconfig -a

ppp0: flags=8010<OINTOPOINT,MULTICAST> mtu 1500

ppp1: flags=8010<OINTOPOINT,MULTICAST> mtu 1500

ppp2: flags=8010<OINTOPOINT,MULTICAST> mtu 1500

lo0: flags=8008<LOOPBACK,MULTICAST> mtu 16384

        inet 127.0.0.1 netmask 0xff000000

  内核还可以配置ppp界面在传输时对ppp数据进行压缩,事实上用户级ppp和内核级ppp都支持传输压缩,但内核级ppp多支持两种方式,一种是ppp的BSD压缩标准,另一种为delalte压缩标准。一般都可以在内核配置中加上这两个选项,使ppp连接中可以使用这些选项,以提供更高的传输效率。那么内核配置文件中的ppp相应配置应包括:


pseudo-device   ppp     3

options PPP_BSDCOMP

options PPP_DEFLATE

  内核级ppp使用的配置文件也放在/etc/ppp目录下,文件名为options,此外各个用户可以使用自己的配置文件~/.ppprc。


# cat /etc/ppp/options

defaultroute

domain example.com.cn

crtscts

modem

deflate 12,12

idle 300

lock

  defaultroute项将在ppp连接设定之后,将缺省网关设置为PPP服务器上;domain设置本机的域名;crtscts告诉ppp使用modem的硬件流量控制,如果硬件不支持这种方式,就只好使用另一种软件流量控制方式为xonxoff;modem行使ppp使用DCD信号来判断连接是否正常,有无掉线现象;deflate 使pppd使用defalte压缩方式;idle设置了一个时间限制,当在300秒的时间内没有数据传送,就断开连接;lock则创建一个锁定文件,其他程序在发现存在这个文件后,就能得知相应的串口已经被使用。

  配置好配置文件之后,就可以使用pppd进行连接了:


# pppd /dev/cuaa1 57600 connect 'chat -f /etc/ppp/chat.script' user pppuser

  缺省情况下,使用pppd命令立即进行拨号连接,在超过idle参数设定的时间内没有数据传送的条件下断开连接并退出。然而在options文件中可以使用persist参数告诉pppd建立一条永久连接,或者使用demond参数告诉pppd停留在后台,监视网络数据,一旦有要求就立即进行连网,超时后就断开连接,但pppd仍然停留在后台等待下次数据传送。这两种形式分别等价于ppp程序的ddial和auto模式。

    * 拨号访问FreeBSD

  FreeBSD不但能够能通过PPP协议和远程拨号服务器相连接,也能够提供拨号服务,让其他计算机能够拨入本机。事实上PPP协议本身,并不没有区分客户机和服务器,PPP服务器只需要比客户机多完成一些额外的工作,如用户认证、分配IP等。然而PPP必须建立在已经设定好的连接上,而为了设定连接,拨号服务器和客户端的设置就有不同的地方。首先在硬件上,服务器上的modem必须能接受连接,建立物理连接,然后服务器和客户软件要进行额外的验证过程,最后双方才启动ppp,设定ppp连接。

    * 接受拨号终端访问

  早期的Unix使用字符终端访问主机,将字符终端通过串口连接到计算机上之后,就能通过这些终端登录进Unix系统了。但是FreeBSD下缺省屏蔽了串口的终端登录过程,要完成这个任务,管理员还必须更改/etc/ttys文件,为串口指定一个getty进程,以监视串口,一旦发现有连接请求,便立即启动登录进程login接受用户的登录。

  在/etc/ttys中有下面的行是与串行端口相关的,对应于个人计算机的四个串口,使用getty进程进行监控,但缺省状态为off,并没有打开这个功能。如果要使用某个串口进行终端连接,就需要改变相应行的设置为on,同时还可以改变第三列中的终端类型设置及最后一列的安全设置。


ttyd0     "/usr/libexec/getty std.9600" unknown   off secure

ttyd1     "/usr/libexec/getty std.9600" unknown   off secure

ttyd2     "/usr/libexec/getty std.9600" unknown   off secure

ttyd3     "/usr/libexec/getty std.9600" unknown   off secure

  getty的第一个参数std.9600指明了串口的各项参数,这个参数在/etc/gettytab中定义,定义了如波特率、校验方式、数据位、停止位以及流控方式等。缺省使用9600,指明了连接速率为9600bps,现代串口连接通常使用的连接速率要比这个设置高,因此要根据自己的串口和modem的型号,选择gettytab中的更高速率,如std.19200或std.57600。

  更改系统之后,可以使用kill -1 1使FreeBSD重新读取ttys文件,或者重起计算机,才可以使用终端连接。这时在连接在串口上的终端键盘上按下几次回车键后,字符终端将连接到计算机上,会出现登录提示。如果没有出现提示,就说明终端设置和使用的gettytab文件中的设置项不匹配,可以更改终端设置或gettytab文件中的设置,使两者使用的校验、停止位、流控等设置选项保持一致。

  如果没有专用的字符终端设备,可以使用终端仿真软件,如Windows下的超级终端,Unix下的minicom 等,都能通过串口登录到FreeBSD下。

  可以看到,使用串口连接,那么再加上modem和电话,就能够使得远程计算机能连接到这个FreeBSD系统上了。对于提供登录服务的计算机来讲,并不会注意一个连接是从串口直接相连的,还是通过modem建立的。然而这就要设置服务器的modem,必须设置为能进行应答,以接通客户计算机打入的电话来设定连接。因此必须首先初始化modem ,需要使用AT命令AT&C1&D2&S0=1&R2&W。可以通过mi nicom或ppp的term模式,直接输入这个AT指令设置modem。

  当双方都配置好串口,连接设置好modem,并且连接上电话线之后,两台远程计算机相连接的准备工作就完成了。这时可以使用通信软件,例如minicom或kermit,从一台计算机远程登录到另一台计算机上,除了需要拨号,与本地连接没有什么两样。

    * 设定PPP服务器

  如果远程计算机能正常登录进入FreeBSD,那么说明拨号连接没有问题,那么下一步就是分别配置PPP客户端和服务器端。事实上对于PPP来讲,建立连接之后,客户端和服务器端就没有区别了,区别在于建立连接的过程中,服务器要验证用户的登录并为其分配IP地址等。

  使用用户级PPP和内核级PPP均可实现PPP服务器,由于用户级PPP配置起来更为容易,因此更为常用。同样,这也需要更改配置文件/etc/ppp/ppp.conf。


dailserver:

allow users

enable proxy

set ifaddr 192.168.1.64 192.168.1.123

  以上是一个ppp程序做拨入服务器的设置例子,这个例子中允许普通可以启动这个ppp程序,并打开了代理ARP功能,使其他计算机能通过这个计算机同客户正常通信,为连接上的客户计算机分配IP地址。

  当ppp客户计算机连接到ppp服务器上之后,通过ppp服务器的路由能力,ppp客户就能和外部计算机通信了。并且两个ppp客户机之间的通信也必须经过ppp服务器转发。由于在每个ppp客户看来,其他的ppp客户是与它自己位于同一个网段内,因而它就广播ARP请求询问对方的MAC地址,以便进行直接通信。而在事实上,ppp客户之间并没有物理连接,它们之间无法直接通信,因而广播的ARP请求也不可能传送给目的计算机。此时,具备代理ARP能力的ppp服务器就能代替某个客户,回应发送ARP请求的客户。此后这个客户就以为ppp客户的物理地址就为ppp服务器的物理地址,所有的数据包都先转发给ppp服务器,然后它再转发到另一个ppp客户机中。这个代理内部的计算机回应ARP请求的功能就被称为Proxy ARP,它能够对外隐藏内部的网络结构,如内部子网或ppp连接。

  同时配置PPP用户的登录脚本为立即启动使用服务器标签的ppp程序,因此一个简单PPP用户登录脚本应为:


#! /bin/sh

exec /usr/sbin/ppp -direct dialserver

  direct参数就用于在标准Unix认证之后,立即启动ppp进程,使客户端直接与服务器端ppp交谈,以建立ppp 连接。这个文件应该是一个可执行的文件,最简单的登录脚本可以让不同的PPP用户共同使用一个拨号服务器标签,更复杂的情况应该为每个拨号用户都设置独立的选项,并在登录脚本区分用户,启动不同的拨号选项。

  由于getty在接收到连接请求之后,就立即执行login认证过程,因此系统认证提示为Login,而与前面ppp客户设置中使用Username的认证提示不同,需要修改前面的设置,才能使用前面的认证登录上服务器。但也由于getty 必须执行login认证,因此使用getty作为ppp服务器的端口监控进程,就无法进一步支持PAP或CHAP认证。为了支持这些复杂的认证方式,就需要使用mgetty或类似的端口监控进程来监视是否有连接请求。

  在FreeBSD的Handbook中有使用mgetty设置ppp服务器的例子。

    * PPP程序的其他功能

  除了最常见拨号连接上Internet之外,还可以利用ppp程序的功能来完成其他几种任务。在缺省的ppp.conf中给出了几个例子,这些例子能帮助使用者进一步了解ppp程序的能力。

    * 串口线连接

  使用串口线直接连接与使用medom除了不需要拨号之外并无不同,但是通常要在两端都使用LQR,用于帮助判断电缆的连接情况。此时客户端的ppp.conf中的设置应为:


direct-client:

set dial ""

set line /dev/cuaa0

set sp 115200

set timeout 900 10 3

set log Phase Chat LQM

set login "TIMEOUT 5 ogin:--ogin: ppp word: ppp HELLO"

set ifaddr 10.0.4.2 10.0.4.1

enable lqr

accept lqr

  而ppp服务器应该设置为:


direct-server:

set timeout 900 10 3

set log Phase LQM

set ifaddr 10.0.4.1 10.0.4.2

enable lqr

accept lqr

    * TCP上的PPP通道

  可以将PPP建立在TCP网络连接之础上,而非通过电话网络,这样就在TCP/IP网络上建立了一条 PPP通道。tcp-client为客户端计算机的设置,这里使用一个网络连接作为连接设备,tcpsrv为远程计算机的主机名,1234为tcpsrv上的TCP端口:


tcp-client:

set device tcpsrv:1234

set dial

set login

set escape 0xff

set ifaddr 10.0.5.1 10.0.4.1 255.255.255.0

  tcp-server为服务器端计算机的设置:


tcp-server:

set escape 0xff

set ifaddr 10.0.4.1 10.0.5.1 255.255.255.0

  当ppp客户端使用tcp-client进行连接时,它将向tcpsrv的1234端口发送ppp连接请求。这就要求 tcpsrv能侦测到对1234端口的连接请求,并启动ppp服务器来建立连接。因此就可以使用inetd监听上面定义的端口1234,并负责启动ppp服务器。就需要在/etc/services中应该增加相应的端口:


pppsrv            1234/tcp

并在/etc/inetd.conf中增加相应的选项:

pppsrv  stream  tcp     nowait  root    /usr/sbin/ppp ppp -direct tcp-server

  修改好inetd.conf之后,向inetd发送SIGHUP信号使得其重读设置文件。然后就可以使用ppp建立虚拟连接了。在ssh等加密传输软件的帮助下,还可以进一步设定为安全的虚拟通道连接。

    * 数据包过滤

  在ppp的auto模式下,需要根据超时设置断开连接,但是网络中一些协议会定时发送一些数据包,这些数据包主要用于保持网络数据的及时更新,大部分情况下不影响网络应用。但是这些数据包会引起ppp刷新时间设置,从而使得ppp一直保持拨号连接。

  这时可以使用ppp的过滤机制中的afilter过滤器,它定义了在auto模式时应滤掉的数据包,使得数据包不会影响超时时间。下面的三行分别不允许ICMP包和DNS包通过,最后一行允许其余的包通过。


    set afilter 0 deny icmp

    set afilter 1 deny udp src eq 53

    set afilter 2 deny udp dst eq 53

    set afilter 3 permit 0/0 0/0

  使用dial参数的情况下,也有相似的限制,这时使用dfilter主要来限制icmp数据包。


    set dfilter 0 deny icmp

    set dfilter 1 permit 0/0 0/0

  另外,还可以使用包过滤能力,按照端口、地址来允许或屏蔽某些TCP数据包。


    set ifilter 0 permit tcp dst eq 80

    set ofilter 0 permit tcp src eq 80

    set ifilter 1 permit 192.168.1.0/24 0/0

    set ofilter 1 permit 0/0 192.168.1.0/24

  ifilter表示对进入的数据包进行过滤,ofilter表示对出去的数据包进行过滤,因此上面的设置允许进行WWW浏览(80端口),并允许与192.168.1.0这个网段内的计算机进行连接。每一个过滤器最多可以定义20个规则。

    * 拨号网关

  当一个局域网上的一台FreeBSD通过PPP连接到Internet上之后,其他计算机也能通过这台FreeBSD 访问Internet,从而共享同一条拨号线路。这必须使用ppp的alias选项启动ppp,这样当内部计算机的数据包到达这台FreeBSD之后,由ppp将这些数据包中的IP地址更换为本机ppp界面上的IP,同时也会对端口地址进行调整,再发送到外部的Internet上。

  要完成这个任务,还需要将这台FreeBSD配置为允许转发IP数据包,在/etc/rc.conf中配置 gateway的值为YES。但为了使得路由保持正确,不能启动routed或gated等动态路由程序,因为这些程序会动态更改路由表,如果改动与ppp相关的路由数据,就会使得FreeBSD不能正确路由数据包。

  使用这种连接方式,再加上ppp的简单过滤能力,FreeBSD就能作为一个简易的具备一定防火墙能力的 Internet访问网关,能够提供整个内部网络访问Internet的能力,并将内部网与Internet相隔离。然而这个简易的拨号网关仅限于使用ppp界面,并且功能也有限。FreeBSD提供了更强大的防火墙能力,能完成要求更为复杂的各种任务。
 楼主| 发表于 2005-1-8 23:52:30 | 显示全部楼层
如果哪位兄弟试过之后可以,或是还要修改些什么可以行的话,还请赐教。。。多谢。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表