连接两个逻辑上分开的网络,传统上是使用路由器来实现,Linux的完善与发展为此提供了一个低廉可靠的替代方案,越来越多的人们用它来代替传统的网络设备,下面就是我们使用Red Hat Linux AS 5实现NAT路由的一个实例。

小知识:
NAT
NAT是Network Address Translation的缩写,又称网络地址转换。它是通过内部网络地址与公网地址相互转换,从而实现内外的互通互联。它不仅能隐藏内部IP地址,降低内部网络受到攻击的风险,而且能帮助解决因特网的IP地址紧缺的问题。是目前被广泛采用的联接因特网的方式。

一、需求分析
前段时间,我们租用了网通10M光纤线路,并获得了一个公网IP地址,通过一台Cisco 2621路由器作地址转换,实现了家属小区的局域网与因特网的互联。在网络运行初期,这种配置和连接方式还是经受住了考验。随着时间的推移,小区局域网内的电脑不断增多,由原来的50多台发展到100多台,而且越来越多的人使用BT、电驴等下载工具,从而致使Cisco 2621严重过载,并多次出现死机。
面对这种情况,我们设计了三种方案:其一,购买一台高性能的路由器,将cisco 2621替换下来;其二,windows +ISA server另加一台电脑;其三,Linux 加一台电脑。第一种方案简单易行,但投资太高;第二种方案性能比要高一些,但windows的稳定性、安全性却成了最大的隐患,而且windows对硬件要求高,如果全部使用正版软件,费用也很不低。第三种方案性价比最高,于是一台闲置的旧服务器+ Linux成为了我们的首选。

二、网络结构
 

图1
图1中的Linux服务器插有双网卡,其中eth0(网卡1)与小区内网相联,eth1(网卡2)与因特网相联。IP地址设置如下:
小区内网:192.168.1.0 / 255.255.255.0
Linux服务器:
eth0:192.168.1.1 / 255.255.255.0
eth1:221.214.141.12 / 255.255.255.0 
网关  221.214.141.1 
          DNS  202.102.134.68  202.102.128.28
三、Linux服务器配置
以下配置基于Red Hat Enterprise Linux AS 5,内核版本是2.6.18,在安装时选择了 “最小安装”,语言包只选英文,以减少其它组件对系统资源的占用。安装完后,以root用户登陆系统,在字符界面下进行设置。
1、IP地址设置
 ifconfig eth0 192.168.1.1 netmask 255.255.255.0
   ifconfig eth1 221.214.141.12 netmask 255.255.255.0
为了让计算机启动时自动设置IP地址,还需要分别修改/etc/sysconfig/network-scripts/下的两个文件:ifcfg-eth0、ifcfg-eth1,将ONBOOT属性设为yes,即ONBOOT=yes  ,
eth0(网卡1)对应的ifcfg-eth0文件格式如下:
# 3com Corporation|3c905B 100BaseTX [Cyclone]
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:10:4B:95:95:E8
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
PEERDNS=no
NETMASK=255.255.255.0
IPADDR=192.168.1.1
eth1(网卡2)对应的ifcfg-eth1文件格式如下:
# 3com Corporation|3c905B 100BaseTX [Cyclone]
DEVICE=eth1
BOOTPROTO=none
HWADDR=00:10:4B:95:95:E9
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
PEERDNS=no
NETMASK=255.255.255.0
IPADDR=221.214.141.12
GATEWAY=221.214.141.1
注:修改这两个文件可以使用vi 命令,输入并执行“vi /etc/sysconfig/network-scripts/ ifcfg-eth0”,键入i命令,vi编辑器将进入编辑模式。编辑结束后按“ESC”键,返回命令模式,输入“:wq”,按回车键存盘退出。若输入“:q!”,则退出而不进行任何保存。
2、DNS服务器设置
编辑“/etc/resolv.conf”,命令如下:
vi  /etc/resolv.conf
文件内容为:
nameserver 202.102.134.68
nameserver 202.102.128.28
3、打开ip转发功能
echo “1” > /proc/sys/net/ipv4/ip_forward
为了在电脑重启之后继续有效,需将文件“/etc/sysctl.conf”中的“net.ipv4.ip_forward=0”改为“net.ipv4.ip_forward=1”
4、启动NAT
iptables -A  POSTROUTING -t nat -s 192.168.1.0/24 -o eth1 -j SNAT --to 221.214.141.12
(注:”/24”表示子网掩码为24位,即255.255.255.0)
这条命令是将来自于192.168.1.0/24并通过eth1出去的数据包的源地址修改为221.214.141.12,从而实现网络地址转换。将这条命令添加到“/etc/rc.d/rc.local”文件中,则可以在每次引导系统时自动应用。
四、功能扩展
在上面的实例中,我们通过Linux中的iptables命令实现了NAT,从而使小区内网可以访问因特网。这仅仅是用到了NAT两种类型中的一个——SNAT(改变数据包的来源地址),若是用上另一种类型——DNAT(改变数据包的目的地址)能实现什么功能呢?
让我们看一个最典型的例子:以前面的网络拓扑为例,在小区内网中有一台服务器(192.168.1.3)运行着web服务,现在我们想让因特网上的用户通过访问公网地址(221.214.141.12)来访问它。这就需要设置DNAT规则,将对公网地址的web访问请求,重定向到内网的web服务器上。
iptables -t nat -A  PREROUTING -d 221.214.141.12 -p tcp --dport 80 -j DNAT --to 192.168.1.3
短短的几条命令,外加一台旧服务器,轻松实现了NAT,这仅仅是Linux强大功能的一小部分,如果你愿意,完全可以用它做用它来做路由器、防火墙,做嵌入式系统,做实时系统……

文章如转载,请注明转载自:http://www.5iadmin.com/post/968.html