最近更新日期:2011/07/22
9.5 NAT 服务器的设定
9.5.1 什么是 NAT? SNAT? DNAT? 9.5.2 最阳春 NAT 服务器: IP 分享功能 9.5.3 iptables 的额外核心模块功能 9.5.4 在防火墙后端之网络服务器 DNAT 设定 9.5 NAT 服务器的设定 呼呼!终于来到这个地方了!我们准备要架设一个路由器的延伸服务器,就称之为 NAT 服务器。 NAT 是什么呢?简单的说,你可以称他为内部 LAN 主机的『 IP 分享器』啦! NAT 的全名是 Network Address Translation,字面上的意思是『网络地址的转换』。由字面上的意思我们来想一想, TCP/IP 的网络封包不是有 IP 地址吗?那 IP 地址不是有来源与目的吗?我们的 iptables 指令就能够修改 IP 封包的表头数据, 嘿嘿!连目标或来源的 IP 地址都可以修改呢!甚至连 TCP 封包表头的 port number 也能修改!真是有趣! NAT 服务器的功能可以达到类似图 9.1-2所介绍的类似 IP 分享的功能之外, 还可以达到类似图 9.1-4所介绍的 DMZ (非军事区) 的功能!这完全取决于我们的 NAT 是修改: (1)来源 IP 还是 (2)目标 IP !底下我们就来聊一聊吧! ^_^ 9.5.1 什么是 NAT? SNAT? DNAT? 在谈到 NAT 的实际运作之前,让我们再来看一下比较简单的封包透过 iptables 而传送到后端主机的表格与链流程(请往前参考图 9.3-4)。 当网络布线如图 9.1-2的架构,若内部 LAN 有任何一部主机想要传送封包出去时, 那么这个封包要如何透过 Linux 主机而传送出去?他是这样的:
NAT 服务器的重点就在于上面流程的第 1,4 步骤,也就是 NAT table 的两条重要的链:PREROUTING 与 POSTROUTING。 那这两条链有什么重要的功能呢?重点在于修改 IP 嘛!但是这两条链修改的 IP 是不一样的! POSTROUTING 在修改来源 IP ,PREROUTING 则在修改目标 IP 。 由于修改的 IP 不一样,所以就称为来源 NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。我们先来谈一谈 IP 分享器功能的 SNAT 吧!
9.5.2 最阳春 NAT 服务器: IP 分享功能 在 Linux 的 NAT 服务器服务当中,最常见的就是类似图 9.1-2的 IP 分享器功能了。 而由刚刚的介绍你也该知道,这个 IP 分享器的功能其实就是 SNAT 啦!作用就只是在 iptables 内的 NAT 表格当中,那个路由后的 POSTROUTING 链进行 IP 的伪装就是了。另外, 你也必须要了解,你的 NAT 服务器必须要有一个 public IP 接口,以及一个内部 LAN 连接的 private IP 界面才行。底下的范例中,鸟哥的假设是这样的:
记住!当你利用前面几章谈到的数据来设定你的网络参数后,务必要进行路由的检测, 因为在 NAT 服务器的设定方面,最容易出错的地方就是路由了!尤其是在拨接产生 ppp0 这个对外接口的环境下, 这个问题最严重。反正你要记得:『如果你的 public IP 取得的方式是拨接或 cable modem 时,你的配置文件 /etc/sysconfig/network, ifcfg-eth0, ifcfg-eth1 等档案,千万不要设定 GATEWAY 啦!』否则就会出现两个 default gateway ,反而会造成问题。 如果你刚刚已经下载了 iptables.rule ,那么该档案内已经含有 NAT 的脚本了! 你可以看到该档案的第二部份关于 NAT 服务器的部分,应该有看到底下这几行:
重点在那个『 MASQUERADE 』!这个设定值就是『 IP 伪装成为封包出去 (-o) 的那块装置上的 IP 』!以上面的例子来说,就是 $EXTIF ,也就是 eth0 啦! 所以封包来源只要来自 $innet (也就是内部 LAN 的其他主机) ,只要该封包可透过 eth0 传送出去, 那就会自动的修改 IP 的来源表头成为 eth0 的 public IP 啦!就这么简单! 你只要将 iptables.rule 下载后,并设定好你的内、外网络接口, 执行 iptables.rule 后,你的 Linux 就拥有主机防火墙以及 NAT 服务器的功能了!
事实上,除了 IP 伪装 (MASQUERADE) 之外,我们还可以直接指定修改 IP 封包表头的来源 IP 呢! 举例来说,如下面这个例子:
这样也可以修改网络封包的来源 IP 资料喔!不过,除非你使用的是固定 IP ,且有多个 IP 可以对外联机,否则一般使用 IP 伪装即可,不需要使用到这个 SNAT 啦!当然,你也可能有自己的独特的环境啦! ^_^ 9.5.3 iptables 的额外核心模块功能 如果你刚刚在 iptables.rule 内的第二部分有仔细看的话, 那有没有觉得很奇怪,为何我们需要加载一些有用的模块?举例来说, ip_nat_ftp 及 ip_nat_irc ? 这是因为很多通讯协议使用的封包传输比较特殊,尤其是 FTP 文件传输使用到两个 port 来处理数据! 这个部分我们会在 FTP 章节再来详谈,在这里你要先知道,我们的 iptables 提供很多好用的模块, 这些模块可以辅助封包的过滤用途,让我们可以节省很多 iptables 的规则拟定,好棒的吶! ^_^ 9.5.4 在防火墙后端之网络服务器 DNAT 设定 既然可以做 SNAT 的 IP 分享功能,我们当然可以使用 iptables 做出 DMZ 啦! 但是再次重申,不同的服务器封包传输的方式可能有点差异,因此,建议新手不要玩这个咚咚! 否则很容易导致某些服务无法顺利对 Internet 提供的问题。 先来谈一谈,如果我想要处理 DNAT 的功能时, iptables 要如何下达指令? 另外,你必须要知道的是, DNAT 用到的是 nat table 的 Prerouting 链喔!不要搞错了。
那个『 -j DNAT --to-destination IP[:port] 』就是精髓啦!代表从 eth0 这个接口传入的,且想要使用 port 80 的服务时, 将该封包重新传导到 192.168.100.10:80 的 IP 及 port 上面!可以同时修改 IP 与 port 呢!真方便。 其他还有一些较进阶的 iptables 使用方式,如下所示:
至于更多的用途,那就有待你自己的发掘啰! ^_^ |
||||||||||
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室