使用FreeBSD配置基于ADSL的VPN网关+防火墙

我前前后后一共折腾了四天才弄完 , 真是麻烦死了 , 不过需要跟大家说明的是其
实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 , 具体的说明

推荐阅读