linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > unix > unix提高 >
栏目导栏
资料搜索
热门文章
·20%的SOLARIS知识解决80%的问题
·Solaris启动过程详解 zt
·STRUTS 源码学习笔记
·查看Solaris系统硬件配置的命令
·Unix系列shell程序编写(中)
·SOLARIS技巧篇
·snort源码分析
·Unix系列shell程序编写(下)
·在solaris 10/x86下安装oracle
·Apache源代码分析——关于模块
·HP-UX基本指令快速参考
·Solaris安全配置手册
·solaris 10 硬盘安装
· Tomcat Server源码启动分析
·Solaris8 双网卡配置(路由器用
最新文章
·solaris系统安全配置
·RHEL5.0操作系统下NFS服务的配
·Solaris Linux 9下Vsftpd的配置
·在HP-UX下建立只归属于某个目录
·SolarWinds2002使用说明
·从外部存储划盘并加入vg,为fs扩
·因带库问题导致系统光纤卡报错
·Unix下多线程中条件变量的使用
·UNIX和Linux中信号的个数
·不同的类UNIX操作系统密码破解
·AIX系统下Domino邮件服务器安装
·限制ROOT用户远程登陆UNIX系统
·Unix操作系统入侵追踪反击战
·AIX CDE不能启动的故障一般性解
·CentOS4.4用VSFTPD架设FTP服务
Google
 
freebsd VPN 搭建
[ 作者:Linux联盟收集  加入时间:2006-06-14 12:45:00  来自:Linux联盟收集 ]
我前前后后一共折腾了四天才弄完,真是麻烦死了,不过需要跟大家说明的是其实VPN(PPTP方式)的配置在FreeBSD上面并不困难,大家只需要5分钟就能解决了,其余99%的时间我有一半再跟tun0搏斗,结果发现我犯了个低级错误,另外一半时间我在跟ipfw搏斗,发现了VPN的连接机制还挺复杂。好了废话不多说了,let's go
  
  我的目的是做一台ADSL拨号网关,这个网关上由MPD作为VPN网关的守护进程,使用PPTP协议作为传输协议,由于这台机器上有samba服务器,所以我无法开放我的所有端口,我必须封锁所有不需要的端口。正因为这样花了很长时间研究PPTP协议到底需要通过防火墙上的那些端口和那些协议。配置的目的已经告诉大家了,下面是配置的过程。
  
  首先从ppp拨ADSL说起,如果您对于使用ppp连接PPPoE(也就是ADSL使用的连接方式)已经非常熟悉了,那就可以跳过这一段直接看后面的。使用ppp连接PPPoE是非常简单的,FreeBSD在安装好之后你会在/etc/ppp/目录下看到一个叫做ppp.conf的文件,你把这个文件修改成下面的样子就可以连接PPPoE了,文件内容如下:
  
  default:
  set log Phase Chat LCP IPCP CCP tun command
  ident user-ppp VERSION (built COMPILATIONDATE)
  
  # Ensure that "device" references the correct serial port
  # for your modem. (cuaa0 = COM1, cuaa1 = COM2)
  #
  set device PPPoE:rl0
  set speed sync
  set mru 1492
  set mtu 1492
  set ctsrts off
  set timeout 60 # 3 minute idle timer (the default)
  enable dns # request DNS info (for resolv.conf)
  
  papchap:
  #
  # edit the next three lines and replace the items in caps with
  # the values which have been assigned by your ISP.
  #
  
  set authname #username#
  set authkey #password#
  set timeout 60
  set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
  add default HISADDR # Add a (sticky) default route
  
  第一部分是设置日志的方式和一些默认信息
  
  set device PPPoE:后面需要改成你的网卡的驱动,我的是Realtek的8139,所以就是rl0了,下面是设置最大发送/接受单元,PPPoE默认是1492,然后timeout是在你是用auto方式的时候设置的超时时间,超过这个时间将会断线。enable dns是打开从ISP服务端接收分配的DNS,后面papchap部分是设置你的PPPoE帐号信息,最后两句是设置路由信息的,请务必添加。
  
  注意标签后面的语句要有缩进,至少缩进一个空格,在帖子里可能看不到,大家要注意!修改过配置文件之后你就可以用ppp -ddial papchap来试验一下,如果连接上了网络就没问题了,在rc.conf文件中添加下面两句就可以在开机的时候启动ppp拨号:
  
  ppp_enable="YES"
  ppp_mode=ddial
  ppp_nat="YES"
  ppp_profile="papchap"
  
  其中ppp_mode=后面是ppp的方式,可选的有auto ddial background等等,具体的信息可以从man ppp中获得。以上就是PPP拨PPPoE的配置,可以看到非常的简单。
  
  下面一部分是启动IPFW的防火墙,这个需要修改默认得内核设置,同时使用MPD也需要对内核进行修改,所就在这里同时都修改了。我使用的是升级版本的IPFW,也就是被称作IPFW2的防火墙,在FreeBSD4.x上使用这个防火墙需要重新编译IPFW,这需要你事先安装了FreeBSD4.6以上的源码在你的硬盘上,然后执行下列步骤升级你的IPFW:
  
  cd /usr/src/sbin/ipfw
  make -DIPFW2
  make install
  cd /usr/src/lib/libalias
  make -DIPFW2
  make install
  
  或者在你/etc/make.conf里面添加IPFW2=TRUE
  
  然后mak world来升级你的防火墙
  
  升级IPFW完毕之后,接下来就是修改内核了,重新编译内核需要经过如下步骤,首先进入/sys/i386/conf/目录,里面有两个文件,一个是GENERIC,另一个是LINT,具体的说明信息我就不赘述了,我只讲一下我修改内核的过程。
  
  首先
  
  cp GENERIC mykern
  
  编辑mykern增加如下的部分:
  
  options NETGRAPH
  options NETGRAPH_PPPOE
  options NETGRAPH_SOCKET
  options NETGRAPH_ETHER
  options IPFW2
  options IPDIVERT
  options IPFIREWALL_VERBOSE
  options IPFIREWALL_VERBOSE_LIMIT=100
  options IPSTEALTH
  options ACCEPT_FILTER_DATA
  options ACCEPT_FILTER_HTTP
  
  退出编辑器
  
  config mykern
  cd ../../compile/mykern
  make depend
  make
  make install
  
  然后重新启动机器内核的更新就已经完成了。
  
  这样IPFW2的安装就已经完成了,我们先不打开防火墙,我们先配置mpd来建立PPTP的服务器。关于MPD的安装其实非常简单,你可以自己手动编译,但我还是推荐大家用ports来安装,因为我实在是想不出什么理由来不用ports安装:)
  
  如果你安装了ports到你的硬盘上,你通过下列步骤就可以完成mpd的安装了
  
  cd /usr/ports/net/mpd
  make install
  make clean
  
  安装完毕之后,ports会自动创建/usr/local/etc/mpd目录
  
  并把配置文件的样本存放在这个目录里面,可以通过修改已有的配置文件样本来完成对mpd的配置,以mpd.conf.sample为例,首先cp mpd.conf.sample mpd.conf
  
  然后修改下面的部分
  pptp:
  new -i ng0 pptp pptp
  set iface disable on-demand
  set iface enable proxy-arp
  set iface idle 1800
  set bundle enable multilink
  set link yes acfcomp protocomp
  set link no pap chap
  set link enable chap
  set link keep-alive 10 60
  set link mtu 1460
  set ipcp yes vjcomp
  set ipcp ranges 192.168.1.1/32 192.168.1.50/32
  set ipcp dns 192.168.1.3
  set ipcp nbns 192.168.1.4
  #
  # The five lines below enable Microsoft Point-to-Point encryption
  # (MPPE) using the ng_mppc( netgraph node type.
  #
  set bundle enable compression
  set ccp yes mppc
  set ccp yes mpp-e40
  set ccp yes mpp-e128
  set ccp yes mpp-stateless
  
  这个是sample里面的默认配置,下面对于需要修改的部分做出说明实际上我们需要修改只有三行,就是下面三行
  
  set ipcp ranges 192.168.1.1/32 192.168.1.50/32
  set ipcp dns 192.168.1.3
  set ipcp nbns 192.168.1.4
  
  第一行是设置你的本地VPN网关的地址,如果你是像我一样用NAT来区分内外网的话这个应该是网关的内网地址,后面的是对方拨入以后将会在内网获得的地址,这个地址倒是没有什么特殊要求,就是首先这个地址需要和内网处于一个网段,否则访问不了,第二后面可以设置一个掩码,来控制这个地址可能的范围,如果这个地址被占用了,将会分配一个再限定范围内的地址给客户端,这个范围由"/"后面的掩码来控制。
  
  第二行是指定你内网使用的DNS服务器的地址,注意这个将会在用户连入的时候同内网地址一起被分配给用户
  
  第三行和第二行类似,是指定Netbios服务器的地址,如果内网没有WINS服务器这行可以不写。最后我还增加了一行命令,再不增加这个命令的时候mpd看起来也是正常运转的,但是我不太放心还是加了这行加密指令
  
  set bundle enable encryption
  
  下面我们还需要稍微修改一下mpd.links.sample
  
  pptp:
  set link type pptp
  set pptp self 1.2.3.4
  set pptp enable incoming
  set pptp disable originate
  
  上面的部分里面需要修改一下set pptp self 1.2.3.4这一行,这行是指定mpd的pptp服务器绑定在那个地址上面,如果是我们现在使用ppp拨叫ADSL的情况,会遇到网络界面改变,ip地址改变的情况,就不能定义这一句,所以针对我们的情况,我们要去掉这句,其他的我们就不用改了
  
  当然我们还要修改一下mpd.secret文件
  
  这个文件定义了拨入用户的用户名和密码
  
  用户名写在前面,密码写在后面用引号引起来,就像下面这样
  
  fred "fred-pw"
  
  当然还可以指定这个用户必须从那个地址或者网段来拨入,就像下面的例子:
  
  joe "foobar" 192.168.1.1
  bob "x34"foon" 192.168.1.10/24
  
  之后我们还可以添加一句来默认让mpd执行pptp的这组设置,需要修改配置文件的这个部分:
  
  default:
  load pptp
  
  sample文件里面还有配置多用户登陆的情况下的样本,我就不用在写了,配置是一样的改完这些之后只要运行mpd -b就可以启动了
  
  由于考虑到安全原因我没有书写启动脚本在开机的时候启动mpd,因为对于防火墙来说在没有用的时候多开一个端口就多一份危险,但是也许很多人需要在开机的时候自动运行mpd,下面我还是提供一个启动脚本给大家,可以放在/usr/local/etc/rc.d/目录下面记住要加上执行权限。
  
  #!/bin/sh
  
  PREFIX=/usr/local
  
  case "$1" in
  start)
  if [ -x ${PREFIX}/sbin/mpd -a -f ${PREFIX}/etc/mpd/mpd.conf ]; the
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息