第二十四章 NAT 服务器.docx
- 文档编号:25556344
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:15
- 大小:341.43KB
第二十四章 NAT 服务器.docx
《第二十四章 NAT 服务器.docx》由会员分享,可在线阅读,更多相关《第二十四章 NAT 服务器.docx(15页珍藏版)》请在冰豆网上搜索。
第二十四章NAT服务器
第二十四章:
简易NAT服务器
24.1什么是NAT呀:
24.1.1NAT的功能:
我想,大家对于NAT一定是有所耳闻才对,那么什么是NAT呢?
NAT其实是NetworkAddressTransfer的简写,简单的说,就是将要传送出去的封包进行IP转换的动作啦!
由TCP封包的架构图,我们可以发现TCP封包里头有来源与目的地的IP及port之信息在Header里面,那么如果透过某些技术,是否可以将这个header的内容改变呢?
当然可以啰!
就直接使用iptables即可!
他可以帮助我们将打包过后的TCP封包上面的header进行修改的动作,以方便我们工作!
而其中用的最广泛的例子就属:
频宽分享的部分了!
怎么说呢?
很简单呀!
还记得我们在局域网络架构里头提到的网络架设方法吧?
对啦!
就是利用一部Linux当作主机,而将我们对内(intranet)与对外(Internet)的连接分离开来,以达到良好的隔绝效果,此外,由于内部私有网络的私有IP并不能直接连接上Internet上面,所以你的所有内部的私有IP的计算机,将无法直接连通到Internet上面去,阿!
那岂不是很无趣?
!
再想一想,咦!
我们的Linux主机不是有『对内及对外』的两组IP吗?
一组是私有IP(跟intranet同一个网段)一组则是可以连上Internet的实体IP,而我们的私有网域的所有计算机都是以Linux主机为Gateway的,那么如果我在我的对内的所有私有IP在对外联机的时候(透过Linux主机),将他的TCP封包的header资料里面,那个sourecIPandport(来源IP与对应的埠口)改成Linux的对外的IP与埠口,那么不就可以连出去Internet啦!
哈哈!
没错!
这就是NAT的概念之一啦!
如上图所示,当我的区域内的具有192.168.1.100的client要对外联机的时候:
1.这个client的gateway设定为NAT主机,所以当要连上Internet的时候,该TCP封包就会被送到NAT主机啦;
2.而透过这个NAT主机,她会将client的对外联机的封包之source的IP(192.168.1.100)改成ppp0(假设为拨接情况)这个实体IP啰,同时并记忆这个联机的封包是由哪一个(192.168.1.100)client端传送来的;
3.由Internet传送回来的封包,当然由NAT主机来接收了,这个时候,NAT主机会去查询原本记录的路由信息,并将目标IP改回原来发送出此一封包的Client端;
4.最后则由NAT主机将该封包传送给原先发送封包的Client啰!
其实这也很好理解啦,你可以想成这样:
『当您在私人赛车场上比赛的时侯,不必管您是否有注册过的车牌﹔但开到马路上却非得要一个监理站核发的车牌不可。
如过您要将跑车开到街道上,必须要改挂一个合法的车牌。
这时候,赛车场老板(NAT)自有办法帮您弄一个就是了。
』!
这样可以了解了吗?
24.1.2联机示意图:
由上面的说明您应该可以了解了吧?
!
没错,你的NAT主机上面,至少需要『两块网络接口』请注意,我说的是『网络接口』而不是『网络实体适配卡』呦!
以拨接为例,由于拨接之后会产生ppp0这个拨接后产生的网络接口,加上你再提供一个IPalias,那么自然就有两个以上的网络接口啰!
这么说应该很容易了解了吗?
底下我以两块实体网络适配卡的布线情况作为联机的示意图,至于一块网络卡进行NAT的图标,将在待会说明啰。
在上面的图标当中,很清楚吧!
我们的Linux共有两块实体适配卡,一块接在调制解调器上面,一块接在Hub/Switch上面,并且以此Hub/Switch连接所有的局域网络内的计算机,以组成内部的私有网域!
鸟哥个人是比较喜欢这样的接线方式啦!
不过,人各有志,而且这样的情况也不见得适合所有的人,所以还是得了解一下其它种类的连接方法!
好吧,等一下再告诉你~
24.1.3核心版本:
嘿嘿!
干嘛呀!
怎么又提到核心版本了?
这个就得特别说明一下啰!
因为不同的核心版本所提供的TCP封包的伪装技术,及防火墙软件都不相同,所以需要特别的关心一下您的核心版本!
首先,用『uname-r』看一下你的版本呢,如果是出现2.2.xx的话,则是属于较早期的核心,那个是使用ipchains作为技术的,至于如果是2.4.xx的话,那么就是属于iptables的模块较棒啰!
oKernel2.2.xx:
使用ipchains做封包伪装的技术;
oKernel2.4.xx:
使用iptables做封包伪装的技术!
简单的判别方法,如果是RedHat7.0(含7.0)以前的版本,使用的是2.2.xx的核心,自然只有ipchains而已,而如果是RedHat7.1(含7.1)以后的版本,则使用的是Kernel2.4.xx,因此最好使用iptables的技术!
因为2.4.xx的IP处理模块当中,大部分都是针对iptables来作为处理的软件,ipchains的已经不含在2.4.xx里头了!
由于我是以RedHat7.2与7.3作为范例的,所以自然以iptables为准啰!
如果还想要以ipchains来进行架设NAT的朋友,不妨参考一下这篇旧的文章:
oNAT服务器
24.1.4谁需要NAT架设:
由前面NAT(NetworkAddressTransfer)的功能介绍,我们知道他可以作为频宽分享的主机,当然也可以管理一群在NAT主机后面的Client计算机!
呵呵!
所以NAT的功能至少有这两项:
o频宽分享:
我想,架设NAT的朋友大部分都是希望可以达到频宽分享的目的的!
这毕竟是NAT主机的最大功能啰!
o安全防护:
咦!
关安全防护什么事呀!
?
别忘了,NAT之内的PC联机到Internet上面时,他所显示的IP是NAT主机的实体IP,所以Client端的PC当然就具有一定程度的安全了!
最起码人家在scan的时候,就侦测不到你的Client端的PC啦!
安全多了!
24.2一块网络卡的NAT架设:
刚刚上面我们已经提过了,要架设NAT的话,只要『两块网络接口』就够了,倒不一定需要两块『实体网络卡(NIC)』,是的!
所以我们先以较为便宜的方式(因为少了一块网络卡呀!
)来介绍NAT的架设!
底下是我们介绍的安装步骤:
24.2.1关闭一些系统服务的port:
为了安全起见,还是检查一下吧!
好了,首先,我们需要先来了解一下,咦!
我的Linux主机的功用为何?
!
如果只是单纯的要作为NAT的话,那么Linux主机所开放的port是越少越好!
鸟哥可不希望你开机了大约一个星期,就开始苦苦哀嚎说自己的主机无法以root登入了......。
关闭port的方法与选择『系统一定需要的服务』的介绍在限制联机的埠口里面已经说的很清楚了!
你可以按这里来了解到底什么是『一定要激活的服务』。
24.2.2实体线路配置图:
怎么安装联机呢?
赶快买线材来架设吧!
由于Linux主机只有一张网络卡,所以所有的装置(包括Linux主机,client端计算机,数据几等等)都需要接在Hub/Switch上面,有点像底下的样子:
1.这个时候请特别留意啦!
如果是使用ADSL拨接制的话,那么应该会有安装rp-pppoe这个东西,并且在拨接之后会产生ppp0这个网络接口,同时不要忘了,激活网络卡的时候不是就已经有eth0这个实体网络界面的设定吗?
,嘿嘿!
那么我们不是就有两个网络接口了吗?
!
没错!
就是这样!
但是,如果是Cable或者是其它的固定制的方法的话,那么跟这个也差不多啦!
不过由于Cable的方式没有自动产生两个以上的网络界面,所以就需要设定IPAlias啰,也就是eth0:
0啦!
亦即就是以eth0跟eth0:
0这两个接口来联机啰!
反正,只有一张网络卡,也可以进行NAT的啦!
^_^""
2.设定网络接口:
分别以拨接、Cable及固定IP为例啦!
24.2.3ADSL拨接制:
在进入Linux并激活网络卡之后,我们会得到eth0这个界面,再加上拨接之后的ppp0界面,所以我们就已经会有个两网络接口,分别是ppp0,eth0!
此外,我预计的私有网域的IP选用192.168.1.0/24这个CClass的网域,其中,LinuxNAT主机的私有IP选择为192.168.1.2这一个!
第一个网络接口--ppp0--的设定:
这个东西应该不难吧!
就是我们在连上Internet一文里头提到的关于rp-pppoe的拨接上网方式。
实体网络卡--eth0--的设定:
请注意,如果您要同时使用ppp0及eth0,那么请在拨接之前激活eth0吧!
以取得内部的eth0这个网络界面的设定!
(注:
如果你不知道如何设定的话,那么就请照我的方式来填写即可):
24.2.4Cable浮动式:
在Cable的情况又不太相同了!
这个时候只有两块网络接口,分别是eth0,eth0:
0啰!
设定为:
实体网络卡--eth0--的设定:
请注意,由于cable使用的是DHCP主机,所以这个时候请特别留意你底下的设定呦!
(注:
如果你不知道如何设定的话,那么就请照我的方式来填写即可):
虚拟网络接口--eth0:
0的设定:
在IPAlias的设定当中,我们已经在Router当中说明过多次了!
请务必回到该章节再读取一次,如果您不记得如何设定的原理的话!
24.2.5固定IP的情况:
跟cable的设定几乎一模一样,只有两个接口,分别是eth0,eth0:
0,需要特别注意的是eth0这个东西,你必须要『填写正确的IP,netmask,network,broadcast而且ONBOOT=yes才可以!
』,而eth0:
0则与上面相同!
24.2.6激活私有网域的IP网络接口:
激活之后顺便观察一下路由的信息!
24.2.7.设定其它档案:
还有一些网络的相关档案要设定呦!
/etc/hosts,/etc/resolv.conf,/etc/sysconfig/network,
别忘了我们还有其它的档案要设定呦!
很重要的:
24.2.8.设计NAT的shellscripts:
直接将一些指令写在scripts里头执行较快啦!
正确的情况之下,目前你的Linux主机上面应该是已经可以正常的对外联机的才对!
而且内部也已经可以正确的联机成功了才对!
如果还没有成功的话,请赶快再到局域网络设定里头去查一查资料去!
好了,接着下来只要执行一个程序,嘿嘿!
就可以将NAT激活喔!
这个就好玩了!
因为基本上,我们使用的是iptables这个东西,自然就需要这个ip_tables的模块了!
而查看模块与加载模块的指令分别为lsmod,modprobe哩!
好了,你可以直接在命令提示字符底下进行工作:
当然啦,如果要设计的人性化一点,可以使用底下的script来达成:
呵呵!
很简单吧!
这样就OK啦!
不过请特别留意上面表格当中的那个黄色的字体,其中,EXIF指的是对外联机的网络接口,而EXNET指的则是要伪装IP的内部虚拟网域的CClass的网域数据啰!
然后你将这个文件名称为nat.sh的资料,放置在你的/usr/local/nat底下,你可以这样做:
这样一来,下次开机就可以自动的连上ADSL之外,还可以自动的执行NAT的功能呦!
6.Client端的设定参数:
包含的是网络的设定参数而已!
这个我们留在最后面讲!
24.3两块网络卡的NAT架设:
真是的,这个部分的联机架设在局域网络联机当中已经提过很多遍了!
这里不再重复的说明!
仅列出几个重要的地方,基本上,跟刚刚一张网络卡的设定方式几乎完全相同,只是那个eth0:
0变成了eth1而已啦!
我的设定为:
·eth0为对内的实体网络卡,具有私有IP,其IP为192.168.1.2。
·eth1为对外的实体网络卡,被用来进行ADSL的拨接,所以开机的时候不要设定on!
同样的,我们的设定方式为:
1.关闭一些系统服务的port:
跟上面的一模一样,这里就不再多做说明!
2.实体线路配置图:
也跟刚刚上面第一个图标提到的差不多,不再说明!
3.设定网络接口:
重要的地方在安装第二块网络卡!
安装网络卡的相关技巧请前往连上Internet参考!
不过,对于第二块网络卡的安装,在这里有些建议:
基本上,第二张网络卡最好不用使用与第一张相同芯片的卡,例如你第一张卡使用RTL8139,那第二张卡最好使用别的卡。
因为鸟哥曾经发现,在鸟哥的RedHat6.1英文版中,安装两块相同的(同公司出的)RTL8139,结果竟然两张卡的输出输入都是经由第一张!
也就是说,第二张卡根本就没有用处!
并且,也很容易发生eth1与eth0捉错的情况!
所以,请记得,『第二张网络卡尽量不要使用与第一张网络卡相同芯片的卡!
』当然,你要使用同一个芯片的网络卡也是可以啦!
目前我的机器上面就是使用两块RTL8139的网络卡,不过,在安装的时候请特别留意,不要同时安插两块,最好是一块安装完毕之后,再安装另一块!
会比较好一点啦!
安装的步骤可以是(请注意,我以ADSL拨接为例的,其中,eth0为对内,eth1为对外,请依照您的设定来修正呢!
):
o关机、硬件安装:
这个不用再提了吧!
,先关机,然后拆开外壳,插入PCI网络卡即可;
o开机、硬件扫瞄:
然后再开机,而于开机的过程中,你的Linux会主动去找到这一张网络卡(如果这张卡是有被Linux支持的!
);
o安装网络卡驱动程序:
如果在上一步骤中,你的网络卡并不能被捉到,哪就比较伤脑筋!
请到连上
Internet参考网络卡的驱动程序安装方法
o检视设定/etc/sysconfig/network-scripts/ifcfg-eth1:
在安装完了网络卡的驱动程序之后,在/etc/sysconfig/network-scripts/中,应该会有ifcfg-eth1这一个档案。
请设定他吧!
因为是对外卡,我这里假设他是利用ADSL拨接的,所以可以是这样:
1.这样就成功啰!
很简单吧!
2.设定其它档案:
其它一些网络的相关档案也要设定!
亦即/etc/hosts,/etc/resolv.conf,/etc/sysconfig/network,设定的方式跟上面一样!
3.设计NAT的shellscripts:
基本上,设定的方式跟上面也是一模一样的啦!
你依旧可以仅使用上面的script来进行NAT的设定,只是要注意那个黄色字体部分的设定,如果你跟我的情况不同,那么就需要修改一下啦!
24.3观察路由信息:
在整个NAT的设定当中,最经典的错误联机讯息来自于路由信息的错误啦!
这个在我们的连上Internet及网络侦测文章当中已经说明过了,不过,我们这里再次提醒一下!
免得您又犯了同样的错误了!
由于网络在进行连接的时候,都会指定所谓的router或者是gateway的设定,除非是来自于广播的网域之联机。
而我们在设定网络时,常常会犯了一个错误,那就是指定错了Gateway了!
请你参考一下/etc/sysconfig/network的修改方式,在ADSL拨接及Cable联机时,请『务必』不要设定gateway才好!
再来,请常下达route的指令来观察一下您的linux主机的路由设定是否正确呦!
24.3.1客户端的设定:
在Client端的设定真是简单的可以了!
由于我们上面的网域设定的是192.168.1.0/24这个CClass的私有网域,所以你只要记得几件事情:
1.network设定需要为:
192.168.1.0
2.broadcast设定需要为:
192.168.1.255
3.netmask设定需要为255.255.255.0
4.IP设定需要为192.168.1.1~192.168.1.254之一,且『不能重复』
5.Gateway或者说是通讯闸需要设定为你的Linux的对内IP,以我的例子来说,就是192.168.1.2!
6.DNS的设定:
这个最容易出错了,你的DNS设定需要是你的ISP给你的DNSIP,如果你不知道的话,可以填入168.95.1.1这一个中华电信的DNS或者是139.175.10.20这一个SeedNet的DNS即可!
千万不要设定为192.168.1.2呦!
会连不出去!
大致上就是这样啦!
至于Client端通常是Windows,他的设定可以参考一下这里说!
至于Linux端则需要查看一下连上Internet里面的固定IP的设定啦!
24.3.2安全性:
请注意,在这个例子当中,我们并没有使用到封包分析的动作,有的只有IP伪装而已,所以:
·对于Client端来说,由于已经经过了IP伪装的功能,所以基本上,你通过NAT主机连出去的封包的IP都会是『NAT主机对外的实体IP』,因此对于内部Client端而言,由于网络Cracker几乎都是根据IP来进行破坏,而因为你连出去的封包IP是NAT主机的实体IP,自然你的Client端就比较安全多了!
基本上,Client端在NAT之内,不要安装防火墙软件也还好,但是『防毒软件一定要安装!
』因为你毕竟会接收电子邮件呀等等的,所以还是可能会中毒啦!
!
·对于Server端来说,其实这样的一个主机并不是十分的安全的,因为我们并没有设定防火墙的规则,好家在的是,我们在一开始就将所有的主机的port都关掉了(请注意,这些port关掉之后,完全不会影响到NAT主机的频宽分享功能,所以不用担心!
),因此还算有点小安全啦!
无论如何,小心驶得万年船,所以在没有必要的时候,而且你只是要作为NAT主机的时候,请千万将Linux主机的所有的port都先关掉呦!
至于增加安全性方面,底下我们会简介一下iptables配合TCP_Wrappers的方法来抵挡部分的IP与部分的服务呦.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二十四章 NAT 服务器 第二 十四