服务器 频道

Linux下的NAT服务器架设实战(下)

    【IT168 专稿】前文(点击)介绍了NAT原理以及NAT在Linux应用环境下的实现,下面笔者将结合具体应用情况构建Linux下的NAT服务器。

一、 Linux 下NAT用途

    1. 连接到Internet,但却没有足够的公用Internet地址分配给内部主机。中小企业内部机器数量较少,可以通过NAT方式接入INTERNET,这时,仅仅需要一个合法的IP地址。

    2. 接到一个需要重新分配地址的ISP。企业合并,两个使用同一IP地址网段的企业合并,可以使用NAT而不用重新规划IP地址,保留了以前的投资。但不可避免的是,采用NAT可能使NAT路由器出现IP报文转发效率的损失。

    3. 支持多重服务器和负载均衡。通过给一个服务器集群一个逻辑IP地址(10.10.10.100),在路由   器上配置NAT可以做到负载分担。常见的例子是TCP load balancing,将外部网络对10.10.10.100的访问顺序定位到不同的服务器。

二、 NAT应用举例

1. 带动局域网上网

(1)网络结构

    网络地址翻译和IP伪装都可以实现多台主机共享一个Internet连接,而这个局域网可以是Linux和Windows系统组成的多系统局域网。假设现在我们有一台机器有两个网卡,其中eth0为“公共”网卡,eth1为“私有”网卡。换句话说,eth0被分配了一个静态的,可路由的IP地址,而eth1则被分配给了一个私有的、不能路由的IP,也就是说该IP是属于该局域网子网的。网络拓扑结构如图1 。
 

    假设局域网中的客户机A eth0网络接口的IP地址:192.168.1.1;
    NAT路由器连接局域网的eth0网络接口的IP地址:192.168.1.254;
    NAT路由器连接internet的eth1网络接口的IP地址:199.10.42.1;
    Internet上的一个WWW 服务器的IP地址:100.1.1.1;

(2)客户机使用NAT路由器访问互联网的过程

    首先将客户机A的默认网关IP地址设置为:192.168.1.254,
以root用户为例,执行下面的命令:
  # route add default gw 192.168.1.254
  如果用户想更改网关,编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件,将对应的网关设置修改之后,执行下面的命令即可:
  #/etc/init.d/network restart
然后客户机A访问互联网必须通过NAT路由器,过程如下:
 客户机A-NAT路由器。客户机A将访问WWW服务器的请求封包发送到NAT路由器。
 SNAT。此书请求封包在NAT路由器上实施SNAT,此时源IP地址转化为199.10.42.1,同时 NAT 路由器并且会记忆这个联机的封包是由哪一个 ( 192.168.1.1 ) 客户机端传送来的。
 NAT路由器-WWW服务器。经过SNAT转化的数据封包通过互联网发送到WWW服务器。
 WWW服务器-NAT路由器。WWW服务器将回应封包发送到NAT路由器。
 UN-SNAT。NAT 服务器会去查询原本记录的路由信息,并将目标 IP 由的公共 IP 改回原来的 192.168.1.1 ;
 NAT路由器-客户机A。NAT路由器将通过UN-SNAT转化的数据封包发送到客户机A。
以上过程如图2 所示。
 

图2客户机使用NAT路由器访问互联网的过程

    以后所有的客户机访问WWW服务器的数据封包都要经过上述步骤。

(3)配置SNAT带动简单的局域网使用互联网资源脚本

    以RHEL 4.0为例,在安装NAT服务器前,必须确定系统上已安装iptables程序,如果不知是否已经安装iptables,可以使用以下的方法来判断:# rpm-qa iptables
如果尚未安装iptables,可以在第一张安装光盘中的/Red Hat/RPMS目录下,找到名为“iptables-1.2.7a-2.i386.rpm”的安装程序,然后按照以下的方法进行安装:rpm –ivh iptables-1.2.7a-2.i386.rpm

   为了使开机时能自动运行iptablas,可以在终端机窗口中输入“ntsysv”指令,然后在出现的画面中,利用上下方向键将光标移到菜单中的“iptables”项目(同时确定ipchains选项没有被选中),然后按空格键以选择,最后利用Tab键将光标移到“确定”按钮并按Enter键即完成设置。其他具体操作如下,#是说明中文部分是说明:
#touch /etc/rc.d/snat.sh “首先在/etc/rc.d/目录下生成空的脚本文件”
#chmod u+x /etc/rc.d/snat.sh  “添加可执行权限”
#echo "/etc/rc.d/filter-firewall">>/etc/rc.d/rc.local “使脚本能在系统启动时自动执行”
#vi /etc/rc.d/ snat.sh
#!/bin/bash
#开启内核转发
echo“1” > /proc/sys/net/ipv4/ip-forward
#定义外部接口变量,若使用PPP连接,将eth1换成ppp0
INET_IFACE= “eth1’’
INET_IP= “XXX.XXX.XXX.XXX“
#定义局域网相关变量
LAN_IFACE= “eth1’’
LAN_IP= “192. 168. 1.254”
LAN_IP_RANGE= “192. 168. 1.0/24”
IPT= “sbin/iotables”
#理内核所支持的模块清单
/sbin/depmod -a
#载所用模块
/sbin/modprobe ip_tables
/sbin/modprobe iptables_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_LOG
清除已设规则,还原到不设防火墙的状态
$IPT -p INPUT ACCEPT
$IPT -p FORWARD ACCEPT
$IPT -p OUTPUT ACCEPT
$IPT -t nat -p PREROUTING ACCEPT
$IPT -t nat -p POSTROUTING ACCEPT
$IPT -t nat -p OUTPUT ACCEPT
for TABLE in filter nat mangle;do
$IPT -t $TABLE -F清除预设表filter中所有规则链中的规则
$IPT -t $TABLE -X清除预设表filter使用者自定义链中规则
done
#根据接口决定使用SNAT或是IP伪装
if [ "$INET_IFACE" = ppp0 ] ; then
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
else
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to $INET_IPi

(4)NAT和代理服务器访问互联网的对比

    我们知道Linux支持(Squid 或者Apache等)代理服务器和NAT 2种常见的Internet共享连接方式。NAT和Proxy方式两者各有所长,具体的优缺点参见附表所示。其中,NAT更加易于使用,软件的兼容性及运行速度更好; 而Proxy则在可配置性和安全性方面更为强大。比较而言,NAT可以说是一种“透明”网络访问方式,它只重写数据包中很少的一部分,由此保证了访问的高速度。此外,使用NAT方式几乎无需设置客户端应用程序,且可应用在几乎所有常用的操作系统,例如Windows、Mac OS、UNIX和Linux等。也正是由于NAT的众多特性,使其成为了用户普遍选择的Internet连接共享方式。

表-1是NAT与代理特性比较

0
相关文章