在我国,因为网民众多,运营商没法保证为每个宽带用户提供全球惟一的公网 IPv4 地址。所以不少用户会发现经过路由器端查看到的 WAN 端 IP 与百度“IP”关键词所获得的 IP 不一致,而且前者的 IP 为一个私有 IP。html
而还有一些状况下,公网 IP 比较昂贵,企业虽然自己也持有少许的独立的公网 IP,可是因为成本限制没法为企业内每一台主机都提供一个公网 IP,或者内网并非全部服务都须要暴露到公网中进行访问,那么企业有可能就会使用 NAT 技术将大量的内网 IP 经过必定规则映射到公网 IP 上。web
而最多见的其中一种技术就是 NAPT,也叫“网络端口地址转换”。由于通常一个服务都是经过一个端口来提供,所以经过这种方式能够将特定的服务经过特定的规则开放到少许的公网 IP 上。缓存
国内家庭宽带 常见的就是 100 开头的地址,公司学校的网络也可能如此,这种状况没法经过端口映射 DMZ等方法让内网设备暴露给外网,只能经过内网穿透方式。安全
在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫作网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包经过路由器或防火墙时重写来源 IP 地址或目的 IP 地址的技术。服务器
这种技术被广泛使用在有多台主机但只经过一个公有 IP 地址访问因特网的私有网络中。根据规范,路由器是不能这样工做的,但它的确是一个方便且获得了普遍应用的技术。固然,NAT 也让主机之间的通讯变得复杂,致使了通讯效率的下降。网络
NAT 最初发明的一大目的就是解决公网 IP 的 IPv4 地址资源枯竭的问题,因此国内大城市的主流运营商常常会使用这种方法来规避资源枯竭的问题(我国普及 IPV6 可能还须要必定时间),端口 NAT 转换让 IP 地址获得了极大的利用,NAT 的一个特色就是:对外隐藏了真实地址负载均衡
在一个典型的配置中,一个本地网络使用一个专有网络的指定子网(好比192.168.x.x或10.x.x.x)和连在这个网络上的一个路由器。这个路由器占有这个网络地址空间的一个专有地址(好比192.168.0.1),同时它还经过一个或多个因特网服务提供商提供的公有的IP地址(叫作“过载”NAT)链接到因特网上。当信息由本地网络向因特网传递时,源地址从专有地址转换为公用地址。由路由器跟踪每一个链接上的基本数据,主要是目的地址和端口。当有回复返回路由器时,它经过输出阶段记录的链接跟踪数据来决定该转发给内部网的哪一个主机;若是有多个公用地址可用,当数据包返回时,TCP或UDP客户机的端口号能够用来分解数据包。工具
固然它是有一些缺点的,一些须要初始化从外部网络建立的TCP链接和无状态协议(好比UDP)没法实现。除非NAT路由器管理者预先设置了规则,不然送来的数据包将不能到达正确的目的地址。测试
在必定程度上,NAT 依赖于本地网络上的一台机器来初始化和路由器另外一边的主机的任何链接(通常的家居路由器就充当这个角色,路由器会给本身分配一个内网地址,通常是 192.168.1.1),它能够阻止外部网络上的主机的恶意活动。这样就能够阻止网络蠕虫病毒来提升本地系统的可靠性,阻挡恶意浏览来提升本地系统的私密性。不少具备NAT功能的防火墙都是使用这种功能来提供核心保护的。另外,它也为 UDP 的跨局域网的传输提供了方便。网站
假设个人 PC 机是 192.168.1.100,个人手机是 192.168.1.101,与百度通讯的公网 IP 都是 1.1.1.1,但百度服务器没法直接从 IP 判断我访问的设备,这就致使了外网 IP 不能直接地对内网设备发起通讯。咱们能够先对公网设备发起通信,对方的回复会经过路由器发给咱们,可是公网里的主机没法主动跟咱们通信,好比咱们的电脑就不能做为 web 服务器,当用户访问 1.1.1.1 的时候,路由器并不能区分到底访问的是那个设备。
这一种也可称做 NAT 或“静态 NAT”,在 RFC 2663 中提供了信息。它在技术上比较简单,仅支持地址转换,不支持端口映射。
Basic NAT 要求对每个当前链接都要对应一个公网IP地址,所以要维护一个公网的地址池。宽带(broadband)路由器一般使用这种方式来容许一台指定的设备去管理全部的外部连接,甚至当路由器自己只有一个可用外部IP时也如此,这台路由器有时也被标记为 DMZ主机。
因为改变了 IP 源地址,在从新封装数据包时候必须从新计算校验和,网络层以上的只要涉及到IP地址的头部校验和都要从新计算。
Basic NAT 要维护一个无故口号NAT表,结构以下:
内网IP | 外网IP |
---|---|
192.168.1.55 | 219.152.168.222 |
192.168.1.59 | 219.152.168.223 |
192.168.1.155 | 219.152.168.224 |
这种方式支持端口的映射,并容许多台主机共享一个公网 IP 地址。
支持端口转换的 NAT 又能够分为两类:源地址转换和目的地址转换。
前一种情形下发起链接的计算机的 IP 地址将会被重写,使得内网主机发出的数据包可以到达外网主机。
后一种状况下被链接计算机的 IP 地址将被重写,使得外网主机发出的数据包可以到达内网主机。
实际上,以上两种方式一般会一块儿被使用以支持双向通讯 ,该技术应用于内部网络主机地址与公网上主机地址重叠的状况。
NAPT 维护一个带有 IP 以及端口号的 NAT 表,结构以下:
内网IP | 外网IP |
---|---|
192.168.1.55:5566 | 219.152.168.222:9200 |
192.168.1.59:80 | 219.152.168.222:9201 |
192.168.1.59:4465 | 219.152.168.222:9202 |
简单说:在 NAT 网关上会有一张映射表,表上记录了内网向公网哪一个 IP 和端口发起了请求,而后若是内网有主机向公网设备发起了请求,内网主机的请求数据包传输到了 NAT 网关上,那么 NAT 网关会修改该数据包的源 IP 地址和源端口为 NAT 网关自身的 IP 地址和任意一个不冲突的自身未使用的端口,而且把这个修改记录到那张映射表上。
最后把修改以后的数据包发送到请求的目标主机,等目标主机发回了响应包以后,再根据响应包里面的目的 IP 地址和目的端口去映射表里面找到该转发给哪一个内网主机。
这样就实现了内网主机在没有公网 IP 的状况下,经过 NAPT 技术借助路由器惟一的一个公网 IP 来访问公网设备。
说一下它的特色吧,也能够说是 NAT 的特色:
从这里咱们能够看到,NAPT 只解决了内网主机在没有公网 IP 的状况下如何访问公网主机的问题,可是并不能解决公网主机如何主动向内网主机发起请求的问题。
NAT 还能够用做负载均衡、失效终结、透明代理等。
复习下网络方面的知识,这个确定都学过,至于还记不记得.....
因特网域名分配组织 IANA 组织(Internet Assigned Numbers Authority)保留了如下三个 IP 地址块用于私有网络。
10.0.0.0 - 10.255.255.255 (10/8比特前缀)
172.16.0.0 - 172.31.255.255 (172.16/12比特前缀)
192.168.0.0 - 192.168.255.255 (192.168/16比特前缀)
主流的家用路由器使用 C 类私有地址做为路由器 LAN 端的 IP 地址较多,因此咱们能够看到路由器设置页面的 IP 通常都为 192.168 开头。
一些大型企业就须要使用B类甚至A类地址段做为内部网络的地址段。A类地址的容量最大,能够容纳16777214个主机,B类地址能够容纳65534个主机,C类地址能够容纳254个主机。
先说说家庭宽带的状况吧。家庭宽带若是没有公网 IP,那么意味着你在本机上监听的任何端口,都只能在本机网卡所在的网络中访问,这个网络通常是路由器 LAN 端所在的网络。若是没有作特定的映射规则,那么路由器 WAN 端所链接到的网络将没法正常访问该主机提供的服务。
若是这种状况下想要让 WAN 端(若是运营商为你分配了公网 IP,那么 WAN 端所链接到的网络一般就是公网),那么须要在路由器上作端口映射。好比说路由器的 LAN IP 为 192.168.1.1,WAN IP 为23.23.23.23,我想让内网 192.168.1.2 主机的 80 端口提供的 HTTP 服务器直接可以在公网中经过 http://23.23.23.23
访问,那么就要将 192.168.1.2:80
映射到 23.23.23.23:80
上。
可是一般状况下,运营商是不会给普通用户公网 IP 的。那么用这种方法映射,在公网仍然是没法访问的,由于你的路由器 WAN 端链接的又是运营商更上一级的路由器 LAN 端;严重一点,甚至是层层链接最后才到公网,这种行为称做流量穿透。
国内某电,某动的宽带就有大量这种行为。经过流量穿透的方式来提供的宽带服务,看似便宜,实则影响很大,因为你们公用一个 IP,可能会致使不少网站的反 SPAM 策略伤及无辜,或者内部为了节省带宽,使用缓存,致使一些不应缓存的敏感安全页面被缓存起来,甚至致使部分网站缓存失效彻底打不开。
有的人发现,即便本身有公网 IP,可是仍然没法经过常规方法架设服务器,这是怎么回事呢?
这是运营商为了防止我的随意开设各类非法服务,也防止黑客经过扫描器进行抓鸡和批量扫描,将一些经常使用端口进行了封禁,好比说咱们这的中国电信就将 80,8080 等端口封禁了。这样封禁,虽然必定程度上保证了咱们的网络安全,好比说以前的勒索病毒正由于国内大部分用户没有独立的公网 IP,而且操做系统最容易爆发漏洞的 135,139 等端口被运营商封禁了,使得国内我的家庭电脑中招的几率小了不少;
可是致使即便有公网 IP,也没法使用经常使用端口向外网提供服务,只能更换到其余端口。这样有什么很差呢?比较典型的问题就是 WEB 网站默认使用 80 端口,那么在输入网址的时候能够不用带上端口号,显得比较美观。
还有的时候咱们在对企业作渗透测试的时候,发现企业某台公网服务器只对公网开放了常见的 80 端口,而咱们提权时须要用到的 3389 等端口没有对公网开放,这个时候又该怎么办呢?
若是咱们没有一台公网服务器,咱们可使用国内大名鼎鼎的“花生壳”,“nat123”等服务来实现,可是他们背后的原理是什么呢?
咱们若是在本身拥有一台具备公网 IP 服务器的状况下,咱们能够借助这台公网 IP 服务器提供服务。解决这些问题的方式就是内网穿透了。
先假设咱们本身有一台公网服务器,他的 IP 为 45.45.45.45。咱们又有一台内网服务器 IP 为 23.23.23.23. 咱们如今想把 23.23.23.23:80,即内网服务器上的 HTTP 服务开放到 45.45.45.45 上。
最简单粗暴的方式就是,咱们能够直接将整个内网服务器环境在公网服务器上从新搭建一遍。
可是这样作很麻烦,咱们有的时候并不想这样作,咱们只是想简单的借助公网服务器的网络来发布一个内网服务。
前面咱们经过 NAPT 原理得知:
NAPT 实现了内网主机在没有公网 IP 的状况下访问公网主机。那么咱们能够这样作:
假设分配的公网 IP 为 23.23.23.23,内网IP为 192.168.1.2。公网主机(45 那台)先监听 80 端口,监听这个端口是用于向外部提供一个 HTTP 服务。
同时其余任意一个端口(这里咱们假设为 7777),监听这个端口是用于让内网服务器主动链接进来打通一个隧道 ,使用心跳链接来维持,这样看起来就像公网主机直接向内网主机发送消息。接着内网再主动向公网主机(45 那台)的 7777 发起一个请求,这样内网就成功与公网主机创建了一个链接通道。
而后当有任何客户端主动链接公网的 80 端口时,公网接收到链接请求以后立刻把这链接请求经过先前创建好的隧道转发到内网主机,内网主机接收到来自隧道的数据包后再主动链接内网主机自身的 80 端口,链接成功以后将数据包原封不动地转发数据包给 80 端口,待 HTTP 服务器程序处理完这个数据包,生成了响应报文以后再原路转发回去,最终到达公网的 80 端口,而后返回给最开始请求公网服务器 80 端口的客户端。
看起来是否是比较绕呢?事实上大名鼎鼎的花生壳内网版以及 nat123 等内网穿透工具的原理基本就是如此,可是并不彻底是这样。由于一个运输层端口只能同时提供一种服务,可是咱们会发现花生壳这种内网穿透服务是借助一个公网 IP 同时给不少用户提供了服务,这是由于花生壳在流量转发这一层上并非像我以前所说的原封不动的将报文进行转发,而是在转发以前加了一些控制协议的内容,用于指明该转发到哪一个花生壳客户端所在的内网主机上。前者这种原封不动的转发方式一般叫作透明传输或者透明代理。
这种方法基本适用于全部的网络环境,只要你的设备能上互联网,前提是你得拥有一台拥有"公网IP"的主机充当"跳板"
为了安全起见,一般会在网络中加入防火墙,防火墙有入站规则和出站规则。若是不是很是严格的安全管控,一般是不会设置出站规则的,可是入站规则通常都会设置的,好比说外部能够经过 80 端口传入内网的 WEB 服务器访问网页,可是不能经过 3389 端口登录内网的远程桌面。
而在内网渗透的过程当中碰到这种状况,咱们也能够借助上面内网传统的方式实现穿透防火墙的入站规则。由于防火墙一般只拦截了入站,没有拦截出站,那么咱们可让内网服务器主动出站(主动链接到黑客的服务器),与黑客本身的服务器打通隧道,最终绕过防火墙连上 3389 远程桌面。
还有一种状况就是咱们已经拿下了内网其中一台并无作任何防火墙规则的白名单服务器,可是咱们想连上内网另外一台作了入站规则的目标服务器,那么咱们可让这台白名单服务器做为一个跳板,让他先监听自身任意一个端口,而后在有任何用户连上这个端口以后,白名单服务器就主动连上内网的目标服务器,而后借助这台白名单服务器打通黑客和目标服务器的链接隧道。
而在黑客工具中大名鼎鼎的 lcx 原理也就是如此,前者的实现是 lcx 的 listen 和 slave 命令,后者的实现是 lcx 的 tran 命令。
IP 隧道是指一种可在两网络间用网际协议进行通讯的通道。在该通道里,会先封装其余网络协议的数据包,以后再传输信息。在 IP 隧道中,每一个 IP 包、来源/目的地址信息都被封装在一个数据包中,该数据包用于实际物理网络传递。
由于防火墙的本质及原始数据报文被隐藏了,IP 隧道常常用于绕过简单的防火墙规则,一般须要经过内容控制软件才能对 IP 隧道进行筛查。
除了内网穿透这个通用的解决方案,还有些其余方案也能够作到,毕竟内网穿透须要一台服务器作跳板是有点成本的。
但若是 ISP 给你分了个内网 IP ,你就只能用内网穿透的方案了。
在路由器的管理界面应该看到过,因为运营商分配的 IP 地址不断变更,直接操做这个变更的 IP 地址是至关麻烦的,而操做一个不变的域名(bfchengnuo.com)是至关方便的,DDNS 的原理就是内网设备(通常是路由器)每隔一段时间对 DDNS 服务器发起请求,DNS 服务器将请求的 IP 记录下来而且刷新相关域名的解析记录(通常是 A 记录),这样每次拨号怎么变更 ,域名 bfchengnuo.com 老是指向路由器所分配的公网 IP。
这个对拥有“公网 IP ”的宽带才有做用,对于没有“公网 IP ”的宽带没啥做用,由于拥有"公网 IP "的这台网关设备在运营商机房里,你通常没有权限对它进行端口映射等操做。
通常 DDNS 服务都是免费的,常见的路由器里会集成。
另外 DNS 解析服务商,国内常见的 alidns,cloudxns,dnspod 都开放管理域名解析的 API,能够定时运行脚本进行 DDNS,不过 API 请求的间隔时间是有限制的。
不过让我想到了之前玩远控时候用的动态域名,肉鸡上线后会自动连接这个域名,而后经过 DDNS 就至关于都在连接你的电脑了(不过须要先进行端口映射,直接拨号上网而且分配的是公网 IP 的话就不须要了)。
应用:解决不少网络视频服务器和网络摄像机经过远程访问时须要一个固定的 IP,在家搭建 web 服务器(若是 80 没被封的话)等。
这个方法适用于对公网 IP 网关设备具备控制权而且拥有完整的路由转发。
端口映射的教程网上都找获得,通常拿到"公网 IP "的电信宽带(亲测)基本能够,拿不到就去投诉,国内基本上也是“不包含 80 端口的公网 IP”,也就是说,若是你想架设 Web 服务器且不想改变默认端口,那就必须使用内网穿透 80
至于 DMZ ,由于外网客户端没法直接访问内网的主机,当配置了 DMZ 主机后全部的请求路由器都会直接转发给配置的 DMZ 主机(能够是内网主机)。
在一些家用路由器中,DMZ 是指一部全部端口都暴露在外部网络的内部网络主机,除此之外的端口都被转发。严格来讲这不是真正的 DMZ,由于该主机仍能访问内部网络,并不是独立于内部网络以外的。但真正的 DMZ 是不容许访问内部网络的,DMZ 和内部网络是分开的。
若是你手上有闲置的 vps,同样可使用:
外网的主机没法主动访问内网,这个不是绝对的,好比有个协议叫 P2P .......像 QQ 的视频聊天等都是经过这个来进行穿透的。
对于 QQ 来讲,实现应该要简单的多,由于必需要登录,也就是必需要首先访问公网的服务器,而后服务器会记录 公网IP/内网IP 和端口号,这样两我的直接 P2P 就能找获得映射了。
至于 P2P 是如何穿透 NAT 的其余方法,这个感兴趣的能够搜搜看看。
https://www.jianshu.com/p/a67...
https://zh.wikipedia.org/wiki...
https://zhuanlan.zhihu.com/p/...
https://www.sfantree.com/publ...
https://www.zhihu.com/questio...