单位有3个域名,用量很大,2014年开始本人研究部署了Bind+DLZ +Mysql的三机智能多链路DNS,非常好用,优点是:

1、使用Mysql管理记录,配置、管理、查询方便。

2、自动判断运营商,返回指定IP,实现智能多链路。目前我们单位有电信、移动、教育网专线和固定IP,通过Bind的View,判断请求源IP自动返回对应运营商的服务IP。很好很强大也很实用。

3、根据配置自动为内网分配对应的运营商解析。。。我单位内网用户较多,有一个不少见的需求,内网部分用户要使用电信专线、部分用户要使用移动专线,然而走电信的就得用电信DNS解析、走移动就得用移动DNS解析,同样的,Bind的View也很好的解决了这个问题。

然而、、、、、今天突然让我崩溃了,有2、3个域名外网访问部分出错、打不开网页。我仔细研究,发现外网被解析成了内网IP。。。如下图:

这让我很头疼呀,仔细分析,把Bind从Dump缓存、Config文件、ACL文件全部翻了个遍,没发现问题。。。。。这个问题的状况是这样的:只有2、3个域名有这个问题,其它子域名(近几十个)都没问题。。。。

很奇葩,我都有点怀疑跟服务器有没有关系呀。。。。。

折腾2、3天没搞定,也没想通。。。今天晚上从路由器入手打算再走一遍,我手头有3个路由器,一行行看配置,终于找到点眉头,被解析错误的地址,我在其中一个路由器上做了NAT回流。。。

好吧,什么是NAT回流?这里简单讲讲,详细的大家上网搜吧,就是我做了nat server,比如: nat server protocol tcp global X.X.X.X any inside 192.168.200.57 any。这时外网用户通过X.X.X.X的公网IP、内网用户通过192.168.200.57的IP分别可以访问对应的服务,当然主要是用DNS了,但是如果我内网里有人用X.X.X.X的公网IP去访问呢?这时正常、默认的NAT配置是访问不了了,详细我也不说了,搜到这篇文章的兴许就是这个故障,这时就要做一个NAT回流,让路由器从内网过来的访问公网IP请求能够像在外网一样访问,这时配置NAT回流就可以,我是这样弄的(路由器是H3C的):

1、先搞个回流的ACL。。。我的故障就在这里了,一会说。

acl number 3010
 rule 5 permit ip source 172.16.0.0 0.0.255.255
 rule 6 permit ip source 172.17.0.0 0.0.255.255
 rule 7 permit ip source 172.21.0.0 0.0.255.255
 rule 8 permit ip source 172.22.0.0 0.0.255.255
 rule 15 permit ip source 192.168.0.0 0.0.255.255
 rule 100 deny ip

2、在内网接口上配置,注意是内网,而不是外网。

interface GigabitEthernet2/2/0
 port link-mode route
 nat outbound 3010
 nat server protocol icmp global X.X.X.X inside 192.168.200.57
 nat server protocol tcp global X.X.X.X any inside 192.168.200.57 any
 ip address 10.10.248.1 255.255.255.252

那为什么这个回流会导致外网解析到了内网IP呢???原因是我在做Acl的时候,当时只是为了测试一下这个200.57的业务内网用公网IP访问,就简单的内网IP都给Permit了,这个配置NAT回流是可以了,但由于没有匹配目标IP,导致所有包都能回流,导致内网的DNS回传给外网DNS服务器的响应包识别为是内网地址段来的,就丢了个内网IP给人家运营商服务器。。。把上面Acl改完善就OK了,完整的应该是这样:

rule 5 permit ip source 172.16.0.0 0.0.255.255 destination 192.168.200.57 0
 rule 6 permit ip source 172.17.0.0 0.0.255.255 destination 192.168.200.57 0
 rule 7 permit ip source 172.21.0.0 0.0.255.255 destination 192.168.200.57 0
 rule 8 permit ip source 172.22.0.0 0.0.255.255 destination 192.168.200.57 0
 rule 100 deny ip

也就是严格匹配内网地址段 to 内网需要NAT回流的服务器内网地址。。。这样对这台的NAT回流也正常(内网用它的公网IP也可以访问)、同时也不会出现BIND解析出错的问题。。。

当然如果你不提供像我的这个智能BIND解析服务,那你就像上面那个笼统的ACL也是可以的。。。我这是两个功能在一起就冲突了的。

2016-11-18补充:

后来发现,其实光ACL也没用,还是会这样呀。。。。。苦苦研究一个多月,最终在厂商工程师的帮助下解决了问题,原来是路由器的DNS-ALG在作怪,H3C路由器V5平台下ALG功能默认是开启的,而V7下默认是关闭了就没这问题。我的是V5,得手动关闭一下:系统视图下:undo alg dns

解决问题了。。。。OK,那么alg dns是什么鬼呢?来看看:

NAT ALG 功能,仅在要通过NAT 设备进行DNS、FTP、SIP 和RTSP 等应用(如DNS 服务器在公网中,需要在内网中使用域名访问位于内网的服务器时)时,需要配置NAT ALG 功能。使能ALG 功能可以使NAT 设备识别被封装在报文数据部分的IP 地址或端口信息,并根据动态形成的NAT 地址(或同时包括端口号)映射表项进行替换,使报文正常穿越NAT。

所以呢,nat server只在inbound生效,应该是报文从内网返回命中内敛口,出去了返回的是私网解析。。。

至此,该问题彻底解决。。。

配置NAT回流导致外网解析到了内网IP的更多相关文章

  1. 利用阿里云搭建frp实现外网远程桌面链接内网电脑

    主要应用场景:针对学生放假回家使用外网无法远程操作学校的服务器或者电脑,这里通过阿里云的云服务器搭建一个frp服务,实现内网穿透,从而可以直接通过远程桌面或者其他工具实现对校园网内的服务器或者电脑进行 ...

  2. centos6.5虚拟机配置Nat模式连接外网

    想来在虚拟机上搭点软件,于是乎就想让虚拟机连上外网,就用到了Nat模式,自己对网络了解不是太深,以至于配置联网花了一下午.总结下联网步骤. (1)点击虚拟网络编辑器 (2)注意以下几点标红处 (3)点 ...

  3. 在外网使用ssh连接内网中的多台Linux服务器

    最近因为要对全球工控机网络进行协议扫描,需要在实验室配置几台服务器,因为我们只有一个IP地址,所以是用路由器搭建了一个内网(拓扑结构如下图).但是这样做了之后无法在宿舍通过ssh直接连接服务器,因为那 ...

  4. frp内网 穿透映射使内网svn可外网访问

    起因 公司svn目前部署在内网服务器上,现在想在家中也可以使用,因此需要外网访问内网的工具 经过 使用过几个产品: utools,一个小巧的windows下的工具,内网映射只是它的一个小功能,支持tc ...

  5. SSH反向连接让外网也可远程访问内网机器

    最近把树莓派折腾了一番,放在了家里,但是家里是内网,出门在外,不方便直接ssh上来,于是请教了秦兄,指点迷津,发现SSH反向链接可以实现这个功能. 1. ssh反向链接的概念 A主机:外网,ip:11 ...

  6. tomcat manager 禁止外网访问 只容许内网访问

    参考:http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html A default Tomcat installation includes ...

  7. udp内网穿透 两个内网互联

    1,在有外网ip的机器上启动server. package udp; import java.net.DatagramPacket; import java.net.InetSocketAddress ...

  8. 通过云主机(网关机)远程登录内网mysql

    国内的一些云主机平台(UCloud,阿里云,腾讯云等)走的都是网关机+内网机(即局域网)模式,网关机代理外网访问,不能直接连接内网机器.本文介绍通过远程登录云主机,并设置本地代理的方式,通过sqlyo ...

  9. 【网络】内网穿透方案&FRP内网穿透实战(基础版)

    目录 前言 方案 方案1:公网 方案2:第三方内网穿透软件 花生壳 cpolar 方案3:云服务器做反向代理 FRP简介 FRP资源 FRP原理 FRP配置教程之SSH 前期准备 服务器配置 下载FR ...

随机推荐

  1. 说说分析bug的一些心得

    bug已经成为程序员工作中的一部分,作为从事嵌入式软件开发已有三年的我,经手的bug也不少了.先说说自己对于bug的心态变化吧,刚开始工作的时候,自己还是很喜欢bug的.那时,自己是负责维护别人的代码 ...

  2. Server Develop (六) Linux epoll总结

    Linux  epoll epoll是Kernel 2.6后新加入的事件机制,在高并发条件下,远优于select.epoll最大的好处在于它不会随着监听fd数目的增长而降低效率.因为在内核中的sele ...

  3. paip.杀不死进程的原因--僵尸进程的解决.txt

    paip.杀不死进程的原因--僵尸进程的解决.txt 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...

  4. paip.提升性能----jvm参数调整.txt

    paip.提升性能----jvm参数调整.txt 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.n ...

  5. atitit.提升开发效率---MDA 软件开发方式的革命(4)----编辑表单建模

    )----编辑表单建模 1. 建模语言的选型anno+html...不是uml 1 2. 指定显示模板 @BeanEditForm(tmplt="c:/edit.html") 1 ...

  6. paip.微信菜单直接跳转url和获取openid流程总结

    paip.微信菜单直接跳转url和获取openid流程总结   #------不能直接跳转,贝儿提示不安全的链接.. #-------使用auth跳转. //todox 直接转到..  direct ...

  7. 【锁】Oracle锁系列

    [锁]Oracle锁系列 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ...

  8. springJDBC学习笔记和实例

    前言:相对于Mybatis(ibatis),个人感觉springJDBC更灵活,主要实现类JdbcTemplate:它替我们完成了资源的创建以及释放工作,从而简化了我们对JDBC的使用.它还可以帮助我 ...

  9. asynchttpClient框架关于多文件批量上传的问题,改用xUtil

    RequestParams params = new RequestParams(); params.add("ordernum",ordernum); params.add(&q ...

  10. JPA的事务注解@Transactional使用总结

    在项目开发过程中,如果您的项目中使用了Spring的@Transactional注解,有时候会出现一些奇怪的问题,例如: 明明抛了异常却不回滚? 嵌套事务执行报错? ...等等 很多的问题都是没有全面 ...