FreeBSD手册上建议使用编译内核的方式来支持IPFW,但在很多时候,特别是新安装机器或虚拟机中时,不希望过多的涉及内核的操作,更希望用一种快捷的方式来使用IPFW。
实际上,在/boot/kernel目录下,有两个IPFW的内核模块,我们随时都可以加载它:
# ls /boot/kernel/ipfw*
/boot/kernel/ipfw.ko /boot/kernel/ipfw_nat.ko
前一个就是ipfw模块,后一个是ipfw的nat模块,用来提供NAT(网络地址转换)功能,除了WEB、FTP、数据库等服务器外,在大多数情况下,都需要加载它。
1、加载ipfw模块
#kldload ipfw
ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled
出现的几句话表明:
(1)divert禁用,这个现在问题不大了,做nat一般用内核的nat。
(2)forwardin禁用,这个一般问题也不大,除非你有需要重定向的应用,比如web劫持。
(3)默认为deny,也就是deny ip from any to any,禁用所有的数据包。该规则同时也提示:远程操作将被中断,所以在远程操作ipfw的时候,最好同时再加一句话:
kldload ipfw && ipfw add 65530 allow ip from any to any,否则你就被锁到外面了。
(4)log禁用,这个问题也不大,一般不编译内核都是临时性的,日志功能不是太重要。
2、加载ipfw_nat模块:
#kldload ipfw_nat
3、编写基础的规则:
(内网卡,em0,ip:192.168.1.1,外网卡em1,ip:172.16.1.1)
ipfw nat 10 config ip 172.16.1.1
ipfw add 100 nat 10 ip from any to any in via em1
ipfw add 200 nat 10 ip from any to any out via em1
ipfw add 65530 allow ip from any to any
4、做nat的时候,不要忘了要启用网关,如果不确定,那么就把这句加上吧:
sysctl net.inet.ip.forwarding=1
该贴由hui.chen转至本版2014-11-5 17:04:57