基于Linux的地址转换技术探讨和实现.docx
《基于Linux的地址转换技术探讨和实现.docx》由会员分享,可在线阅读,更多相关《基于Linux的地址转换技术探讨和实现.docx(15页珍藏版)》请在冰点文库上搜索。
基于Linux的地址转换技术探讨和实现
晋中学院
本科毕业论文(设计)
题目基于Linux的地址转换
技术探讨和实现
院系信息技术与工程学院
专业计算机科学与技术
(网络工程方向)
姓名
学号1011122103
学习年限2010年9月至2014年7月
指导教师职称讲师
申请学位理学学士学位
2014年5月9日
基于Linux的地址转换技术探讨和实现
学生姓名:
段良鑫指导教师:
温娟娟
摘要:
伴随着当今网络技术的蓬勃发展,人们对于IP地址的需求的数量猛增,然而对于已经分配的所剩无几的IPv4地址,对于网络的发展必定是一个瓶颈。
IPv6地址的出现使得人们看到了未来的希望,但是由于技术的不完善,从IPv4到IPv6的过渡需要相当的一段时间。
在这段时间里,NAT技术的出现很好地解决了所剩无几的IP地址对于日益增长的网络需求所带来的限制。
NAT技术将因特网和局域网地址互相结合,使局域网内的计算机在访问因特网时使用因特网合法的地址,使得更多的的计算机在局域网中增长而不会对因特网IP地址带来巨大的压力。
对于因特网上的用户可以访问局域网中指定发布的服务,与此同时还能够有效地避免来自因特网的攻击,隐藏了计算机的真实IP地址,保护网络内部的计算机。
NAT是解决IP地址匮乏问题的一种行之有效的技术,本文探讨了NAT技术的原理以及在Linux系统中的实现方案。
关键词:
Linux;IPv4;NAT技术
AddressTranslationTechnologyResearchandImplementationBasedonLinux
Author’sName:
DUANLiang-xinTutor:
WENJuan-juan
ABSTRACT:
Alongwiththedevelopmentofnetworktechnology,thenumberofpeopleindemandforIPaddressesismorethanbefore,butforthefewIPv4addresseshavebeenallocated.Butforthedevelopmentofthenetworkmustbeabottleneck.IPv6addressesappearmakespeopleseehopeforthefuture,butbecauseoftheimperfecttechnology,thetransitionfromtheIPv4toIPv6requiresalongtime.Duringthistime,NATtechnologysolvesthelimitationsrunningoutofIPaddressesthegrowingdemandfornetworkbrings.NATtechnologyoftheInternetandLANaddresswitheachother,sothatthecomputerontheLANusingtheInternetlegitimateaddresswhenaccessingtheInternet,makingthecomputermoregrowthratherthanbeintheLANIPaddressoftheInternethasbroughttremendouspressure.ForusersontheInternetcanaccessthepublishedservicesspecifiedintheLAN,whilealsoabletoeffectivelypreventattacksfromtheInternet,tohidetherealIPaddressofthecomputertoprotecttheinternalnetworkcomputer.NATisaneffectivetechniquetosolvetheproblemofshortageaboutIPaddresses.ThisarticlediscussestheprincipleofNATtechnologyandimplementationintheLinuxsystem.
KEYWORDS:
Linux;IPv4;NATtechnology
目录
1引言1
2相关知识及技术1
2.1传输在网络间的数据报头的格式1
2.2NAT地址转换技术的分类1
2.3SNAT和DNAT技术2
2.4基础环境2
3NAT技术原理3
4以LINUX服务器作为网关实现NAT4
4.1Linux中NAT的实现原理4
4.2Iptables语法6
4.3实验的设计与实现7
5系统测试10
5.1SNAT测试10
5.2DNAT的Web测试11
5.3DNAT的SSH测试12
6结束语14
致谢15
参考文献16
1引言
随着互联网的飞速发展,使得IPv4地址供不应求,这种现象在很多单位是尤为突出的,传统的解决办法是利用动态地址分配(DHCP)或者划分子网和超网技术。
利用传统的动态地址分配技术显然无法实现网络应用的需求,因为动态地址分配仅仅是简化了客户端的配置,增加了IP地址分配的灵活性,并没有起到有效节省IP地址的作用。
比如,晚上同时上网的客户端很多时,DHCP服务器中地址池的IP地址会很快消耗殆尽,不一定可以满足所有用户的上网请求。
划分子网技术只是在申请到一段合法的IP地址的时候将此段IP地址进行划分,其中的每一个IP地址都是在公网上的合法地址,并没有起到节省IP地址的效果。
超网技术突破了有类网络的限制,利用子网掩码的变化将可用的IP地址大大的增加了。
但由于IPv4地址的自身限制,还是无法满足当今对于IP地址的巨大需求。
在这样的环境下,NAT技术应运而生,充分的缓解了IP地址匮乏带来的尴尬局面,这种技术巧妙地将因特网地址和局域网地址结合起来,实现局域网地址和因特网地址的相互转换,使得局域网内的终端能够正确的在因特网上访问,还不会显示自身真实的IP地址,有效的避免了来自因特网上的攻击。
同时也可以限制因特网上的用户只能访问到局域网的某台服务器上,实现了访问控制。
而且可以根据不同的网络环境采用不同的方案。
并且具有配置简单,易于实现,对用户也是透明的。
并且NAT技术得到了广泛的运用。
2相关知识及技术
2.1传输在网络间的数据报头的格式
数据在网络间传输的基本单元是数据报,而每个数据报都包含一个报头部分和数据部分,其中报头部分描述了数据的目的地址以及和其它数据包之间的关系。
IP数据报是TCP/IP协议定义在因特网上的网络层中传输的一种数据报,数据报的首部为固定长度20字节的报头部分,是所有IP数据报都有的,其中包含着四位用来存放数据报源地址和目的地址的信息,即源IP地址和目的IP地址。
2.2NAT地址转换技术的分类
(1)静态地址转换技术(StaticNat)
静态地址转换是最简单的一种转换方式,它把局域网的IP地址一对一的转换成因特网的IP地址,并且是不会改变的,没有真正意义上的节省因特网的IP地址,但是利用了转换的技术,隐藏了终端上的真实IP地址,减少了来自外部网络对于终端发起的攻击和破坏,保护了终端。
静态地址转换技术多数使用在公司和企业等服务器端。
(2)动态地址转换技术(DynamicNat)
动态地址转换技术是将是将局域网IP地址转换到一段因特网的IP地址中,这段地址是已经购买或分配好的,实现了多对多之间的地址转换。
适用于局域网内的终端数量大于分配好的因特网地址数量,但是由于转换时也同样是一个终端转换成指定网段内的一个因特网地址,所以当局域网内同时访问因特网的终端数量大于分配好的地址时,就会造成某些局域网地址无法转换而不能访问。
动态转换基本实现了节约IP地址的功能,但是有局限性。
(3)端口多路复用(PortAddressTranslation)
端口多路复用技术是现在网络中最常使用的地址转换技术,它其实是动态地址转换的一种变形,它可以将所有的局域网地址转换为一个因特网地址,使局域网地址可以同时访问因特网,大大的节省了因特网的IP地址。
端口多路复用是将不同地址的IP对应转换到指定因特网IP地址上的不同端口上。
同时又可隐藏网络内部的所有主机,有效避免来自Internet的攻击。
2.3SNAT和DNAT技术
DNAT是目的地址转换技术(DestinationNetworkAddressTranslation),主要用在当有一个合法的IP地址,要把对防火墙和代理服务器的访问重定向到其它的终端上。
即改变的是目的地址,使报文能重路由到某个终端。
SNAT叫做源地址转换技术(SourceNetworkAddressTranslation),是改变报文的源地址,这在极大程度上可以隐藏本地网络等。
有了这个操作,防火墙就能自动地对报文做SNAT和De-SNAT(就是反向的SNAT),以使局域网能连接到Internet。
2.4基础环境
为了满足实验设计所需的环境,应安装Linux系统,并且安装了Iptables服务,推荐为RedHatEnterprise版本,而且系统内核必须为2.4以上。
Iptables是与内核版本为2.4以上的Linux 内核集成的IP信息包过滤系统。
如果Linux系统连接到因特网或局域网、服务器或连接局域网和因特网的代理服务器,则有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。
3NAT技术原理
NAT是NetworkAddressTranslation(网络地址转换)的缩写,它不是一种新的技术,而是一种解决网络问题的成熟技术,多年来几乎没有做过任何的改动。
目前,大部分的园区网所使用的网关中都支持该技术,有些单位采用专用的路由器做网关,比如CISCO,而有些学校等机构采用服务器做网关,比如Linux服务器。
而无论在CISCO路由器上还是在Linux内核的服务器上都支持NAT的实现。
本文探讨的是NAT技术最重要的功能,也就会通过地址复用来提高了对IP地址的利用率。
在NAT技术中涉及了两种IP地址概念:
公网地址和私有地址。
公网地址是合法的IP地址,它是由InterNIC或者是网络服务提供商分配的地址,是全球唯一的地址,是可路由的地址。
私有地址就是局域网内部的地址,是网络供应商预留的,只能在局域网内部使用的私有的IP地址,这些地址不能被路由。
这些私有地址包括10.0.0.0~10.255.255.255,172.16.0.0~172.31.255.255,192.168.0.0~192.168.255.255。
NAT一般是设置在网关处,本文采用代理服务器作为网关。
当IP数据报从内部的终端访问因特网时,在经过代理服务器时会进行NAT技术,NAT会修改数据报的源地址,将其转换为一个可以在互联网上路由的合法的IP地址,并且把这个转换前后的两个IP都记录到系统的一张映像表中。
当外部网络发送响应数据报回到这个终端,NAT会根据映像表中刚才记录的映像关系找到数据报要到达的内部终端的IP地址,然后再修改接收来的数据报的首部的目的地址,最后将数据报发送给内部地址对应的终端,从而达到两个主机之间的通信。
在配置静态地址转换后就会产生一张存放地址转换对应的私有地址和公网地址的映射表,如表3-1所示。
端口多路复用技术是在内部地址访问公共网络时才进行转换,会产生相应的转换记录,也同样会存放在一张地址转换映射表中,如表3-2所示。
表3-1静态地址转换的映射表
私有地址
公网地址.
192.168.1.1/24
202.30.8.1/25
192.168.1.2/24
202.30.8.2/25
192.168.1.100/24
202.30.8.100/25
表3-2端口多路复用的映射表
私有地址
公共地址
192.168.1.1/24:
1723
202.30.8.2/25:
2123
192.168.1.2/24:
1723
202.30.8.2/25:
2124
192.168.1.100/24:
1723
202.30.8.2/25:
2222
表3-2与表3-1的映射表显然是不同的,当内部多个客户机对外访问时,NAT给它们都分配了相应的公网地址,但为了建立一一映射,在公网地址后又加上了不同的端口号,这样可以多个内部私有地址共同被转换成了同一个公网地址,从而实现了节省IP地址的作用。
4以LINUX服务器作为网关实现NAT
4.1Linux中NAT的实现原理
在Linux下使用Iptables服务可以实现NAT功能,包括静态地址转换、动态地址转换、端口复用动态地址转换,三种方式都可以实现网络地址转换功能。
在Iptables内部分为三个表,分别是filter,nat,mangle,每个表又有不同的操作链(Chains)。
在filter(过滤)表中,定义了三个链,分别是INPUT(输入),FORWARD(输出),OUTPUT(输出),对包的进入、转发、发出进行定义的三个过滤链。
nat表是以实现端口转发功能和地址转换的表,定义了PREROUTING(路由前),POSTROUTING(路由后),OUTPUT(输出)三个链;而netfilter的mangle表则是一个自定义表,里面包括上面的filter以及nat表中的各种操作链,它可以进行一些自定义的操作[1]。
NAT工作原理如图4-1所示。
图4-1报文在Iptables中的处理过程
其中要经过如下步骤:
(1)DNAT
在数据报进入到系统之后,首先Mangle表的PREROUTING在最前面,当一个报文到达Linux的网络接口的时候先经过mangle的PREROUTING,然后是nat表的PREROUTING,这个链就是在进行路由前要经过的。
在PREROUTING链里面对包的操作是DNAT,也就是改变目的地址(或端口)。
通常用在端口转发,或者nat到内网的,当一个包过来的时候要改变它的目的地址,所以PREROUTING这个链一定要在进路由(Routing)前。
(2)路由和转发
检查报文的源地址和目的地址,在对于的filter表中查询相关的规则,并且执行相应的操作,例如接收转发、丢弃等。
(3)SNAT
当报文经过路由和转发过程后,会从Linux的网络接口发出,发出前最后经过的是nat表中的POSTROUTING链,SNAT就是在这里进行。
SNAT所做的操作是修改报文的源地址,即重写报文首部中的源IP地址。
当几台终端共享一个Internet连接时,就可以使用。
SNAT的作用就是让所有从本地网发出去的包看起来都是从同一个终端发出的。
SNAT只能用在nat表的POSTROUTING链里,这样才能保证包从网络接口出去的时候都进行了地址转换的操作,而且特别的是只要连接的第一个符合条件的包被SNAT了,那么这个连接的其它所有的包都会自动地被SNAT,而且这个规则还会应用于这个连接所在流的所有数据包。
在经过SNAT转换的同时,系统内部会产生一条转换前的IP地址信息、端口号和转换后IP地址信息、端口号相对应的记录,存放在了映射表中。
4.2Iptables语法
Iptables[-t要操作的表]<操作命令>[要操作的链][规则号码][匹配条件][-j匹配后的动作][2]。
常见的操作命令:
-L查看,v详细,n不反解--line-number
-A追加,放置最后一条
-I插入,默认插入成第一条
-D删除
-F清空
-P设置默认策略policy
匹配的条件:
-s源地址eg:
-s192.168.2.0/24
-d目标地址eg:
-d192.168.2.1
-p协议eg:
-ptcp|upd|icmp
-iinput从接口进入的数据包eg:
-ilo
-ooutput从网口出去的数据包eg:
-oeth0
--dport指定端口号,常与-p连用eg:
-ptcp--dport80
处理方法:
-jACCEPT允许
-jDROP丢弃
-jREJECT拒绝
-jSNAT源地址转换
-jDNAT目标地址转换
-jLOG写日志
-jMARK打标记
-jMASQUERADE地址伪装
4.3实验的设计与实现
以晋中学院的校园网为例,在学校只租用了一个公网的合法IP地址的前提下保证校园内部的终端都可以进行正常的上网浏览;同时对于学校服务器上所发布的网站,其他网络的主机可以通过因特网进行正常访问;对于学校的网络管理员来说,可以实现远程登陆进行控制和维护学校服务器。
网络拓扑如图4-2所示。
将代理服务器配置为双网卡,分别为eth0和eth1,其中eth0为与外部公共网络相连接的网口,该网卡的IP地址为公网上的合法地址;eth1为与内部网络相连的网卡,该网卡的IP地址为校园网内部的私有地址[3]。
具备了相关条件的代理服务器上配置NAT步骤的过程如下:
图4-2实验拓扑图
(1)安装Linux系统
本次试验的代理服务器上安装RedHatEnterpriseLinux5版本的桌面模式[4],系统会自带安装Iptables软件,在初次登陆时设置为开启Iptables服务。
(2)网卡配置
在学校代理服务器上安装完成操作系统之后,在代理服务器的eth0网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0上其中修改以下几行:
BOOTPROTO=static//IP地址获取协议
IPADDR=202.30.8.2//IP地址
NETMASK=255.255.255.128//子网掩码
GATEWAY=202.30.8.1//网关
ONBOOT=yes//开机启动
同样在代理服务器上的eth1配置文件/etc/sysconfig/network-scripts/ifcfi-eth1中修改以下几行:
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
ONBOOT=yes
当内网有多台终端连接且需要上网,则将内网终端主机的网关都设置为eth1的IP地址。
对内部终端Host1进行配置:
IPADDR=192.168.1.2
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
对外部终端Public进行配置:
IPADDR=202.30.8.100/25
NETMASK=255.255.255.128
(3)开启转发功能
完成上述配置后,Host1可以ping通Linux系统主机的eth1的IP,因为这两个终端是在同一个网段内,是通过交换机连接的。
但是,Host1无法ping通Linux系统主机的eth0网口的IP,因此需要开启Linux系统主机的转发功能。
开启Linux的转发功能,执行如下命令:
#echo“1”>/proc/sys/net/ipv4/ip_forward
查看系统是否启用了转发功能,可以执行如下命令:
#cat/proc/sys/net/ipv4/ip_forward
结果为1代表已启用,0代表未启用。
(4)配置SNAT规则
首先将Iptables中的规则清除,排除干扰:
#iptables–F//清空filter表
#iptables-tnat–F//清空nat表
固定的公网IP地址(外网接口地址)的最基本的从内部私网访问外部公网SNAT操作:
#iptables-tnat-APOSTROUTING-s192.168.1.0/24-oeth0-jSNAT–to-source202.30.8.2
或者使用地址伪装:
#iptables–tnat-APOSTROUTING–s192.168.1.0/24–oeth0–jMASQUERADE
第二种方法多用于外网口的公网地址是DHCP动态获取的(如ADSL拨号)。
(5)配置DNAT规则
Web是WorldWideWeb的缩写,是一个由许多互相链接的超文本组成的系统,通过互联网访问。
资源通过超文本传输协议(HypertextTransferProtocol)传送给用户,而后者通过点击链接来获得资源。
万维网不等同互联网,万维网只是互联网所能提供的服务其中之一,是靠着互联网运行的一项服务。
默认端口为80[5]。
SSH 为 SecureShell 的缩写,由IETF的网络工作小组所制定,SSH为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
SSH默认端口为22[6]。
此次试验以Web服务和SSH服务为例。
指定登陆到学校网站主页时登陆到Host1上的Web服务:
#iptables–tnat-APREROUTING–ieth0–d202.30.8.2–ptcp––dport80–jDNAT––to–destination192.168.1.2
外部终端通过SSH登陆到内部网络时,指定登陆到内部终端Host1上:
#iptables–tnat-APREROUTING–ieth0–d202.30.8.2–ptcp––dport22–jDNAT––to–destination192.168.1.2
(6)保存并重启生效
进行完上述实验配置后将现在的过滤规则保存,并且重新启动后才能生效,命令如下:
#serviceiptablessave//保存规则
#serviceiptablesrestart//重新启动Iptables防火墙
5系统测试
5.1SNAT测试
在进行SNAT测试时,需要进行如下操作:
在外部终端public上安装和运行Web服务。
命令如下:
#yuminstallhttpd–y//安装Web服务端程序
#chkconfighttpdon//开机启用Web服务程序
并且在Web服务目录/var/www/html/下创建index.html文件如图5-1所示:
图5-1创建Web主页内容
#servicehttpdstart