FreeBSD+IPFILTER实现整网(N个Vlan)透明代理上网(1) 1:前言 我们学校以前是用的教育网,所有办公机器、机房用的都是公网地址,由于前段时间更换网络出口,换为网通的宽带,所以才作了代理,因为学校领导还没完全确定以后还用不用教育网,所以要求下面机器原来的网络设置不能改变,经过自己摸索,加上CU、freebsdchina上面的各位高手帮忙,现在已经全部搞定,实现了透明代理,下面的机器网络设置跟以前用教育网的一样,可以随时再开通教育网,不敢独享,拿出来给大家看看。 另外一点说明,原来的公网地址因为当作私有地址来用了,我下面贴出来的代码均以10.0.*.*这些私网地址代替,这样可能其他兄弟们用的时候更合适一些,外部网通个的公网地址我以a.b.c.d和a1.b1.c1.d1等代替,如果要参考我的使用可换为你们的公网ip。 2:系统安装 用的是最新的5.3release,用最小化安装,因为后面要自己编译内核,就把内核sys装上了,man也是需要的,其他的都不要,因为只作代理,所以连ports都不要。 3:/etc/rc.conf里面的设置 这里要说明一下:我们的内部地址总共用了12个c的地址,10.0.40.0/21和10.1.44.0/22。为了实现整网的机器都能透明的通过代理服务器上网,需要在路由器上把默认路由指向代理服务器的内网网卡地址,我们这里的核心交换是cisco6509,就是一条语句:ip route 0.0.0.0 0.0.0.0 192.168.0.1,这样做还不够,还需要在代理服务器上添加路由,把数据包经由内网网卡返回。代理的内网卡地址我设置的192.168.0.1,它所在vlan网关是192.168.0.2,掩码是255.255.255.252,这个vlan也就192.168.0.1这个地址可用J 下面是rc.conf的内容,我加入了一些优化的选项: ifconfig_em0="inet a.b.c.d netmask 255.255.255.240" ifconfig em0 a1.b1.c1.d1 netmask 255.255.255.255 alias ifconfig_em1="inet 192.168.0.1 netmask 255.255.255.252" sendmail_enable="NONE" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" ## 关闭SENDMAIL portmap_enable="NO" inetd_enable="NO" kern_securelevel_enable="YES" kern_securelevel="2" syslogd_enable="YES" syslogd_flags="-ss" firewall_enable="NO" gateway_enable="YES" ipfilter_enable="YES" ipfilter_program="/sbin/ipf" ipfilter_rules="/etc/ipf.conf" ipfilter_flags="" #IPFilter作为kernel,而不是作为模块 ipnat_enable="YES" ipnat_program="/sbin/ipnat -CF -f" ipnat_rules="/etc/ipnat.conf" ipmon_enable="YES" ipmon -o N > /tmp/nat.log & static_routes="static1 static2" route_static1="-net 10.0.40.0 -netmask 255.255.248.0 -gateway 192.168.0.2" route_static2="-net 10.1.44.0 -netmask 255.255.252.0 -gateway 192.168.0.2"