开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

用传统的NAT方式替代H3C的DNS-MAP功能

简介:
+关注继续查看

相信大家在做链路均衡相关的项目中,往往会碰到用户有如下要求:对于内网服务器向外发布的域名,除了让公网用户来访问之外,内网用户也同样用域名方式来访问服务器。但是内网用户的访问往往会出问题,当公网用户用域名正常访问的时候,内网用户却访问不了应用,这是什么原因呢?我们来逐一分析两种情况。
1、  外网用户通过域名访问的情况,见下图:


如上图所示,当公网客户端2.2.2.2通过dns解析出内网服务器192.168.1.100对外域名www.abc.com对应的公网IP为1.1.1.1以后,会主动向1.1.1.1发出访问,整个访问可分为4个过程,每个过程的IP地址情况见上图。在上图4个过程中,我们可以看到1,2过程为从外到内的请求,3,4过程为从内到外的应答。整个过程符合TCP协议建立的过程,因此可以顺利访问。

    2、内网用户通过域名访问的情况,如下图:


大家应该发现了,第二种情况中,只存在3步。当内网用户通过域名解析出公网IP以后,会和第一种情况中一样发起第1过程第2过程,但是和第一种不同的是,服务器会直接把应答返回给内网用户,而内网用户接受到应答后会怎么处理?内网用户是对1.1.1.1发起的请求,所以内网用户自然会等待源地址为1.1.1.1的应答,结果却收到源地址是192.168.1.100的应答,明显和期待的不一致,所以内网用户会直接丢弃掉这个应答。这个也是为什么都是用域名进行访问,从外网来的用户可以正常访问,而内网用户却无法访问的根本原因所在。 

那么,如果解决这个问题呢?以前针对内网用户如何用公网域名访问本地私网内的SERVER这样的解决方法,一般是在内网建立DNS服务器,内网用户的dns服务器都统一指向内网的DNS服务器,而内网DNS在收到争对内网server的域名解析请求之后,会直接将内网server的内网IP解析给内网用户,这样内网用户就会直接访问server的内网IP地址,所以不会出现像上面提到的因为访问server的公网IP而产生的访问失败。

而如果用户内网没有DNS服务器怎么办呢?H3C的防火墙有个专门的功能,叫DNS-MAP,功能很简单,也很实用,就是用来解决这个问题,原理很简单,当内网用户向公网的DNS发出域名解析请求之后,DNS服务器会进行应答,应答包中包含了域名对应的公网IP,而DNS-MAP功能则可以修改这个应答包,将包中包含的公网IP直接替换为服务器的内网IP地址以后返回给用户,从而实现了与内网架设了DNS服务器一样的效果。当然这种功能也有局限:可以设置的域名是有数量限制的。

我在一个链路均衡项目的上线中,就遇到了用A10替换H3C防火墙的情况,其中H3C防火墙上就配置了DNS-MAP。当时用A10替换之后,就发现了内网用户无法再用域名的方式访问内网的server了,因为开始的时候用户并没有给我们全部的H3C防火墙配置,所以我们也没有看到启用DNS-MAP功能。后来当内网用户用域名访问不了server以后才发现。那么这个时候在A10上有哪些方式可以解决这个问题呢?

1、  GSLB方式

这种方式需要和公网域名供应商配合,将所有访问www.abc.com的请求都通过CNAME别名或者NS委派的方式转发到A10上,而由A10来进行地址解析。这种方式的优点是支持智能域名解析,缺点是需要协调域名供应商协同解决,客户也不一定会愿意配合。

2、  aflex脚本方式

用这种方式实现对DNS请求包的拦截,将所有关于 www.abc.com域名的应答中的公网IP替换为内网IP,这样就直接实现了与DNS-MAP一样的功能。优点是不需要用户配合,缺点是设备需要监控所有的DNS包,所以对设备的性能会有一定的影响。

由于当时用户要求必须马上解决这个问题,而第1种和第2种方式又都需要花费时间,所以我直接采用了第3种方式,也是最简单的一种方式:就用NAT来解决这个问题。

3、  NAT方式


这种方式最为简单,和原来过程中最大的差别,在于第2过程的时候,A10对请求的源地址进行了地址转换,从192.168.1.50,改成了A10的接口地址192.168.1.254,这样,服务器会将所有的应答都先返回给A10,而不会直接返回给用户,而在第4个过程中,A10会将应答的源地址从192.168.1.254改回1.1.1.1,这样用户也可以正常接收这个应答了。当然,我们只需要对内网用户发来的请求进行地址转换,而外网来的请求就不需要了,所以最好能够使用ACL对请求进行分类,外网来的不处理,内网来的进行NAT。

t.d.


本文转自 virtualadc 51CTO博客,原文链接:http://blog.51cto.com/virtualadc/723231

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
(机器人)自动化智能技术<=云计算+大数据+物联网
 近来了解些前沿的行业和技术趋势,结合多年社会认知得出未来智能机器人在软件技术和数据统计上的预测方案,即:机器人或自动化智能技术&lt;=云计算+大数据+物联网;注意"&lt;="这个符号并非我们现在认知的小于或等于,而是数据流向和利用的关系,也就是机器人或自动化智能技术是由云计算+大数据+物联网这三者分析,挖掘,统计而来;机器人或自动化智能技术则提供给云计算+大数据+物联网,这三者云
916 0
hdpi、mdpi、ldpi图片规格
引用:http://www.getideas.cn/?p=193 刚接触到Android 开发,遇到的一些问题.1.drawable(hdpi,ldpi,mdpi)有什么区别? 答:主要是为了支持多分辨率的.
436 0
Mac系统下安装和卸载HomeBrew的方法
安装命令如下: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 卸载命令如下: /usr/bin/ruby -e "$(curl -fsSL https://raw.
1112 0
SAP S/4HANA CDS View的访问控制实现:DCL介绍
来自我的同事Xu Miles Authorization Objects are business concept, they are distinguished by business scenario.
617 0
Centos7 php-fpm root 运行,执行 kill 等系统命令
Centos7 php-fpm root 运行,执行 kill 等系统命令 当前系统安装的是宝塔环境,PHP的环境在如下的目录:/www/server/php/72/etc 修改 php-fpm.conf [global] pid = /www/server/php/72/var/run/php-fpm.
842 0
安装 Beats (本地及 Docker)-Elastic Stack 实战手册
Beats 是轻量级(资源高效,无依赖性,小型)和开放源代码日志发送程序的集合,这些日志发送程序充当安装在基础结构中不同服务器上的代理,用于收集日志或指标(Metrics)。这些可以是日志文件(Filebeat),网络数据(Packetbeat),服务器指标(Metricbeat)或 Elastic 和社区开发的越来越多的 Beats 可以收集的任何其他类型的数据。 收集后,数据将直接发送到 Elasticsearch 或 Logstash 中进行其他处理。Beats 建立在名为 libbeat 的 Go 框架之上,该框架用于数据转发,这意味着社区一直在开发和贡献新的 Beats。
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
云解析DNS如何实现流量容灾部署
立即下载
网易 NEI 接口管理解决 方案
立即下载
又快又稳:阿里云下一代虚拟交换机解析
立即下载