Solaris 10 NAT配置攻略
一、NAT 基础知识
1. NAT定义
NAT英文全称是“Network Address Translation”,“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。图1给出了NAT的一个简单实现。
2. NAT技术的提出
IP地址耗尽促成了CIDR的开发,但CIDR开发的主要目的是为了有效的使用现有的internet地址。而同时根据RFC 1631(IP Network Address Translator)开发的NAT却可以在多重的互联网子网中使用相同的IP,用来减少注册IP地址的使用。 NAT技术使得一个私有网络可以通过互联网注册IP连接到外部世界,位于内部网络和外部网络中的NAT路由器在发送数据包之前,负责把内部IP翻译成外部合法地址。内部网络的主机不可能同时于外部网络通信,所以只有一部分内部地址需要翻译。
数据包中如果包含有目的IP 地址,一旦内部Intranet 的IP 地址被截获,那么内部网络资源就会暴露,并可以对其实施攻击。为了更好地提高内部网络安全性,可以采用网络地址转换技术。另外,IP 地址的不足使许多用户使用私有EP 地址来搭建网络,私有网络中的IP 地址应遵循RFC 1597 中为私有网络分配的地址,其地址范围为
10.0.0.0-10.255.255.255 ,
172.16.0.0--172.16.255.255
192.168.0.0--192.168.255.255
而使用私有地址不能直接与Internet 互联。为了使这样的网络能够访问Internet,可以采用地址转换解决这一问题。网络地址转换(NAT) 实现将一个(或一组)IP 地址转换成另一个或一组iP 地址,即将内网的IP 地址或者外网的IP 地址转换。由于网络地址的缺乏和出于安全等因素的考虑,许多内部网络使用私有IP 地址建立起来,在与internet 互连时,通过带有NAT 功能的路由器或防火墙,实现私有IP 与合法IP 地址的转换,对外表现为合法的IP 地址。
3. NAT工作原理
NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。通过NAT路由器的所有出分组,都把分组中的源地址更换为全球NAT地址。通过NAT路由器的所有入分组,都把分组中的目的地址(这个NAT路由器的全球地址)更换为适当的专用地址。如图2所示给出了地址转换的示例。
图2 NAT工作原理图
4. NAT的实现方法和分类
NAT 功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。比如Cisco路由器中已经加入这一功能,网络管理员只需在路由器的IOS中设 置NAT功能,就可以实现对内部网络的屏蔽。,其他如Linux中的IP伪装(IP Masquerade),Solaris中的ipfilter或Windows98的Sygate软件和Windows 2000 、2003都包含了这一功能。NAT分类:
(1) 源NAT(Source NAT,SNAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络之前完成,数据包伪装就是一具SNAT的例子。
(2) 目的NAT(Destination NAT,DNAT):修改数据包的目的地址。Destination NAT刚好与SNAT相反,它是改变第一个数据懈的目的地地址,如平衡负载、端口转发和透明代理就是属于DNAT。
5. NAT的转换表
NAT路由器怎样知道从Internet来的入分组的目的地址呢?可能有几百个或几千个专用IP地址,每一个都属于一个特定主机。如果NAT路由器有一个转换表,问题就解决了。最简单的形式是一个转换表只有两列:专用地址和外部地址(分组的目的地址)。当这个路由器对出分组的源地址进行转换时,它也记下来目的地址———这个分组要去的地方。当响应从这个目的地址返回时,路由器就使用这个分组的源地址(作为外部地址)来找出这个分组的专用地址。图3给出了这个概念。应当注意,改变的(被转换的)地址用灰色表示。
图3 NAT的转换表
6.NAT的优点和缺陷:
NAT方案在一定程度上减缓了IP地址耗尽的周期和路由表规模越来越大的问题,提供了一种非常方便的方式来解决私有网络与Internet的互连问题。
NAT的优点:
终端用户可以透明地访问Internet。
利用NAT可以做到对外部网络隐藏内部网络的体系结构,从外部网络无法知道究竟是哪台主机发送或接收数据,从另一个角度,它也是一个缺点。
为已建成的私有网络方便地建立与Internet的连接,而不必去修改每台主机的地址以及内部路由器的配置。
*在实现NAT时,可以加入一些服务器代理和包过滤的功能,可以获得很好的安全性及其它性能,而不用增加管理的开销。
以极少的全局地址实现一个较大型的私有网络与Internet的互连。
但NAT方案含有很多消极特征,决定了它只能是一个临时的解决方案,包括:
如果网络规模增大,访问Internet的主机增多,地址对应表的规模必然会越来越大,这将导致效率的降低。
它会增加错误寻址的可能性。
它隐藏了发送报文的主机的有关信息,使得外部网络难于对它们进行管理,例如,若内部网络中某台主机在Internet上违反安全规则,Inter—net就无法查处“元凶”。
由于NAT要修改相应的IP地址,这使得不能对包含IP地址或有关IP地址信息的内容(如
TCP报文头的校验和)进行加密,降低了安全性。
l那些使用到IP地址的高层应用将受到限制,除非NAT有可能修改其中包含的IP地址信息,即便如此,对这些高层应用还是有所限制,如不能加密等。
*ICMP,SNMP,DNS等等各种网络上使用的协议在进行地址翻译时所带来的问题,难予考虑周全。
二、NAT在Solaris 下的实现原理
NAT在Solaris 下的实现原理也是使用防火墙工具IPFilter是目前比较流行的包过滤防火墙软件,它目前拥有多种平台的版本,安装配置相对比较简单。可以用它来构建功能强大的软件防火墙,下面就其的安装以及一些典型的配置作一下说明。IPFfilter 的作者是 Darren Reed 先生,他是一位致力于开源软件开发的高级程序员,目前工作于 SUN 公司。IP Filter 软件可以提供网络地址转换(NAT)或者防火墙服务。简单的说就是一个软件的防火墙,并且这个软件是开源免费的。当前的版本是4.1.15,目前支持 FreeBSD、NetBSD、Solaris 10、Open Solaris、AIX 等操作系统平台。IPFilter是它是一个在引导时配置的可加载到内核的模块。这使得它十分安全,因为已不能由用户应用程序篡改。我用Solaris10 来作为实验的平台介绍一下IP Filter。IP Filter过滤器会执行一系列步骤。图4说明处理包的步骤,以及过滤如何与 TCP/IP 协议栈集成在一起。
图4 处理数据包的步骤
数据包在Solaris内的处理顺序包括下列步骤:
1. 网络地址转换 (Network Address Translation, NAT) :将专用 IP 地址转换为不同的公共地址,或者将多个专用地址的别名指定为单个公共地址。当组织具有现有的网络并需要访问 Internet 时,通过 NAT,该组织可解决 IP 地址用尽的问题。
2. IP 记帐:可以分别设置输入规则和输出规则,从而记录所通过的字节数。每次与规则匹配时,都会将包的字节计数添加到该规则中,并允许收集层叠统计信息。
3. 片段高速缓存检查:如果当前流量中的下一个包是片段,而且允许前一个包通过,则也将允许包片段通过,从而绕过状态表和规则检查。
4. 包状态检查:如果规则中包括 keep state,则会自动传递或阻止指定会话中的所有包,具体取决于规则指明了 pass 还是 block。
5. 防火墙检查:可以分别设置输入规则和输出规则,确定是否允许包通过 Solaris IP 过滤器传入内核的 TCP/IP 例程或者传出到网络上。
6. 组:通过分组可以按树的形式编写规则集。
7. 功能:功能是指要执行的操作。可能的功能包括 block、pass、literal 和 send ICMP response。
8. 快速路由:快速路由指示 Solaris IP 过滤器不将包传入 UNIX IP 栈进行路由,从而导致 TTL 递减。
9. IP 验证:已验证的包仅通过防火墙循环一次来防止双重处理。
三、Solaris 10 NAT配置实战
在 Solaris 10 上,不需要再安裝 IP Filter 了,Solaris 10 已經內建了 IP Filter,所以,只要做一些設定就可以使用。在舊版本的 Solaris系統上是需要自行下載(http://coombs.anu.edu.au/~avalon/ )和安裝 IP Filter 的。
1、了解nat规则
IP Filter过滤器规则集很多这里笔者介绍和nat相关的规则。
查看活动的 NAT 规则
# ipnat -l
List of active MAP/Redirect filters:
map dmfe0 192.168.1.0/24 -> 20.20.20.1/32
List of active sessions:
如何删除 NAT 规则
以下示例显示如何删除当前 NAT 规则中的项。
# ipnat -l
List of active MAP/Redirect filters:
map dmfe0 192.168.1.0/24 -> 20.20.20.1/32
List of active sessions:
# ipnat -C
1 entries flushed from NAT list
# ipnat -l
List of active MAP/Redirect filters:
List of active sessions:
如何将规则附加到 NAT 规则
使用以下方法之一将规则附加到活动规则集:
在命令行上使用 ipnat -f - 命令,将规则附加到 NAT 规则集。
# echo "map dmfe0 192.168.1.0/24 -> 20.20.20.1/32" | ipnat -f -
以下示例显示如何从命令行将规则添加到 NAT 规则集。
# ipnat -l
List of active MAP/Redirect filters:
List of active sessions:
# echo "map dmfe0 192.168.1.0/24 -> 20.20.20.1/32" | ipnat -f -
# ipnat -l
List of active MAP/Redirect filters:
map dmfe0 192.168.1.0/24 -> 20.20.20.1/32
List of active sessions:
2、启动IP转发
NAT需要使用兩張網卡才能正常使用,首先查看网卡,使用ifconfig –a 命令如图5:
图5 查看网卡接口
这里笔者使用的两块网卡分别是:elx0 、mxfe0 。
IP forwarding即IP转发,在我们单位的日常工作中,人们往往由于分配的IP地址不在一个网段,而不能相互访问,给员工之间的数据交换带来不便。虽然可以利用第三层交换技术VLAN来实现数据交换,但那需要更换现有的部分网络设备。那么,利用现有的网络设备,通过大量的实践和探索,我们找到了解决此问题的方法,即利用IP转发功能来实现不同网段的数据交换。IP转发就是在一个路由器中,如果IP包的地址与路由器的地址表有相符的地址时,把这个包卸下来,发给相应的主机,否则将其转发到别的路由器的过程。首先查看目前ip转发情况,使用routeadm 命令,如图6 。
图6 查看目前ip转发情况
说明:不带选项的 routeadm 命令可报告IP转发和路由选择守护进程的状态。下面使用命令启动IP转发:
routeadm -u -e ipv4-forwarding
另外也可以使用smf命令:
# svcadm enabled ipv4-forwarding
下面重新使用routeadm 命令查看情况,如图6 。
图7 IP转发已经启动
当你把 IP forwarding 启动后,你就需要設定 NAT (的規則。NAT 規則在檔案 /etc/ipf/ipnat.conf 裡面。
map elx0 192.168.0.0/24 -> 0/32 proxy port ftp ftp/tcp
map elx0 192.168.0.0/24 -> 0/32 portmap tcp/udp auto
map elx0 192.168.0.0/24 -> 0/32
修改/etc/ipf/pfil.ap 文件,此文件包含主机上网络接口卡 (network interface card, NIC) 的名称。缺省情况下,这些名称已被注释掉。对传输要过滤的网络通信流量的设备名称取消注释。
vi /etc/ipf/pfil.ap
# IP Filter pfil autopush setup
# See the autopush(1M) manpage for more information.
# Format of the entries in this file is:
#major minor lastminor modules
#iprb -1 0 pfil
#elxl -1 0 pfil
#e1000g -1 0 pfil
#bge -1 0 pfil
#nf -1 0 pfil
elx0 -1 0 pfil
#mxfe0 -1 0 pfil
#el -1 0 pfil
#ipdptp -1 0 pfil
#lane -1 0 pfil
pcn -1 0 pfil
#pcelx -1 0 pfil
#spwr -1 0 pfil
启动服务使用命令:svcadm enable svc:/network/ipfilter:default
使pfil.ap配置文件生效
autopush -f /etc/ipf/pfil.ap
说明:此步骤只需要做一次,以后更改防火墙规则就不需要再做。
重新引导计算机,使用命令:“reboot”。
如果不希望重新启动计算机也可以使用命令:
ifconfig elx0 unplumb
ifconfig elx0 plumb dhcp start
这里假设elx0是通过DHCP获得的ip地址。
- 最新评论
