运用FreeBSD替代路由器实现网络地址转换
第28卷 第6期 2008年12月桂林电子科技大学学报Journal of G uilin University of Electronic Technology Vo l . 28, N o . 6
第28卷 第6期 2008年12月
桂林电子科技大学学报
Journal of G uilin University of Electronic Technology Vo l . 28, N o . 6Dec. 2008
运用FreeBSD 替代路由器实现网络地址转换
韦程馨, 潘家英
(广西中医学院信息网络中心, 广西南宁 530001)
摘 要:校园网事实上就是校园内部的Intr anet, 一般通过交换设备组网, 再通过路由器接入CERN ET 主干线路。对校园网使用效果影响较大的因素就是网络出口问题。校园网的特殊性要求必须使用NA T (网络地址转换) , 这就需要出口的核心设备应具有较强的地址转换能力, 通常这是由路由器来完成的, 然而路由器有限的CPU 处理能力限制了处理的效率。利用Fr eeBSD 的高性能和高可靠性, 通过对内核的编译, 启用基本系统内建网络服务功能k I P-FI REWA L L , 配合当今廉价而高速的P C 硬件, 进行网络地址转换(N AT ) 和数据包过滤, 替代路由器实现高效、稳定、安全的网络传输。
关键词:Fr eeBSD ; IP FIR EW A L L ; N AT ; 内核; 路由器
中图分类号:T P 393. 06 文献标识码:A 文章编号:1673-808X (2008) 06-0511-05
Using freeBSD to replace router to make network address translation
W EI Cheng -x in , P A N J ia -y ing
(Informat ion Net work Center , Guangx i T ra ditional Chi nese Medical University , Nanning 530001, China )
Abstract :A campus netw or k is a n intr anet on cam pus connected to the CERN ET by Sw it ch Net wo rking and the Ro uter. A significant impacting facto r of the campus netw or k effect is net wo rk o ut put pro blem. Ca mpus net wo rk must use N AT (net wo rk addr ess tra nslatio n) and r equires t he cor e equipm ent o f output to switch the Netw o rk Ad-dr ess po wer fully. T his par t of w or k is usually car ried o ut by the Ro uter. Ho wev er , the Ro uter is inefficient han-dling with CPU and thus limits the efficiency o f Net wo rk A ddr ess Co nv ersio n . In v iew of the efficiency and r elia-bility of Fr eeBSD , com piling the ker nel , using the netw or k serv ice functio n in the basic sy stem ——I PF IRE-WA L L , and coo per ating the cheap but hig h speed PC har dw ar e , o ne can achieve the netw o rk addr ess conver sio n (NA T ) and packet filter ing , then finally r eplace the R outer t o make efficient , st able and secur e netw or k t ransmis-sion.
Key words :Fr eeBSD ; IP FI REWA L L ; N A T ; kernel; r outer
随着校园网的高速发展, 学校上网用户也随之增多, 校园网用户数量的增加使核心路由器负担也随之加重。许多学校建网初期购买的核心路由器已经不能满足目前校园网成倍增长的数据流量处理。笔者所在的学校2003年网络用户数是400个, 教科网出口的核心路由器是cisco 2600, 2008年校园网用户达到了3000个, 此时核心路由器cisco 2600已经不堪重负, 经常出现用户访问教科网时掉包、连接速度慢甚至短
暂中断等现象, 路由器的cpu 和内存使用率都在80~95左右。为了保证校园网能稳定顺畅地运行, 笔者考虑到采用FreeBSD 实现cisco2600的网络地址转换等功能。
FreeBSD 是非常优秀的操作系统, 是由BSD 、386BSD 和4. 4BSD 发展而来的Unix 的一个重要分支, 是理想的Internet 和Intr anet 服务器[1]。即使是在
超负载状态下, 它仍然能够有效地使用内存, 为同时
收稿日期:2008-11-20
) , , ,
,桂林电子科技大学学报 2008年12月512
运行的数以千计的用户进程提供良好的响应时间。Fr eeBSD 源于BSD ——美国加州大学伯克利分校开发U NIX®版本, 它由来自世界各地的志愿者开发和维护。FreeBSD 为不同架构的计算机系统提供了不同程度的支持。由于在性能和稳定性方面的突出表现, 使得它被广泛应用为服务器操作系统。
[2]
IPFW 紧密集成, 而ALTQ 则需要配合PF 使用。
IPFILTER 对于流量整形可以使用IPFILTER 的NAT 和过滤功能以及IPFW 和dummy net 配合, 或者使用PF 跟ALTQ 的组合。IPFW, 以及PF 都是用规则来控制是否允许数据包出入您的系统, 虽然它们采取了不同的实现方法和规则语法。笔者倾向于使用IPFILTER, 因为它使用了传统的无状态规则和规则编写方式, 达到简单状态逻辑所期望的目标。
IPFIREW ALL (IPFW) 是一个由FreeBSD 发起的防火墙应用软件, 它由FreeBSD 的志愿者成员编写和维护。它使用了传统的无状态规则和规则编写方式, 以期达到简单状态逻辑所期望的目标。IPFW 由七个部分组成, 其主要组件是内核的防火墙过滤规则处理器, 及其集成的数据包记帐工具、日志工具、用以触发NAT 工具的“(转发) 规则、高级特殊用div ert ”途工具、dum my net 流量整形机制, “fw d rule ”转发工具, 桥接工具, 以及ipstealth 工具[3]。
内核编译:内核是FreeBSD 操作系统的核心。它负责管理内存、执行安全控制、网络、磁盘访问等等。尽管FreeBSD 可以动态修改的现在已经越来越多, 但还是需要重新配置和编译内核。
(1) 创建新内核并进行编译
root#cd /usr/sr c/sys/i386/conf //FreeBSD 内核核心程序放置目录
root#ls
GENERIC LINT //GENERIC 系统自带的默认内核配置文件LINT 内核配置文件的解释
root#cp GENERIC M YCRENET //复制默认内核将副本命名为M YCRENET
对MYCRENET 进行编译修改root#ee M YCRENET
对新内核M YCRENET 进行如下编译
#cpu I386_CPU //根据服务配置选定使用的CPU 类型, 本文根据实际选择I686_CPU
#cpu I 486_CPU //禁用 #cpu I586_CPU //禁用 cpu I686_CPU
ident M YCRENET //当前重新编译的新内核名MYCRENET
#options INET6 //禁用ipv6 #options NFS //从安全考虑禁用NFS [2]
[2]
1 连接教科网的网络拓扑图
下面以笔者所在学校教科网连接作为案例, 运用Fr eeBSD 内建网络服务功能——IPFIREWALL 实现网络地址转换转换功能, 网络的拓扑结构如图1所示。
图1中, 曙光服务器配置:CPU 2*P4XEON2. 4硬盘36G 、内存1G 、网卡2*3com 千兆G 、
外网口bg e 0:210. 36. 6. x
内网口bg e1:192. 168. 1.

1
图1 教科网连接拓扑图
2 FreeBSD 内核编译
在曙光服务器上安装最新版FreeBSD 7. 0-RE-LEASE , 以root 身份登陆使用ee 文本编辑器进行编译并且在内核中加入IPFIREWALL.
Fr eeBSD 的基本系统内建了三种不同的防火墙软件包。它们是IPILT ER(也被称作IPF) 、IPFIRE-WALL (也被称作IPFW) , 以及OpenBSD 的Packet-Filter (也被称为PF ) 。FreeBSD 也提供了两个内建的、用于流量整形(基本上是控制带宽占用) 的软件包:.
,第6期 韦程馨等:运用F reeBSD 替代路由器实现网络地址转换 513
#o ptions M SDOSFS //禁用ms -dos 文件系统
#options UCONSOLE
#optio ns U SERCON FIG //禁用开机选择启用编译器
#options KT RACE //禁用debug 功能 添加支持多CPU 和超线程 o ptions SM P //添加支持多CPU o ptions APIC _IO
o ptions HTT //添加支持超线程 将IPFIERWALL 加入新内核启动
optio ns IPFIERWALL //将IPFW 作为内核的一部分来启用
optio ns IPFIERWALL _VERBOSE //启动日志
options IPFIERWALL _VERBOSE _LIMT =50 //限制通过sy slog d 记录相同包个数
options IPFIERWALL _IPDIVERT //启用NAT 功能
完成保存退出
(2) 对新内核M YCRENET 进行检测 r oot #/usr /sbin /config M YCRENET (3) 编译和安装新内核
r oot#cd /usr /sr c/sys/i386/conf
r oot #cd . . /../com pile /M YCRENET
ro ot #make depend ; m ake ; m ake install ; re-bo ot //编译安装新内核, 重启
功能通过
firew all _ty pe =" OPEN " //允许所有数据 firew all _quitet="YES"
firew all _script ="/etc /r c . firewall " tcp _ex tensions="YES" //支持扩展T CP natd _interface="bge0" //指定nat 网卡 natd _enable="YES" //开机自动启用nat static _routes=“net1”//添加静态路由 ro ute _net 1=“-net 192. 168. 0. 0/16192. 168. 1. 2”
3. 2 编写IPFIERWALL 访问控制规则脚本
ro ot #ee /etc /rc . firew all 在rc. firew all 中添加如下内容 ipbnat="ipfw -q add" pia =" bg e 0" pib="bge1" #skip =" skipto 800" ipfw -q -f flus
本案例中防火墙上已经配置了相应的安全策略。为了减轻防火墙压力, 在FreeBSD 上添加访问控制规则只允许校园网用户访问教科网免费站点。
$ipbnat 10allow ip fro m any to any via $pib
$ipbnat 20allo w ip fr om any to any via lo 0 $ipbnat 30div er t natd ip from any to 58. 18. 0. 0/15out via $pia
$ipbnat 30div er t natd ip from any to 58. 20. 0. 0/16out via $pia
$ipbnat 30div ert natd ip fr om any to 212. 187. 169. 0/24out via $pia
$ipbnat 30div ert natd ip fr om any to 210. 32. 0. 0/12o ut v ia $pia
$ipbnat 30divert natd ip from any to 63. 211. 66. 0/24out via $pia
$ipbnat 30div er t natd ip from any to 59. 32. 0. 0/12out via $pia
.
. 添加允许访问教科网免费站点的规则 .
3 实现网络地址转换(NA T) 和访问控制
3. 1 配置FreeBSD 的相关网络信息
两张3COM 千兆网卡在Fr eeBSD 系统下被标明为:bg e 0(外网口) 和bg e 1(内网口)
设置IP 地址
r oot#ee /etc/rc. co nf 在rc . conf 中添加如下内容
ifconfig _bge 0=" inet 210. 36. 6. x netm ask 255. 255. 255. 240"
ifconfig _bge1=" inet 192. 168. 1. 1netm ask 255. 255. 255. 0"
defaultr outer="210. 36. 6. x " //网关 g atew ay _enable="YES"
,桂林电子科技大学学报 2008年12月514
in via $pia
$ipbnat 800allo w ip from any to any via $pia
$ipbnat 801deny ip from any to any IPFIREWALL 是按照规则号从小到大顺序执行, 如果匹配一条, 那么它就不再执行下面所有的规则[3]。比如, 把allow ip from any to any 放置在最前面, 那么后面所有的规则将都不会被执行。3. 3 启用日志记录
在新内核中加入了记录日志功能, 需要对sys-log . conf 进行编辑
ro ot #ee /etc /sy slo g . conf
在sy slog. co nf 中添加如下内容 *. notice; kern. debug; lpr. info; mail. crit; new s . er r /v ar /log /messages
lpr. info /var/lo g/lpd-errs cro n. */var/cron/log ! ipfw
*. */v ar /log /security //记录NAT 日志记录到的文件名
3. 4 编写设置FreeBSD 的域名解释服务器
如果没有正确的设置域名解释服务器即使编译了内核和配置IPFIREWALL , 校园网用户也无法实现正常访问教科网。
添加域名解析服务器 ro ot #ee /etc /resolv . conf
在resolv. conf 中添加域名服务器IP 地址 nam eser ver 210. 36. x. x nam eser ver 202. 103. 224. 68保存退出。
net . inet . tcp . r ecvspace =65536 //最大的接受T CP 缓冲区空间
net . inet . udp . sendspace =65535 //最大的接受U DP 缓冲区大小
net . inet . udp . m axdgram =65535 //最大的发送U DP 数据缓冲区大小
net . local . stream . sendspace =65535 //本地套接字连接的数据发送空间
net. inet. tcp. rfc1323=1 //加快网络性能的协议
net. inet. tcp. rfc1644=1 net . inet . tcp . rfc 3042=1 net. inet. tcp. rfc3390=1 net . inet . ip . fw . verbose =1 net. inet. ip. fw. verbose _lim it=5
kern. ipc. max so ckbuf=2097152 //最大的套接字缓冲区
kern . max files =65536 //系统中允许的最多文件数量
kern . max filesper proc =32768 //每个进程能够同时打开的最大文件数量
net . inet . icmp . dro p _redirect =1 //屏蔽ICM P 重定向功能
net . inet . icmp . log _redirect =1 net. inet. ip. redirect=0
net. inet. icmp. bmcastecho =0 //防止ICM P 广播风暴
net . inet . icmp . maskrepl =0
net. inet. icm p. icmplim =100 //限制系统发送ICMP 速率
net. inet. tcp. alw ays _keepalive =1 //设置为1会帮助系统清除没有正常断开的TCP 连接
net. inet. tcp. msl=7500 //防止DOS 攻击, 默认为30000
net. inet. tcp. inflight. enable =1 //为网络数据连接时提供缓冲
ker n. ipc. somax conn =32768 //并发连接数, 数字越大占用内存也越大
kern. secur elevel=0 //设置kernel 安全级别
net. inet. tcp. lo g _in _vain=1 //记录下任4 系统性能优化及测试
4. 1 系统性能优化
由于启用了IPFIREW ALL 的网络地址转换功能必须对FreeBSD 进行网络性能优化, 提高系统的安全性和数据的处理能力。
root #ee /etc /sysctl . conf 在sy sctl. conf 中添加如下内容
net. inet. tcp. sendspace=65536 //最大的待T
,第6期 韦程馨等:运用F reeBSD 替代路由器实现网络地址转换 515
net . inet . udp . lo g _in _vain =1 //记录下任何UDP 连接
net. inet. udp. checksum =1 //防止不正确的udp 包的攻击
kern. ipc. shm _use _phys=1 //仅为线程提供物理内存支持, 需要256兆以上内存
kern . ipc . shm max =67108864 //线程可使用的最大共享内存
kern. ipc. shmall=32768 //最大线程数量 net . local . stream . recv space =65536 //lo 本地数据流接收和发送空间
net. local. dg ram. max dg ram=16384 net. local. dg ram. recv space=65536
net . inet . tcp . inflight _enable =1 //为网络数据连接时提供缓冲
net. inet. raw. m ax dgram =65536 //本地数据最大数量
net. inet. raw. recvspace =65536 //本地数据流接收空间
net . inet . ip . fw . dy n _max =65535 //ipfw 防火墙动态规则数量, 默认为4096, 增大该值可以防止某些病毒发送大量TCP 连接, 导致不能建立正常连接
net . inet . ipf . fr _tcpidletim eo ut =864000 //设置ipf 防火墙TCP 连接空闲保留时间, 默认8640000(120小时)
编辑完成, 将结果保存后退出并重新启动。4. 2 测试
在校园网内使用tr acert 命令测试tracert w w w. edu. cn
1<1m s <1ms <1ms 192. 168. 8. 25421ms <1ms <1ms 192. 168. 1. 131ms 1ms 3m s 210. 36. 6. x
参考文献:
. . .
1012m s 14ms
7ms
galax y. net. edu. cn [202. 112. 0. 36]
使用tracert 命令进行路由跟踪, 结果显示数据包通过210. 36. 6. x 转发, 说明NAT 成功启动运行,
数据传输正确。
5 结束语