前言
随着个人计算机的普及,对于家庭用户来说,拥有一台以上PC的已经不少了,我们希望能够方便地同时上网。一些规模较小的学校、科研单位、商业机构,由于难以负担足够IP地址的费用,对共享IP上网也有迫切的需要。
随着宽带上网的逐渐推广,多台计算机共享一个Internet高带宽的连接显得越来越有意义。比较常见的做法一是购买专门的网络地址翻译(下简称NAT)机,二是在一台网关计算机上安装NAT软件或者应用程序代理服务软件1,其他计算机通过这个网关上网。第一种方法虽然安装、维护比较简便,性能好,但是需要进行一定的设备投资,并且NAT机的功能相对比较单一,难以实现其他Internet服务。第二种方法,网关机的操作系统如果使用Windows 95/98则稳定性不佳,不适合长期开机;使用Windows NT/2000则对作为硬件配置要求相对较高。
于是手头有一台低配置PC机的用户可能会想到Linux,但是本文要介绍的是BSD。与Linux不同,BSD是AT&T UNIX的“后代”,它不象Linux那样发行版本众多,却有更好的性能、可靠性与安全性。
目前有3个源码开放的BSD版本:FreeBSD,NetBSD和OpenBSD。FreeBSD是用户数最多的版本,它的主要特点是性能好,Yahoo、ftp.cdrom.com等知名网站用的就是这个操作系统。NetBSD的特点是对各种硬件平台的广泛支持,它支持从手持设备到大型服务器的多种平台。OpenBSD的特点是安全性,在OpenBSD的网址,我们可以看到这样一句话:“三年来没有发现缺省安装的OpenBSD的一个远程安全漏洞!”,另外它支持的硬件平台也不少,不过目前还不支持SMP(对称多处理器)。
现在我们就以线缆(Cable)宽带接入为例,谈谈如何利用基于OpenBSD操作系统的网关机,使多台计算机共享一个线缆调制解调器(Cable Modem,下称CM)的Internet连接。
安装OpenBSD
我们先准备一下硬件:Pentium133 CPU,16M内存,1G硬盘,2块以太网卡。其实OpenBSD可以在低得多的配置上运行得很好,不过既然我们会开通一些网络服务,配置还是不要太低了。另外如果共享上网的客户机很多,可以适当增加内存。显卡、显示器、软驱、CDROM和键盘,仅仅在安装、配置的过程中需要,一旦系统投入运行,就都不需要了。
两点建议:(1) OpenBSD的分区工具的功能强大,但是易用性不大好(不如Linux),所以建议将整个硬盘全部分配给OpenBSD使用,不要和其他操作系统混用--不是不可以,而是分区比较麻烦。(2)网卡建议用常见的NE2000兼容网卡,比如Realtek RTL8029(AS)芯片的10M PCI卡。OpenBSD支持的网卡并不是很多,用名牌的网卡对于速度等方面并没有太大的帮助,万一兼容性有问题还要添麻烦。
OpenBSD有3种安装方式:CDROM安装,FTP安装和硬盘安装。如果PC的BIOS支持光盘启动的话,那么CDROM安装是最方便的,我们来看一下安装的主要过程。
从CDROM启动后选择(I)nstall,对提示的“Specify terminal type”直接按回车采用默认值,系统会列出当前所有的硬盘并提问“Which disk is the root disk?”。注意对于IDE接口的硬盘,BSD给它的设备名是 wd0,wd1,……;对于SCSI接口的硬盘是 sd0,sd1,……。我们的PC有一个IDE硬盘,输入wd0并回车。系统提问“Do you want to use the *entire* disk for OpenBSD?”,输入yes并回车,系统会启动fdisk并将整个硬盘空间都分给BSD系统。输入write、quit,系统会保存分区设置并启动disklabel。Disklabel的作用是在fdisk建立的给BSD用的BIOS分区中,划分出不同的BSD分区。我们可以在disklabel的命令提示符“”下,随时使用?命令显示帮助信息,使用p命令打印当前的BSD分区划分情况。为了不搞得太复杂,我们仅把它划分为一个“/”和一个swap分区。先用z命令把BSD分区清空,再用“a b”命令添加一个新分区,offset直接回车用缺省值,size输入“128M”(如果任务比较重而有足够的磁盘空间,也可以大一些比如256M甚至512M),FS type用缺省的“swap”。然后用“a a”命令添加一个新分区,offset用缺省值,size输入“*”使用全部剩余空间,FS type用缺省的“4.2BSD”。最后用w、q保存并退出disklabel。接着系统会提示更改mount point信息,看看wd0a和wd0b是不是分别mount到了“/”和“swap”,完成后输入done结束。如果一切正确就一直回车直到看到“Are you really sure that you're ready to proceed?”,输入“y”回车,系统就开始格式化硬盘了。格式化完毕,先不要进行网络配置。接着是设置root用户的口令。下面问要不要运行X Window System,这个图形用户界面对我们没有用,如果硬盘空间够的话,选上也可以。下一步就是正式开始安装了,系统会问从什么地方安装(我们这里是CDROM)、CDROM设备名、文件系统种类以及安装文件位置,全部用缺省值。接着系统列出全部安装包,可以输入一个“*”全部选上,再输入一个“done”开始安装。安装完毕后系统问“Extract more sets?”,直接回车跳过。下一步是设置时区,中国是在Asia下面,选择你所在的城市。最后系统会建立启动信息等等,直到看到“CONGRATULATIONS! You have successfully installed OpenBSD! ”说明安装已经成功,系统返回命令提示符下,输入“reboot”并回车,重新启动系统。
配置网络
重新启动后,用root用户和刚才设置的口令进入系统,键入“ifconfig -a”查看所有网络接口,我们会看到有诸如“ne3: …… media: Ethernet ……”这样的显示,针对不同的网卡OpenBSD会有不同的接口名,这里假设用的的是NE2000兼容网卡,命名为“ne”,后面的数字表示它插在第几号PCI槽(从AGP槽的那面开始数)。现在假设我们的两块网卡分别插在3号、4号PCI槽里,则它们的接口名分别是ne3、ne4。现在我们打算把ne4接到CM上,把ne3接到内部LAN的HUB上。
由于CM是通过DHCP来获得IP地址的,我们先把ne4设置成通过DHCP获得IP地址:
# echo dhcp /etc/hostname.ne4
OpenBSD启动的时候发现hostname.ne4中的内容是“dhcp”,就会启动dhcp client去请求IP地址、子网掩码、网关地址、DNS地址等设置。可以手工调整dhcp client的配置,但是这里没有必要了。
然后我们设置连接内部LAN的ne3的网络设置(假设内部网络使用的是保留的IP地址192.168.0.x,子网掩码是255.255.255.0):
# echo "inet 192.168.0.1 255.255.255.0 NONE" /etc/hostname.ne3
将ne3的IP地址设置为192.168.0.1,最后的那个NONE表示不指定网卡的media option。
为了在NAT机上可以正确进行DNS解析,我们还需要配置一下/etc/resolv.conf文件,举例来说:
# cat /etc/resolv.conf
nameserver 210.52.149.2
nameserver 202.96.209.133
lookup file bind
第一、二行列出了两个不同的DNS服务器的IP,第三行表示先从/etc/hosts文件中查找,如果失败再到DNS服务器查找。
第二、
NAT大概的运作方式是这样的:假设内部网络上的计算机A需要访问Internet,则A把数据包发送到网关机N,N收到A的数据包后,把请求者的IP地址换成自己,然后发送到目的地去。收到目的地发来的回答后,N再把它转发到A机。NAT是在低层次起作用的,与在高层次起作用的代理比如应用层代理(常见的有HTTP proxy等)相比,对于A机来说,它不用将自己的应用程序设置成使用代理(有的应用程序并不支持代理),除了无法从外部直接连接到A机之外,所有的使用都和直接连接Internet一样。
下面我们来配置NAT:
修改 /etc/rc.conf
ipfilter=YES
ipnat=YES
修改 /etc/sysctl.conf
net.inet.ip.forwarding=1
再修改配置防火墙规则,现在我们先不设置任何复杂规则,仅仅允许所有的信息通过:
# cat /etc/ipf.rules
pass in from any to any
pass out from any to any
然后是NAT规则:
# cat /etc/ipnat.rules
map ne4 192.168.0.0/24 - ne4/32 portmap tcp/udp 10000:60000
map ne4 192.168.0.0/24 - ne4/32
这些规则表示将内部网的IP地址192.168.0.x 、子网掩码为255.255.255.0,映射到ne4网络接口上去。第一行是映射TCP和UDP的,第二行是映射其他协议的。
现在所有的配置都完成了,把CM和ne4连接好,并把内部LAN的HUB连接到ne3上,键入reboot重启动。将内部LAN上的计算机的网卡接口的IP设置成 192.168.0.2,192.168.0.3……,子网掩码为255.255.255.0,网关为192.168.0.1,DNS服务器为ISP提供的DNS服务器的IP(比如210.52.149.2,202.96.209.133),根据需要可能需要重启动。试试看是不是已经可以上Internet了?
进一步的配置
下面介绍一下在我们刚才构筑的基于OpenBSD的NAT网关机的基础上,进一步设置一些网络服务的方法。值得注意的是:从安全性考虑,不是必要的服务就不要开!
1. 远程登录
OpenBSD缺省安装后,启动的服务很少。telnet服务是缺省关闭的,因为telnet是明文的协议,有被窃听的危险。OpenBSD打开了ssh服务,这是一个加密的远程登录服务。为了使用这个服务,必须在客户机上安装支持ssh协议的终端软件。在Windows操作系统下,可以用SecureCRT。安装完终端软件后,建立到服务器192.168.0.1的连接,注意使用standard SSH。
2. 串口终端
对于这个NAT服务器来说,我们可以不要显卡、显示器和键盘。但是如果配置网络出了问题,远程登录无法连接到服务器就比较麻烦了--因为我们已经把服务器的显示系统和键盘都去掉了。所以有必要建立一个比较保险的连接途径。我们可以通过串口终端的方式,连接到服务器。
a) echo -P /boot.config 这个目的是告诉boot模块,如果发现键盘不存在,就进入serial console模式;