本章前半部分学习如何用iptables实现网址转换(NAT)和端口转换(PAT),它们也可以统一称为网址和端口转换(NAPT)。后半部分学习什么是伪装包及如何伪装包。

NAT和PAT(NAPT)简介
按照TCP/IP工作原理,互联网上的主机要能够通讯,就必须有唯一的IP地址。

然而,由于公网地址的缺乏,必须使用NAT以实现多台主机共用一个IP地址。

地址转换需要用一台NAT路由器(我们使用Linux)改写其后面的设备的源或目标IP地址。

在小型私网里有许多小型SOHO路由器或NAT路由器实现NAT,它们价格便宜,只用插上线即可。如果你曾经用过一台,你会发现Linux就能很好胜任。

为了进一步解释NAT,请观察下图:

点击在新窗口中浏览此图片


我们有一台与公网相联的Linux路由器,其公网IP地址为1.1.1.1,私网IP网段为192.168.1.0/24. 私网IP还有:
● 10.0.0.0 - 10.255.255.255  (10/8 prefix)
● 172.16.0.0 - 172.31.255.255  (172.16/12 prefix)
● 192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

互联网不路由私网IP,外网不能直接访问私网里的机器。

为了能使采用私网IP地址的主机与互联网上别的主机通讯,NAT路由器将它们的私网IP地址改写成自己的公网IP地址。这样,互联网上的主机可以与Linux路由器的公网IP地址交换数据。

路由器需要知道哪些数据是发给它自己的,哪些是发给私网里的主机的。这通过跟踪所有经过的TCP/IP包实现。这一过程称为连接跟踪。

连接跟踪使Linux具备在内存表里保存TCP、UDP连接的信息的能力。每个连接的信息包括IP地址、端口号、协议类型、连接状态和等待时长,都存储在/proc/net/ip_conntrack里。下例是/proc/net/ip_conntrack里若干条目:
tcp      6 262872 ESTABLISHED src=2.2.2.2 dst=1.1.1.1 sport=80 dport=65000 [UNREPLIED] src=192.168.1.2 dst=2.2.2.2 sport=65000 dport=80 use=1
udp      17 174 src=1.1.1.1 dst=1.1.1.11 sport=40997 dport=161 src=1.1.1.11 dst=1.1.1.1 sport=161 dport=40997 [ASSURED] use=1

通过连接跟踪,当包到达1.1.1.1时路由器知道它是对192.168.1.2请求的响应,必须转发到那台台式机上。因此它将把IP包头部的目标地址由1.1.1.1改成192.168.1.2.

处理连接跟踪的防火墙即“状态防火墙”。

NAT可以处理不同的情况:
● 一对一(1:1):将一个私网IP地址转换成一个公网IP地址。比如在上图中,如果我们只处理台式机的NAT,即一对一的NAT
● 一对多(1:n):将一个私网IP地址转换成多个公网IP地址。即从一段公网IP地址范围里为私网机器选择一个公网IP。
● 多对一(n:1):这正好就是上图所示的,将多个私网IP地址转换成一个公网IP(如果该公网IP地址就是路由器使用的IP地址,也就是masquerading,译成伪装)
● 多对多(n:n):从一段公网IP地址里为多个私网IP地址选择若干IP地址。
内文分页: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
< Tags: >

0 comment(s)

发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写