V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yitd
V2EX  ›  DNS

DNS 服务器得到的 IP 是客户端 IP 还是客户端 DNS 出口 IP?

  •  
  •   yitd · 2019-11-18 19:13:42 +08:00 · 9498 次点击
    这是一个创建于 1592 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我感觉我瞎折腾了两天
    Dnspod 告诉我:
    什么是自定义解析?

    自定义解析,就是可以自己定义某 IP 段去访问指定的主机服务器。
    注:定义的是上网客户 DNS 的出口 IP,即后端 IP ;
    后端 DNS 段的获取需要自己收集的;
    单个 IP,必须定义上网 DNS 的出口 IP。


    就是说 DNS 服务器是获取不到用户 IP 的吧
    12 条回复    2019-11-22 09:30:39 +08:00
    testver
        1
    testver  
       2019-11-18 19:36:06 +08:00
    dns 服务器取不到用户 ip 的话怎么把解析结果告诉用户呢?
    GM
        2
    GM  
       2019-11-18 19:40:25 +08:00
    当然是出口 IP。
    排除法就知道了,假设我客户端 IP 是 192.168.0.2,DNS 服务器怎么把解析结果发给我?
    eastpiger
        3
    eastpiger  
       2019-11-18 19:50:31 +08:00   ❤️ 1
    需要分类讨论,核心问题是你自己到 DNS 服务器之间的通路上是否支持 RFC2671 eDNS ( Extension Mechanisms for DNS )和 RFC7871 edns-client-subnet。

    如果不支持上述协议,则 DNS 拿到的是直接沟通他的机器的 ip 地址,即你所说的出口 ip ;
    如果均支持上述协议,则 DNS 拿到的是你的 ip ;
    如果部分支持上述协议(一般内网内是无需支持的),则 DNS 拿到的是从他开始(一路支持这个协议回溯)的最早那台设备的前一个设备的 ip。

    ===========

    RFC7871 edns-client-subnet 是扩展自 RFC2671 eDNS 的一个协议,允许在 DNS 扩展字段内传输源主机的客户端信息,包括 ip 信息。当一个主机支持 eDNS 时,他会将请求包内的扩展字段传递到下一个节点,当 edns-client-subnet 启用且上游没有相关信息时,该节点将上一个节点试作源,并打包形成客户端信息传递到下一节点。

    目前大多数商业路由器均支持上述协议,至少国内联通电信大部分区域都可以用这种方法拿到源地址 ip,这也是为什么很多 DNS 解析服务支持私有线路指定解析,并且可以根据 ip 区分地区和运营商。但是这并不 100%普及,比如教育网内主干节点几乎全都不支持该协议。所以对教育网的定位基本上只能定位到运营商却定位不到地区。
    eastpiger
        4
    eastpiger  
       2019-11-18 19:51:02 +08:00
    另,前面的经验是我两年前查相关问题学习的,未必 100%准确。
    eastpiger
        5
    eastpiger  
       2019-11-18 19:52:04 +08:00
    再另,使用内网 ip 的路由器几乎都不会将内网 ip 作为源 ip 传出去,所以 dns 得到的一般至少是个公网 ip 才对。
    lc7029
        6
    lc7029  
       2019-11-18 19:54:58 +08:00
    dna 服务器一般是拿到出口的 IP,因为现在的网络几乎都是经过 nat 出去的。
    ipv6 拿到的是客户端的 IP
    eastpiger
        7
    eastpiger  
       2019-11-18 19:56:44 +08:00   ❤️ 1
    emmm 我觉得我还是要补充一下,前面说的这两个协议只需要主干网路由器支持就可以,不需要你的家用路由器支持,不需要内网的机器支持,一般企业的路由器也不需要支持。这里只需要公网内,你联网出口的上游路由器,传递你的公司 /家庭的出口 ip 即可。

    这种效果在教育网很显著。教育网内的主干网都不支持该协议(也可能是某些节点不支持导致没传递好),所以 DNS 解析服务对教育网基本上只能拿到清华的教育网出口 ip 了(教育网出口之后进入商业骨干网接入,就正常多了)。对其内部很难追踪,当然最近几年有没有变化我就不知道了。
    tomychen
        8
    tomychen  
       2019-11-19 12:28:14 +08:00
    协议的问题,看一下 RFC 不就很明了了吗
    johnjiang85
        9
    johnjiang85  
       2019-11-20 18:16:11 +08:00
    一般来说权威 DNS 拿到的都是客户端设置的 DNS 的后端出口 IP,除非你使用的递归 DNS 支持 ECS,然而目前绝大部分递归 DNS 都是不支持(少数支持的有 Google 的 8.8.8.8,OpenDNS、我们的 119.29.29.29 等)。

    使用以下命令可以获取 DNS 的后端出口 IP 地址

    `for i in {1..20};do dig @119.29.29.29 $i.ip.dnspod.net txt +short;done`

    如果结果只有一列,则表示指定 DNS 的后端出口 IP 地址;
    如果结果有两列,则第一列表示 DNS 的后端出口 IP 地址,第二列表示递归 DNS 向权威 DNS 请求时携带的 ECS IP.
    HalloCQ
        10
    HalloCQ  
       2019-11-21 09:46:31 +08:00
    @johnjiang85 按照你说的方法 发现 oneDNS 117.50.11.11 也是支持 ecs 的?
    johnjiang85
        11
    johnjiang85  
       2019-11-21 12:00:40 +08:00
    @HalloCQ 不是的,oneDNS 是转发到我们的 119.29.29.29 了
    HalloCQ
        12
    HalloCQ  
       2019-11-22 09:30:39 +08:00
    @johnjiang85 嗯,感觉 one 不是很准确,有些域名 020 电信解析到了联通 cdn
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1192 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:11 · PVG 07:11 · LAX 16:11 · JFK 19:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.