第二章:配置成为网关服务器
网关服务器是一台连接外部Internet网和内部家庭网络的计算机,它一般插有两块网卡,一块设置为外网卡,和ISP连接,一般有固定IP地址,如“202.115.65.225”;另外一块设为内网卡,IP地址设置为虚拟的地址,用得比较多的是“192.168.0.1”,它连接家里的HUB,使服务器成为家中局域网的一员。家中其他的电脑只要将IP设为“192.168.0.*”,“*”表示2-254的数字,注意不要两台电脑的IP地址设为相同,否则他们都将无法使用。把子网掩码设为“255.255.255.0”,网关设为“192.168.0.1”就都通过网关服务器上网了。接下来的内容讲述如何利用FreeBSD将该服务器配置成为能让所有客户机同时上网的网关服务器。
首先,在电脑主机上要有两块网卡,在此例中是两块RTL8029芯片PCI网卡。由于FreeBSD实现网关功能需要防火墙的支持,而不巧的是内核默认并没有配置防火墙支持,因此得先重新配置并编译内核才行。内核源代码目录在/usr/src/sys/i386下面,最小化安装时它并没有被安装,所以必须先安装。
第一步:安装内核源代码
启动FreeBSD,以root用户登陆,以下“#”开头的均是在电脑上执行的命令,输入命令注意大小写。看到“#”提示符之后运行
#/stand/sysinstall
命令执行后会出现图8的画面,我们选择“Index”后按空格键,在接下来的界面分别用空格键选“Distributions,Adding”、“Src”,在最后出现的界面仅仅选择“Sys”,这时放入FreeBSD的安装光盘,用“tab”键切换到“OK”按钮上回车就会将内核的源代码拷贝到相应的目录了。
图8
#cd /usr/src/sys/i386/conf /*现在可以进入内核源代码配置文件GENERIC所在目录了*/
#ee GENERIC /*用ee编辑器编辑GENERIC文件*/
加入如下内容
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPDIVERT
然后按ESC+回车保存退出
#config GENERIC /*用修改后的配置文件配置内核*/
# cd ../../compile/GENERIC
#make depend all install /*重新编译内核*/
接下来是漫长的编译内核过程,在该电脑上执行了1个小时左右之后回到“#”命令提示符模式,这样是成功配置完成的标志,用“reboot”命令重新启动电脑。
#reboot
第二步:配置网络
由于我们在安装FreeBSD的时候并没有配置网卡,重新启动电脑后的工作就是先配置网卡,以管理员“root”身份登陆后运行“ifconfig”命令察看目前检测到的网卡状态
#ifconfig
屏幕上会显示类似如下的结果:
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::5054:abff:fe1e:8895%ed0 prefixlen 64 scopeid 0x1
ether 52:54:ab:1e:88:95
ed1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::2e0:4cff:fe80:132c%ed1 prefixlen 64 scopeid 0x2
ether 00:e0:4c:80:13:2c
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552
faith0: flags=8002<BROADCAST,MULTICAST> mtu 1500
看看最上面两个设备就是你的两块网卡,我的两块RTL8029被标明ed0和ed1。
接下来修改配置文件“/etc/rc.conf”来设置网卡的参数
#ee /etc/rc.conf
添加如下内容
ifconfig_ed0=”inet 202.115.65.225 netmask 255.255.252.0”
ifconfig_ed1=”inet 192.168.0.1 netmask 255.255.0.0”
defaultrouter=”202.115.65.65”
第一行设置ed0这块网卡连接Internet,其IP为202.115.65.225,子网掩码为255.255.252.0,具体IP地址和子网掩码(netmask)需要根据情况修改;第二行设置ed1为内网卡,IP为虚拟地址192.168.0.1,子网掩码为255.255.255.0,这是个C类网,第三行设置连接互联网的网关的地址,这个可以咨询你的ISP得到。
继续在/etc/rc.conf中添加内容
gateway_enable="YES"
firewall_enable="YES"
firewall_type="simple"
firewall_quiet="YES"
tcp_extensions="YES"
natd_interface="ed0"
natd_enable="YES"
这些东西主要是设置防火墙(Firewall)类型,让系统启动防火墙、支持网络地址转换(NAT)并告诉系统通过“ed0”进行地址转换。
然后按ESC+回车保存退出
为了能解析域名我们还要在/etc/resolv.conf 加入域名服务器地址
#ee /etc/resolv.conf
添加
nameserver 202.115.64.33 #这是西南交大的主域名服务器
nameserver 202.116.64.34 #这是西南交大辅域名服务器
第三步:修改/etc/rc.firewall文件让所有的电脑可以通过防火墙自由进出
#cd /etc/
#ee rc.firewall
按”Ctrl+u”进入该文件最末尾,追加如下几行
/sbin/ipfw -f flush
/sbin/ipfw add divert natd all from any to any via ed0
/sbin/ipfw add pass all from any to any
然后按ESC+回车保存退出,就搞定了,是不是很简单?这里简单解释一下,第一行是将前面的防火墙规则全部清除,这也是为什么将这些行加在该文件的最后的原因;第二行是告诉服务器所有的数据包从ed0这块网卡上面通过地址转换NAT出去,ed0是连接Internet的外网卡;第三行设置防火墙为给所有用户通行。
如果要检验设置是否正确,请执行“#sh /etc/rc.firewall”看看是否有如下输出,有的话则正常
Flushed all rules.
00500 divert 8668 ip from any to any via ed0
00600 allow ip from any to any
第四步:配置客户机
重新启动你的这台服务器。家中其他的客户机只要把IP设为“192.168.0.*”,子网掩码设为“255.255.255.0”,设好ISP给你的DNS,网关设为“192.168.0.1”,就可以让全家的电脑通过这台服务器一起上网了,一台这样的服务器能耗少,稳定性好,几乎不会死机,如果情况不这么顺利,上不了网的话,那你先到服务器器上试试用“ping”命令对网关进行测试,如果失败的话执行”arp –ad”命令之后往往就可以解决问题,此命令用来删除服务器缓存中错误的网卡物理地址与IP地址的映射表。
接下来可以用telnet服务来远程管理这台服务器,为了启动该服务需要编辑“/etc/inetd.conf”文件,把“telnet”前面注释用的“#”去掉,重新启动之后服务器就会启动该服务,不过为了能在远程登陆,还需用“adduser”命令创建一个新用户用来登陆,这里假设为“zhp”。创建的原因是由于服务器出于安全考虑,拒绝“root”用户远程登陆,在远端如果需要得到管理员的权限可以先以普通用户登陆后执行“su”命令和管理员密码得到管理员权限,不过该普通用户必须属于“wheel”管理组,在该用户创建之初即可加入他到“wheel”管理组。
如果只有很少几台电脑需要共享这台电脑上网,可以不买集线器,你只要有一种一转二的网线转接头就可以了,如图9所示,理论上每增加一个转接头就可以多接入一台客户机,一个这样的转接头在电脑城大概3元一个,比买集线器经济多了。连接的时候注意内网卡ed1和第一个一转二的接头之间的网线不是普通的网线,而是两台电脑直连的那种网线,其内部连线经过了交叉,其他的网线均是普通网线。这种连接的优点就是节省一个集线器,但弊病就是各个客户端之间不能相互访问,不过后面还会介绍一种可以解决这个问题的方法,那就是用samba把FreeBSD服务器变成没台客户机都能访问的文件服务器。这样它就可以充当一个大家的中介,问题也就解决了大半。
图9