关于NAT

来源:互联网 发布:mysql num rows 错误 编辑:程序博客网 时间:2024/05/22 07:50

什么是 NAT 呀:

· NAT 的功能:


  我想,大家对于 NAT 一定是有所耳闻才对,那么什么是 NAT 呢?NAT 其实是 Network Address Transfer 的简写,简单的说,就是将要传送出去的封包进行 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 资料里面,那个 sourec IP and port (来源 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)自有办法帮您弄一个就是了。』!这样可以了解了吗?

· 联机示意图:


  由上面的说明您应该可以了解了吧?!没错,你的 NAT 主机上面,至少需要『两块网络接口』请注意,我说的是『网络接口』而不是『网络实体适配卡』呦!以拨接为例,由于拨接之后会产生 ppp0 这个拨接后产生的网络接口,加上你再提供一个 IP alias ,那么自然就有两个以上的网络接口啰!这么说应该很容易了解了吗?底下我以两块实体网络适配卡的布线情况作为联机的示意图,至于一块网络卡进行 NAT 的图标,将在待会说明啰。

 

  在上面的图标当中,很清楚吧!我们的 Linux 共有两块实体适配卡,一块接在调制解调器 上面,一块接在 Hub/Switch 上面,并且以此 Hub/Switch 连接所有的局域网络内的计算机,以组成内部的私有网域!鸟哥个人是比较喜欢这样的接线方式啦!不过,人各有志,而且这样的情况也不见得适合所有的人,所以还是得了解一下其它种类的连接方法!好吧,等一下再告诉你~

· 核心版本:


  嘿嘿!干嘛呀!怎么又提到核心版本了?这个就得特别说明一下啰!因为不同的核心版本所提供的 TCP 封包的伪装技术,及防火墙软件都不相同,所以需要特别的关心一下您的核心版本!首先,用『uname -r 』看一下你的版本呢,如果是出现 2.2.xx 的话,则是属于较早期的核心,那个是使用 ipchains 作为技术的,至于如果是 2.4.xx 的话,那么就是属于 iptables 的模块较棒啰!

o Kernel 2.2.xx :使用 ipchains 做封包伪装的技术;

o Kernel 2.4.xx :使用 iptables 做封包伪装的技术!

  简单的判别方法,如果是 Red Hat 7.0 ( 含 7.0 )以前的版本,使用的是 2.2.xx 的核心,自然只有 ipchains 而已,而如果是 Red Hat 7.1 ( 含 7.1 ) 以后的版本,则使用的是 Kernel 2.4.xx ,因此最好使用 iptables 的技术!因为 2.4.xx 的 IP 处理模块当中,大部分都是针对 iptables 来作为处理的软件, ipchains 的已经不含在 2.4.xx 里头了!由于我是以 Red Hat 7.2 与 7.3 作为范例的,所以自然以 iptables 为准啰!如果还想要以 ipchains 来进行架设 NAT 的朋友,不妨参考一下这篇旧的文章:

o NAT 服务器

· 谁需要 NAT 架设:


  由前面 NAT( Network Address Transfer ) 的功能介绍,我们知道他可以作为频宽分享的主机,当然也可以管理一群在 NAT 主机后面的 Client 计算机!呵呵!所以 NAT 的功能至少有这两项:
o 频宽分享:我想,架设 NAT 的朋友大部分都是希望可以达到频宽分享的目的的!这毕竟是 NAT 主机的最大功能啰!

o 安全防护:咦!关安全防护什么事呀!?别忘了, NAT 之内的 PC 联机到 Internet 上面时,他所显示的 IP 是 NAT 主机的实体 IP ,所以 Client 端的 PC 当然就具有一定程度的安全了!最起码人家在 scan 的时候,就侦测不到你的 Client 端的 PC 啦!安全多了!

原创粉丝点击