-->究竟为什么内网不能用公网地址访问内网服务器。不是任何设备都存在此问题,拿cisco的设备来说,不同版本的ios,有的就没有这个问题,而有的版本就有问题,netscreen的防火墙也没有这个问题,关键是开发者有没有意识到这个问题,通过修改ios,完全可以避免。对于这个问题,解决方法是有,比如内网dns欺骗、pix上得alias等等,但是究竟为什么有些设备不支持呢?今天我斗胆发个贴,因为有些结论纯粹靠想,也没有设备进行试验,所以希望大家跟贴讨论,达到抛砖引玉的目的,谢谢了先!
以下所有内容均针对出口是以太网的情况,对于串口接入,不会出现这种问题。
本地出口地址是5.5.5.1,isp对端是5.5.5.2(掩码没写,稍后会分别讨论)。 1.1.1.1和1.1.1.2是内网两台服务器的内网地址,被静态映射到公网上的5.5.5.4和5.5.5.5. 内网的pc全部被pat到出口上。本地路由器一条缺省路由到isp对端。
我想这个拓扑应该是非常普遍的了,我认为就是因为这个非常普遍的拓扑,造成了很多人所反应的“内网不能通过公网地址访问内网服务器”这个问题。我认为这个问题的关键原因就在于掩码,就是在3层上做文章。
第一节
先来看看一般情况下,这个环境的掩码的规划。假设isp分配一段8地址子网给本地,这样isp路由器接口和本地路由器接口共占用2个,网络地址、广播地址共占用2个,可用的一共4个,掩码是248。对于图示的拓扑,假设本地路由器出口掩码是248(内网pc的pat地址相应的也就是掩码为248),被映射的两个地址掩码也是248,这个最普遍的掩码规划,结果是:服务器、内网pc的pat地址、本地出口地址全部处于同一个网段。我们分析一个包的来龙去脉,来看看到底内网pc通过公网地址可否访问到内网服务器。
假设内网一台pc1.1.1.111发出ping 5.5.5.4(服务器的公网地址)请求,包源地址1.1.1.111,目的地址5.5.5.4,路由器收到这个包后,检查路由表,发现5.5.5.4就位于自己的出口网段(假设出口为以太口),所以直接通过arp广播请求5.5.5.4的mac地址,问题出现了,谁会应答这个请求呢?没有人,所以,这种情况下(所有公网地址在同网段)当然不会通。不但内网访问服务器不行,服务器之间通过公网地址访问也不会通。
结论一:只要出口地址和服务器映射的公网地址在同网段,就有问题。
第二节
基于上面的讨论,我们知道了只要出口地址和服务器映射的公网地址在同网段,就会发生“无人应答”的必然结果,所以我们这次改变掩码规划,将出口掩码变长,变为252(isp掩码也要相应改变)。在这里首先声明一个要点,就是nat池的地址可以和出口不在同网段,以前有帖子也讨论过,我自己一开始也迷惑,后来想明白了,只要isp路由器上有这些地址的路由就可以,下一条是本地路由器,这样本地路由器便可以接受到这些包。
我们再次分析一个包的流程。内网pc1.1.1.111发出ping 5.5.5.4请求,包源地址1.1.1.111,目的地址5.5.5.4,路由器收到这个包后,检查路由表,这一次,发现5.5.5.4不在本地的任何接口,所以走了缺省路由,将包发给了isp对端口,并在本地nat表中生成一条项目,记录内网地址1.1.1.111被转换成公网地址5.5.5.1加上端口号(假设端口号是8888),isp接受到的包,目的地址是5.5.5.4,源地址变成了5.5.5.1,它检查它的路由表,发现5.5.5.4路由下一条是5.5.5.1,也就是本地路由器,所以又将此包发给本地路由器,经过了一次往返后,本地收到这个包,首先接受nat引擎的过虑,发现5.5.5.4正在被静态映射到内网的1.1.1.1的主机,所以改变目的地址为1.1.1.1,源地址还是5.5.5.1,这样就交给了路由引擎,查看路由表,1.1.1.1的路由当然有了,通过2层直接发给1.1.1.1,至此,去程的包分析完毕。
我们再分析回程的包。服务器1.1.1.1收到包后,准备回应给5.5.5.1(加端口号),发出reply包,源地址1.1.1.1,目的地址5.5.5.1:8888,本地路由器收到后,先给路由引擎,发现5.5.5.1就是出口地址,问题又来了,包的目的就是出口,而不是经过出口,这时候路由器该怎么办呢?假如是从外向内来的包访问5.5.5.1:8888,这时候会先提交个nat引擎,做nat转换。但是这是从内向外发出的包,要先提交给路由引擎,我认为此时,由于收到的包是从内向外的,目的直接就是针对出口来的,而出口并没有开启什么端口,除非为了web管理,或者telnet管理开启80或23端口,所以路由器会丢弃,因为没有得到应答。
结论二:只要出口地址和内网pc的pat地址同网段,同样会有问题
第三节
我们再变更掩码方案,使得内网pc的pat地址和服务器映射地址同网段,但和出口不同网段。假设内网pc的pat地址为5.5.5.6(和服务器地址同网段)
我们再次分析一个包,内网pc1.1.1.111发出ping 5.5.5.4请求,包源地址1.1.1.111,目的地址5.5.5.4,路由器收到这个包后,检查路由表,发现5.5.5.4不在本地的任何接口,所以走了缺省路由,将包发给了isp对端口,并在本地nat表中生成一条项目,记录内网地址1.1.1.111被转换成公网地址5.5.5.6加上端口号,isp接受到的包,目的地址是5.5.5.4,源地址变成了5.5.5.6,它检查它的路由表,发现5.5.5.4路由下一条是5.5.5.1,也就是本地路由器,所以又将此包发给本地路由器,经过了一次往返后,本地收到这个包,首先接受nat引擎的过虑,发现5.5.5.4正在被静态映射到内网的1.1.1.1的主机,所以改变目的地址为1.1.1.1,源地址还是5.5.5.6,这样就交给了路由引擎,查看路由表,1.1.1.1的路由当然有了,通过2层直接发给1.1.1.1,至此,去程的包分析完毕。
我们再分析回程的包。服务器1.1.1.1收到包后,准备回应给5.5.5.6(加端口号),发出reply包,源地址1.1.1.1,目的地址5.5.5.6,本地路由器收到后,先给路由引擎,发现5.5.5.6不在本地任何端口下,所以走了缺省路由,发给isp,并在nat表中生成一条记录,将1.1.1.1转换为5.5.5.4,isp接受到包源地址变为5.5.5.4,目的地址是5.5.5.6,通过检查路由表,发现5.5.5.6这个地址的路由下一条应该是5.5.5.1,也就是本地路由器,所以包又被发回来了,经过一次往返,本地收到了这个包,首先提交给nat引擎,发现目的地址5.5.5.6在nat表中对应着内网pc1.1.1.111,所以将5.5.5.6替换成1.1.1.111,源地址不变,还是5.5.5.4,然后提交给路由引擎,路由器在2层将包发给1.1.1.111,这时,1.1.1.111这台主机收到了从5.5.5.4返回的包,而他一开始ping请求包,就是发给5.5.5.4这个公网地址的,所以ping通了!!!!
结论三:内网pc的pat地址和服务器公网地址同网段,同时和出口地址不同网段,这样没有问题。
第四节
本贴的高潮部分已经达到,至此,只剩下一种情况,就是内网pat地址、服务器公网地址、出口地址全部不在同网段。假设出口掩码252,服务器公网地址段掩码248,内网pc的pat地址改为5.5.5.254,这样三种地址都不在同网段。而且isp也必须有服务器公网地址和内网pc的pat地址的路由,下一条是5.5.5.1我们再次分析一个包,内网pc1.1.1.111发出ping 5.5.5.4请求,包源地址1.1.1.111,目的地址5.5.5.4,路由器收到这个包后,检查路由表,发现5.5.5.4不在本地的任何接口,所以走了缺省路由,将包发给了isp对端口,并在本地nat表中生成一条项目,记录内网地址1.1.1.111被转换成公网地址5.5.5.254加上端口号,isp接受到的包,目的地址是5.5.5.4,源地址变成了5.5.5.254,它检查它的路由表,发现5.5.5.4路由下一条是5.5.5.1,也就是本地路由器,所以又将此包发给本地路由器,经过了一次往返后,本地收到这个包,首先接受nat引擎的过虑,发现5.5.5.4正在被静态映射到内网的1.1.1.1的主机,所以改变目的地址为1.1.1.1,源地址还是5.5.5.254,这样就交给了路由引擎,查看路由表,1.1.1.1的路由当然有了,通过2层直接发给1.1.1.1,至此,去程的包分析完毕。
我们再分析回程的包。服务器1.1.1.1收到包后,准备回应给5.5.5.254(加端口号),发出reply包,源地址1.1.1.1,目的地址5.5.5.254,本地路由器收到后,先给路由引擎,发现5.5.5.254不在本地任何端口下,所以走了缺省路由,发给isp,并在nat表中生成一条记录,将1.1.1.1转换为5.5.5.4,isp接受到包源地址变为5.5.5.4,目的地址是5.5.5.254,通过检查路由表,发现5.5.5.254这个地址的路
由下一条应该是5.5.5.1,也就是本地路由器,所以包又被发回来了,经过一次往返,本地收到了这个包,首先提交给nat引擎,发现目的地址5.5.5.254:某个端口,在nat表中对应着内网pc1.1.1.111,所以将5.5.5.254替换成1.1.1.111,源地址不变,还是5.5.5.4,然后提交给路由引擎,路由器在2层将包发给1.1.1.111,这时,1.1.1.111这台主机收到了从5.5.5.4返回的包,而他一开始ping请求包,就是发给5.5.5.4这个公网地址的,所以ping通了!!!!
结论四:三种地址全部不在同网段,没有问题。
综上所述,得到了4个结论:
结论一:只要出口地址和服务器映射的公网地址在同网段,就有问题。
结论二:只要出口地址和内网pc的pat地址同网段,同样会有问题。
结论三:内网pc的pat地址和服务器公网地址同网段,同时和出口地址不同网段,这样没有问题。
结论四:三种地址全部不在同网段,没有问题。
可以简单的发现,前两个是充分条件,只要满足了其中一个,就会出现问题,而现在大多数的接入都符合前两个情况,而几乎没有人“多此一举”的去改变掩码规划,所以造成如此多的普遍现象:内网不能用公网地址访问内网服务器!!!!!
出口地址只要不和其他两种地址同网段,就可以保证不出问题。
至此,已经探讨了问题的原因。此过程中我还得到了一个推论和一个待验证的问题。
推论:如果nat池中的公网地址和出口地址不同网段,不管在内网还是公网ping nat池中未参与转换的公网地址,会出现环路,包在本地和isp之间来回往返。
待验证的问题:
对于第三节和第四节,如果只在本地出口变长掩码,isp端不作任何改变,会怎么样?以第三节的环境来说:我们再次分析一个包,内网pc1.1.1.111发出ping 5.5.5.4请求,包源地址1.1.1.111,目的地址5.5.5.4,路由器收到这个包后,检查路由表,发现5.5.5.4不在本地的任何接口,所以走了缺省路由,将包发给了isp对端口,并在本地nat表中生成一条项目,记录内网地址1.1.1.111被转换成公网地址5.5.5.6加上端口号,isp接受到的包,目的地址是5.5.5.4,源地址变成了5.5.5.6,它检查它的路由表,由于此时isp的接口掩码没有变长,还是248,所以,它发现5.5.5.4路由就在它自己的接口上,所以直接在接口发arp请求5.5.5.4的mac地址,此时,按理说,没人会应答(除非本地开了代理arp),但是有一次偶尔发现在路由器上show arp,会发现有些奇怪的条目,ip地址都是nat池中的地址,mac地址不管ip多少,都是本地出口的mac地址,这样的话,即使arp请求的地址不和出口同段,一样会得到应答,不知道这个对不对。
对这个问题的解决方法,在ios层面,一般是利用修改dns回包中的payload实现的,将dns返回的公网地址,修改成内网地址,这样直接通过内网通信,就不会有问题了。对于直接用公网ip访问的包,会在路由器内部先nat,然后调头,不走出口,直接再回到内网,以支持用公网地址访问 <!--v:3.2-->
发表评论
-
cisco router完美删除单条ACL
2010-03-12 09:41 1240路由器上创建了多条访问控制列表,检查时发现有一条不妥,想将它删 ... -
S3026E、S3526E、S3050、S5012、S5024系列交换机端口限速配置流程
2010-01-12 11:23 1666使用以太网物理端口下面的line-rate命令,对该端口的出方 ... -
华为中低端交换机mac+ip+端口绑定的配置总结
2009-12-24 14:15 2211好多时候,往往是出于安全性考虑,客户要求把交换机下挂pc的m ... -
cisco ios 升级方法和TFTP的用法
2009-08-14 10:21 8317升级方法: 现总结归纳出CISCO路由器IOS映像升级的几种方 ... -
CISCO 路由器做VPN Server详细设置
2009-08-13 22:50 4415NAT(config)#username velino pa ... -
cisco路由器上四种封BT的方法
2009-08-04 17:32 1504方法1:封锁BT端口 大家都知道如果要限制某项服务,就要在路 ... -
CISCO交换机配置命令大全
2009-07-16 10:18 3562switch> ... -
Cisco Catalyst 2950 配置-实现端口与IP的绑定
2009-07-15 09:58 1080在Cisco catalyst 2950交换机上,通过配置ex ... -
CISCO 2950交换机配置命令
2009-07-15 09:57 1571CISCO 2950交换机配置命令 ... -
Cisco 2950端口镜像设置
2009-07-15 09:57 1900先解释一下端口镜像:端口镜像简单的说,就是把交换机一个(数个) ... -
Cisco 2950密码破解
2009-07-14 11:45 1238Cisco 2950密码破解 ⒈连接交换机的con ... -
网络故障预防及解决办法
2009-07-14 11:37 917引起网络故障主要有以 ... -
思科交换机的常用配置
2009-07-14 11:02 2387思科交换机的常用配置1、 交换机的端口2、端口:以太网端口( ... -
Cisco3550配置作为DHCP服务器工程实例
2009-07-13 10:23 1129一台3550EMI交换机,划分三个VLAN,valn2为服务器 ... -
交换机做DHCP服务器
2009-07-07 10:29 996什么是DHCP服务器呢?为 ... -
开启Cisco交换机DHCP Snooping功能
2009-07-07 10:26 1404一、采用DHCP服务的常见问题 架设DHCP服务器可以为 ... -
HUAWEI&CISCO交换机端口镜像配置指导
2009-07-06 15:11 10891. Quidway 3026端口镜像配置方法: 以下例子中 ... -
CISCO交换机端口镜像配置
2009-07-06 15:10 2346先解释一下端口镜像:端口镜像简单的说,就是把交换机一个(数个) ...
相关推荐
### NAT实现外网对内网服务器的访问 #### 一、NAT简介 NAT(Network Address Translation,网络地址转换)是一种用于在网络之间转换IP地址的技术,最初出现在思科的11.2版本的IOS中,并在RFC1631和RFC3022中有详细...
- ADSL专线则提供固定的公网IP地址,适合外网访问内网服务器。 2. **动态DNS服务**: - 由于拨号方式的IP地址变动,外网无法通过DNS解析到内网服务器。 - 动态DNS服务(如花生壳、科迈网)允许将域名与不断变化...
- **多方式访问限制**: 目前,在华为SecPath防火墙上暂不支持同时使用域名、公网IP地址和私网地址访问内部服务器的需求。 #### 实现方案 针对上述需求,有两种实现方法: 1. **R002版本支持**: 如果设备运行的是...
标题中提到的“使用反向SSH从外网访问内网主机的方法详解”是一种解决内网主机对外不可见问题的技术手段,适用于没有权限设置端口映射或不具备内网主机外网IP的情况。这种方法主要通过建立反向SSH隧道,使得外网主机...
### 海康威视设备外网访问设置方法详解 #### 一、概述 海康威视作为安防行业的领军企业,其设备广泛应用于监控系统中。为了方便用户远程管理和查看视频资料,海康威视提供了多种外网访问设置方法。本文将详细介绍...
### 内网IP搭建FTP服务器详解 #### 一、引言 随着互联网技术的发展,越来越多的人希望通过搭建FTP服务器来共享自己的资源。然而,并非所有人都拥有公网IP地址,这对于搭建能够被互联网用户访问的FTP服务器构成了...
当外网用户尝试通过域名或公网IP地址访问内网服务器时,其数据流程如下: - 用户发起请求到202.101.1.1的TCP 80端口; - 数据包通过互联网到达企业的边界路由器,根据配置的端口映射规则,目的IP地址由202.101.1.1...
- 允许外网用户通过`202.100.1.3`这个公网IP地址Ping内网服务器`192.168.0.2`。 7. **配置默认路由:** ```bash ip route-static 0.0.0.0 0.0.0.0 202.100.1.1 ``` - 配置默认路由,指向公网接口的下一跳...
例如,在建立一个CS服务器时,如果其IP地址是192.168.0.235,端口为27015,要让外部用户能够访问,就需要在路由器上配置端口映射,将外网的某个端口(比如8080)映射到这个内网IP和端口。 在ROS 2.96中,进行端口...
- 对于内网服务器,需要通过NAT穿透或端口映射技术,将内网服务器的FTP端口(默认21)映射到公网IP,使外部用户可以访问。 - 使用路由器的端口转发功能,将公网请求的特定端口转发到内网FTP服务器的相应端口。 7....
- 假设需要将内网服务器映射到公网(例如公网地址为62.14.81.105)。 - 首先,在运行管理中心中配置集群代理服务的HTTPS多线路: - 添加服务,选择“集群代理服务”,然后添加线路,输入线路名称。 - 在多线路下...
### Nexus构建内网Maven仓库知识点详解 #### 一、Nexus简介 Nexus是一款流行的开源组件管理平台,主要用于管理企业内部的软件组件仓库。它能够帮助开发团队更有效地管理和分发Maven、npm等各类项目的依赖包。通过...
Frp(Fast Reverse Proxy)是一款高性能的内网穿透工具,常用于解决内网服务器无法直接访问公网的问题。在Windows环境下,通过一键搭建脚本,可以快速设置并运行Frp服务器,实现远程访问内网资源。下面将详细介绍Frp...
端口映射是将一台主机的私有IP地址的一个端口号映射到公网IP地址上的另一个端口上,使得外网用户可以访问位于内网的服务器。其主要作用在于: - **提高数据传输效率**:通过端口映射可以让内网中的服务器或计算机被...
《Windows本地与云端服务器进行SSH与FRP内网穿透详解》 SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他网络服务。它基于加密技术,确保数据传输的安全性。在Windows系统中...
1. **端口映射**:该工具的核心功能是将内网服务器的特定端口映射到公网IP的任意可用端口,使得外部用户可以通过公网地址访问内网服务器的服务。 2. **安全控制**:它可能提供了访问控制机制,允许设置白名单或黑...
它能够帮助用户将内网服务暴露到公网,使得在外网环境下也能访问到内网的设备或服务,极大地扩展了网络服务的可达性。在Linux系统中,FRP提供了方便的命令行工具进行配置和管理。 **FRP工作原理** FRP的工作原理...
这使得外网可以通过公网IP访问内网的DNS服务器。 测试部分展示了映射配置的效果。当映射建立后,内网和外网PC均能正确访问HTTP服务器。若要取消映射,只需在配置中添加`no`前缀,如`no ipnat inside source static ...
例如,在某些场景下,我们需要一台Ubuntu服务器既能访问内部网络资源,也能访问外部互联网。这种情况下就需要对Ubuntu系统进行特殊的网络配置,即所谓的“双网卡”配置。本文将详细介绍如何在Ubuntu系统中配置双网卡...
在 pfSense 中,我们还需要设置路由规则,例如允许内网访问外网,限制外网访问内网等。这样,我们就可以实现安全的 NAT 上网。 VMware ESXi 服务器上配置 NAT 上网需要通过软路由来实现,可以使用 pfSense 等软件...