当前位置:操作系统 > Unix/Linux >>

用FreeBSD建立拨号网关

家庭网络结构如下:

  W2K(192.168.0.100)

  -----以太网----->

  FreeBSD(192.168.0.200)

  -----PPP拨号----->

  internet

  实现要求如下:

  在FreeBSD主机上使用调制解调器拨号上网,并对局域网内其它计算机提供该拨号连接的共享。

  在FreeBSD主机上设置缓冲型的DNS系统以避免对域名的重复查询,减轻网络流量。

  在FreeBSD主机上设置Squid软件对局域网提供http代理服务并配置ipfw防止用户绕过代理服务器。

  在FreeBSD主机上使用Fetchmail及Qpopper为局域网用户代收外部电子邮件。

  安装PPP

  众所周知,在FreeBSD下有两种类型的PPP,在这里为简单起见使用用户级PPP(User-PPP),因为

  内核级PPP(Kernel-PPP)需要更多设定配置方面的工作。

  当然在开始之前弄清设备所用的硬件资源可使工作事半功倍。为此,需要了解以下内容:

  调制解调器所用端口及速率(我假设为所用端口为串口1、速率为115200)

  上网的账号及口令

  ISP分配的静态IP地址(如为动态分配则无须知道)

  现在要根据这些资料来配置并编译新的内核以支持用户级PPP和防火墙功能,在内核配置文件中加入以下内容:

  options

  IPFIREWALL

  #防火墙功能

  options

  IPDIVERT

  #转移套接字(支持NAT)

  #

  串(COM)口

  device

  sio0

  at

  isa?

  port

  "IO_COM1"

  flags

  0x10

  tty

  irq

  4

  #

  伪设备

  -

  数字说明分配之单元数

  pseudo-device

  tun

  1

  #

  分组隧道

  编译完新内核后,就可以根据需要修改/etc/ppp/ppp.conf文件了(相应的防火墙功能稍后配置),该文件的样本如下:

  default:

  set

  device

  /dev/cuaa0

  set

  log

  Phase

  Chat

  LCP

  IPCP

  CCP

  tun

  command

  set

  speed

  115200

  set

  dial

  "ABORT

  BUSY

  ABORT

  NO\\sCARRIER

  TIMEOUT

  5

  \"\"

  AT

  OK-AT-OK

  ATE1Q0

  OK

  \\dATDT\

  \T

  TIMEOUT

  40

  CONNECT"

  set

  timeout

  120

  set

  ifaddr

  10.0.0.1/0

  10.0.0.2/0

  255.255.255.0

  0.0.0.0

  add

  default

  HISADDR

  enable

  dns

  nat

  enable

  yes

  163:

  set

  phone

  163

  set

  authname

  163

  set

  authkey

  163

  在此样本文件中,set

  device说明使用的端口,在此我用了串口1;set

  speed说明设备使用的速率,我用的是115200;set

  ifaddr说明PPP连接所用的IP地址,第一个地址为本地地址及网络掩码,而第二个地址为ISP处的拨号服务器地址及掩码。如果使用ISP动态分配的地址,就可以象我这样用掩码为0的地址,它说明可以接受任何地址。否则请指定您的ISP分配的静态地址。

  nat

  enable

  yes说明该PPP拨号连接可以让局域网络内的其它计算机共享。它使用NAT技术将网络内有连接请求的主机本身的本地IP转换为PPP连接所用的IP,从而可以访问外部互联网。

  适当修改后可以用ppp命令来进行拨号测试了:

  #ppp

  ppp

  >

  dial

  163

  PPP

  >

  当提示符由小写变为大写时说明已经拨号成功了,这时可以ping一下ISP处的DNS服务器地址,看是否能通。另外还可以用netstat命令检查网络状态:

  #

  netstat

  -nr

  Routing

  tables

  Internet:

  Destination

  Gateway

  Flags

  Refs

  Use

  Netif

  Expire

  127.0.0.1

  127.0.0.1

  UH

  10

  389

  lo0

  192.168

  link#1

  UC

  0

  0

  ed0

  192.100.53.23

  202.102.141.141

  UH

  1

  0

  tun0

  192.168.0.100

  52:54:4c:19:6d:d

  UHLW

  2

  3968

  ed0

  1198

  要挂断退出可以在提示符下打quit命令,当然还可以用killall

  -INT ppp来中止当前的连接,否则如果空闲120秒就会自动挂断了(可以用settimeout参数进行调整)。这样,简单的PPP拨号连接配置就完成了。要更多的了解配置PPP方面的内容,可以参考Setting

  up

  User

  PPP(FreeBSD手册中关于用户级PPP的设定细节)。

  使FreeBSD成为拨号网关

  前面提到在/etc/ppp/ppp.conf中使用nat

  enable yes可以让网络内其它主机共享此PPP拨号连接,当然要达到这样效果,还必须让FreeBSD成为网关以允许转发IP数据包,所以在/etc/rc.conf文件中加入:

  gateway_enable=YES

  然后重新启动系统使其生效,当然,如果不想重启,可以用以下命令:

  sysctl

  -w

  net.inet.ip.forwarding=1

  注意:PPP拨号会修改路由表,为使路由稳定,系统不能启动动态路由守护程序,如routed或 gated,因为它们会动态修改路由表。

  设置缓冲型DNS

  为了对网内计算机查询域名进行缓冲,首先修改/etc/resolv.conf,因为PPP的enable dns参数会为系统设定从ISP处获得的域名服务器,要使系统优先使用本地域名服务器才能发挥缓冲型DNS的特性,这时可以把其它服务器作为后备:

  domain

  meaculpa.net

  nameserver

  127.0.0.1

  nameserver

  202.102.14.141

  nameserver

  202.102.15.162

  以上添加127.0.0.1作为首域名服务器。然后用/etc/namedb/make-localhost产生适合本机的localhost.rev文件。注意,make-localhost脚本属性为644,需以root身份将其改为744才能运行。

  接着修改/etc/namedb/named.conf,以使BIND运行为缓冲方式,样本如下:

  options

  {

  directory

  "/etc/namedb";

  forward

  only;

  forwarders

  {

  202.102.14.141;

  };

  };

  zone

  "."

  {

  type

  hint;

  file

  "named.root";

  };

  zone

  "0.0.127.IN-ADDR.ARPA"

  {

  type

  master;

  file

  "localhost.rev";

  };

  如使用BIND4则修改named.boot,样本如下:

  directory

  /etc/namedb

  primary

  0.0.127.IN-ADDR.ARPA

  localhost.rev

  cache

  .

  named.ca

  forwarders

  202.102.14.141

  options

  forward-only

  最后就可以向/etc/rc.conf文件加入以下行使域名服务启动:

  named_enable="YES"

  这样重启后就拥有一个缓冲型的DNS系统了,这时可以设置局域网内其它计算机的TCP/IP属性,将DNS服务器指向该系统以利用其特性。

  安装Squid

  为了改善慢速的拨号连接并阻塞内部计算机直接访问外部网站,可以安装一套代理/缓冲系统并添加一定的防火墙规则。

  在FreeBSD上我用了Squid这套软件,当然可以有两种安装方法,一是用现成
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,