跳转到内容

关于 HTTPS 与 Google DNS 服务器的疑问:一次讲清楚

Прокси
关于 HTTPS 与 Google DNS 服务器的疑问:一次讲清楚

Google DNS 服务器(8.8.8.8、8.8.4.4)能够高效解析域名,包括 HTTPS 网站的域名,但它默认既不会加密 DNS 查询本身,也不会解密随后的 HTTPS 流量。这是两个彼此独立的安全层:DNS 把人类可读的域名翻译成 IP 地址,而 HTTPS 在解析完成之后,加密您的设备与网站服务器之间的实际数据交换。

理解基础:DNS 与 HTTPS

要完全理解 Google DNS 与 HTTPS 之间交互的细节,我们必须先弄清这两个互联网基础协议。

什么是 DNS?(Domain Name System,域名系统)

域名系统(DNS)相当于互联网的电话簿。每台接入互联网的设备都有唯一的 IP 地址(例如 192.0.2.1 或 2001:0db8::1)。但访问网站时人们使用的是便于记忆的域名,例如 gproxy.net。DNS 正是把这些域名翻译成对应 IP 地址的系统,从而让浏览器找到并连接到正确的服务器。

DNS 解析过程通常包含以下几步:

  1. 客户端查询:当您在浏览器中输入 gproxy.net 时,操作系统会先检查本地 DNS 缓存。
  2. 递归解析器:如果本地没有记录,查询会被发送到配置好的递归 DNS 解析器(通常由您的 ISP 提供,或是 Google DNS 8.8.8.8 这类公共解析器)。
  3. 根服务器:递归解析器随后向 13 台根 DNS 服务器之一发起查询,以找到顶级域名(TLD)的权威名称服务器,本例中的 TLD 是 .com
  4. TLD 名称服务器:TLD 名称服务器指向 gproxy.net 的权威名称服务器。
  5. 权威名称服务器:这些服务器保存 gproxy.net 的实际 DNS 记录,并把 IP 地址返回给递归解析器。
  6. 返回客户端:递归解析器把 IP 地址发回给客户端,客户端随即发起连接。

传统上,DNS 查询以未加密的 UDP 数据包通过 53 端口发送,这使其容易遭受多种攻击:

  • 窃听:网络路径上的任何人都能看到您正在访问哪些网站。
  • DNS 欺骗/缓存投毒:攻击者可以把伪造的 DNS 记录注入解析器缓存,即使用户输入了正确域名,也会被重定向到欺诈网站。
  • 审查封锁:ISP 或政府可以通过篡改 DNS 响应来阻止用户访问特定网站。

什么是 HTTPS?(Hypertext Transfer Protocol Secure)

HTTPS 是 HTTP 的安全版本,而 HTTP 是浏览器与所连网站之间传输数据所用的协议。其中的“S”代表“Secure”(安全),由传输层安全协议 TLS 提供支撑,TLS 的前身是 SSL(Secure Sockets Layer)。HTTPS 为网络通信提供三项关键安全属性:

  • 加密:浏览器与服务器之间交换的所有数据都会被加密,截获流量的人无法读取。这可以保护登录凭据、信用卡号和个人数据等敏感信息。
  • 数据完整性:HTTPS 确保数据在传输过程中未被篡改。任何改动都会被检测到,连接随即中断。
  • 身份验证:HTTPS 通过数字证书验证网站服务器的身份,防止攻击者冒充合法网站的中间人(MITM)攻击。

TLS 握手是在发送任何应用数据之前完成的复杂过程:

  1. Client Hello:浏览器发送“Client Hello”消息,列出它支持的 TLS 版本、加密套件以及一个随机数。
  2. Server Hello:服务器以“Server Hello”回应,选定兼容的 TLS 版本和加密套件,并附上自己的随机数和数字证书。
  3. 证书校验:浏览器通过受信任的证书颁发机构(CA)验证服务器证书。若证书有效,则信任该服务器的身份。
  4. 密钥交换:客户端与服务器利用随机数和加密算法协商并建立共享的“会话密钥”。
  5. 加密通信:之后的全部数据交换都用该会话密钥加密。

HTTPS 运行在 TCP 443 端口,而 HTTP 使用 80 端口。关键在于,HTTPS 在浏览器与网站服务器之间提供端到端加密。DNS 解析虽然是前提条件,却是在 HTTPS 连接建立之前发生的独立步骤。

Google DNS(8.8.8.8 和 8.8.4.4):它是什么,不是什么

Google Public DNS 是 Google 于 2009 年推出的免费全球 DNS 解析服务,其主要目标是提供比许多 ISP 自带 DNS 解析器更快、更安全、更可靠的替代方案。

公共 DNS 解析器

Google DNS 服务器 8.8.8.8 和 8.8.4.4 之所以广受欢迎,源于以下几点优势:

  • 性能:Google 使用全球 anycast 网络,当您查询 8.8.8.8 时,请求会被路由到最近的 Google 数据中心。相比距离远或负载高的 ISP 解析器,这通常带来更低的延迟和更快的页面加载速度。
  • 可靠性:依托 Google 庞大的基础设施,其 DNS 服务具备高可用性和冗余能力。
  • 安全性(DNSSEC):Google Public DNS 完整支持 DNSSEC(DNS Security Extensions),通过对 DNS 记录进行加密签名,帮助抵御 DNS 欺骗和缓存投毒。但 DNSSEC 只验证 DNS 数据的完整性与真实性,并不加密 DNS 查询本身。

在隐私方面,Google 声称只从 DNS 查询中收集有限信息。出于调试和安全目的,它会临时记录您的 IP 地址(通常为 24 至 48 小时),随后进行匿名化处理。同时,它会无限期保留不可识别个人身份的信息(例如被请求的域名),用于改进服务和抵御 DDoS 攻击等威胁。虽然这通常好过某些 ISP 的做法,但仍意味着您要把 DNS 查询数据托付给 Google。

Google DNS 会加密我的查询吗?

这是一个关键区别。当您把设备配置为使用 8.8.8.8 或 8.8.4.4 作为传统 DNS 解析器时,DNS 查询会通过 53 端口以 UDP(有时是 TCP)明文发送、不加密。这意味着任何观察您网络流量的人(例如您的 ISP、局域网管理员或攻击者)仍能看到您正在解析哪些域名。

不过,Google 一直是加密 DNS 协议的积极倡导者和早期采用者:

  • DNS-over-HTTPS(DoH):Google Public DNS 支持 DoH,它把 DNS 查询封装进 HTTPS 流量中加以加密。这样您的 DNS 请求看起来就像普通网页流量(走 443 端口),更难被识别、拦截或封锁。
  • DNS-over-TLS(DoT):Google Public DNS 同样支持 DoT,它直接通过专用端口(通常是 853)用 TLS 加密 DNS 查询。DoT 提供与 DoH 类似的隐私收益,但使用独立端口,便于网络管理员识别并管理 DNS 流量。

因此,仅仅使用 8.8.8.8 并不会加密您的 DNS 查询。您必须明确地把操作系统、浏览器或路由器配置为使用 Google 的 DoH 或 DoT 端点,才能获得加密 DNS 查询带来的隐私保护。这一点常被误解,却至关重要。

关于 HTTPS 与 Google DNS 服务器的疑问:一次讲清楚

相互作用:Google DNS 与 HTTPS 如何协同(又各自独立)工作

理解事件发生的顺序,是看清 DNS 与 HTTPS 各自角色的关键。

访问 HTTPS 网站的解析流程

我们来梳理访问 https://www.securebank.com 时发生了什么:

  1. DNS 查找:浏览器向配置的 DNS 解析器(例如 Google DNS 8.8.8.8)发送针对 www.securebank.com 的 DNS 查询。除非您使用 DoH/DoT,否则该查询是未加密的。
  2. 获得 IP 地址:DNS 解析器把 www.securebank.com 的 IP 地址(例如 203.0.113.42)返回给浏览器。
  3. TCP 连接:浏览器向 IP 地址 203.0.113.42 的 443 端口(HTTPS 标准端口)发起 TCP 连接。
  4. TLS 握手:TCP 连接建立后开始 TLS 握手,其中包括交换证书、协商加密套件以及建立共享密钥。
  5. 加密数据传输:握手成功后,之后的所有数据交换——您的登录凭据、账户信息以及全部网站内容——都使用协商好的会话密钥加密。

从这一顺序可以清楚看到:DNS 解析先发生,是建立任何连接(包括 HTTPS 连接)的前提;随后由 HTTPS 接管,保护数据交换本身。您的 DNS 解析器(本例中的 Google DNS)在 HTTPS 加密或解密过程中不起直接作用。

安全影响

DNS 与 HTTPS 的职责分离带来了重要的安全影响:

  • DNS 查询的脆弱性:如果您的 DNS 查询未加密(使用传统 DNS),它们会把您的浏览习惯暴露给第三方。攻击者还可以实施 DNS 欺骗,把您重定向到恶意站点。即便恶意站点没有有效的 HTTPS 证书,仍有部分用户会忽略浏览器警告。更糟的是,高水平攻击者甚至可能为高度相似的域名取得有效证书,或通过被攻陷的 CA 签发伪造证书,使欺骗极具迷惑性。
  • HTTPS 的保护范围:HTTPS 保护的是连接建立之后通信内容以及数据的完整性。它会(基于证书)验证您正在与您想连接的那台合法服务器通信,但并不会隐藏把您引向该服务器的最初 DNS 查找。
  • 组合攻击路径:复杂攻击可能把 DNS 篡改与其他手段结合起来。例如攻击者成功投毒您的 DNS 缓存,把 securebank.com 指向自己的服务器,并设法为该域名申请到有效(但属欺诈)的 SSL 证书,那么浏览器可能显示绿色锁标,而您实际是在与攻击者控制的站点交互。这凸显了严格的证书校验以及尽可能使用安全 DNS 的重要性。

进阶 DNS 隐私:DoH、DoT 及其影响

传统 DNS 的脆弱性催生了加密 DNS 协议。Google 与其他厂商一样,在推广和落地这些协议方面扮演了关键角色。

DNS-over-HTTPS(DoH)

DoH 把 DNS 查询封装在标准 HTTPS 流量中,也就是说 DNS 请求通过 TCP 443 端口发送,与普通网页浏览使用同一端口。这种设计有几点优势:

  • 更强的隐私:由于 DoH 查询经过加密且与其他 HTTPS 流量难以区分,ISP 或其他网络观察者要窥探、记录或封锁它们要困难得多。您的 DNS 查询隐藏在海量加密网页流量之中。
  • 规避审查:在实行基于 DNS 的审查的地区,DoH 往往能绕过限制,因为它混入了正常网页流量,审查方很难在不影响正常网页访问的前提下专门针对 DNS 查询。
  • 更好的安全性:TLS 的使用为 DNS 响应提供身份验证与完整性校验,像 HTTPS 保护网页流量那样,降低 DNS 欺骗和缓存投毒的风险。

不过,DoH 也带来一些挑战:

  • 中心化隐忧:若少数大型 DoH 提供商(例如 Google 或 Cloudflare)被广泛采用,DNS 解析可能趋于中心化,使这些提供商掌握全球浏览行为的大量信息。
  • 网络监控变难:对企业网络或家长控制系统而言,DoH 使得出于安全或策略执行目的监控、过滤 DNS 请求更加困难,因为这些请求看起来就是正常网页流量。

Firefox、Chrome 等许多现代浏览器都内置了 DoH 支持,默认提供商往往是 Google 或 Cloudflare。Android 和 Windows 等操作系统也在整合系统级 DoH 选项。

DNS-over-TLS(DoT)

DoT 直接通过专用端口(通常是 TCP 853)用 TLS 加密 DNS 查询。与伪装成网页流量的 DoH 不同,DoT 明确表明自己是加密 DNS 服务。

  • 强隐私与强安全:与 DoH 类似,DoT 为 DNS 查询和响应提供强加密、身份验证和完整性保护,抵御窃听与篡改。
  • 专用端口:使用专用端口(853)使网络管理员相比 DoH 更容易识别、管理 DoT,并在需要时对其进行优先级设置或过滤。这在企业环境中可能是优势。

相较 DoH,DoT 的主要缺点是:专用端口更容易被专门针对 DNS 流量的防火墙或审查系统封锁。

Google Public DNS 同时支持 DoH 和 DoT。您可以把设备配置为使用这些加密端点,替代未加密的传统 8.8.8.8。例如,Google 的 DoH 端点是 https://dns.google/resolve,DoT 端点是 dns.google,端口 853。

代理服务与 DNS/HTTPS:提升安全与隐私(聚焦 GProxy)

当您在网络架构中引入 GProxy 这类代理服务后,它与 DNS 和 HTTPS 的交互会变得更加细致,通常还能带来额外的安全与隐私层次。

代理如何与 DNS 交互

代理服务器充当客户端与互联网之间的中介。使用代理后,您的 DNS 解析路径会发生变化:

  1. 客户端把请求(例如访问 gproxy.net)发送给 GProxy 服务器。
  2. 执行 DNS 查找的是 GProxy 服务器,而不是您的本地机器。它可以配置为使用任意 DNS 解析器,包括 Google DNS,甚至 Google 的 DoH/DoT 端点。
  3. GProxy 服务器把域名解析为 IP 地址后,代表您与目标服务器建立连接。

这种架构意味着,您的本地网络(ISP、路由器)只能看到指向 GProxy 服务器本身的 DNS 查询,而看不到最终目标网站。针对目标网站的实际 DNS 查询来自 GProxy 服务器所在的网络。这样就把您直接的 DNS 活动对本地网络观察者隐藏起来,从而提升隐私。

凭借稳固的基础设施,GProxy 可以配置为默认对所有经其路由的客户端请求使用安全 DNS 解析器,例如 Google 的 DoH/DoT 服务器。这样连代理自身的 DNS 查找也是加密的,不受监控侵扰。

HTTPS 与代理:SNI 难题

HTTPS 流量是端到端加密的,也就是说标准代理(例如 SOCKS5 代理或透明代理)通常看不到也无法修改加密内容。代理只是在客户端与目标服务器之间转发加密字节。总体而言,这对隐私是好事。

但有一条信息即便在 HTTPS 下也可能泄露:服务器名称指示(SNI)。SNI 是 TLS 协议的一个扩展,允许客户端在 TLS 握手开始时表明自己要连接的主机名。对于在单个 IP 地址上托管多个网站的服务器(虚拟主机)而言,这一点至关重要。遗憾的是,SNI 在最初的 TLS 握手阶段以明文发送,此时加密尚未完全建立。

这意味着,即使您的流量经过 HTTPS 加密并通过代理转发,网络路径上的观察者(例如您的 ISP,或者选择不当的代理提供商)仍可能通过检查 SNI 字段,看到您所访问 HTTPS 网站的域名。虽然通信内容依旧安全,但目标域名本身可能被暴露。

GProxy 在 DNS 与 HTTPS 管理上的优势

GProxy 通过一系列进阶能力应对这些挑战,同时提升 DNS 与 HTTPS 流量的隐私与安全:

  • 加密 DNS 解析:GProxy 的服务器可以配置为对所有源自代理的 DNS 查找只使用 DoH 或 DoT 解析器。这样连代理的 DNS 查询也保持私密,在单纯使用公共 DNS 之外再加一层保护。
  • 流量混淆与隧道:把全部流量经由 GProxy 的安全隧道转发后,您的 ISP 只能看到到 GProxy 服务器的加密连接,而看不到最终目的地。这会混淆您的在线活动,使人难以辨别具体的浏览行为。
  • 可能的 SNI 掩蔽(进阶):尽管 SNI 是 TLS 标准的一部分,但某些进阶代理配置或与代理叠加的 VPN 有助于缓解 SNI 泄露。例如通过代理链转发流量,或借助特定的 TLS 客户端实现,可以对中间观察者隐藏原始 SNI。GProxy 持续评估并实施此类进阶技术,以增强用户隐私。
  • 解除地域限制与访问:许多受地域限制的服务依赖基于 IP 的定位,且常常依赖 DNS 解析。使用 GProxy,您可以把流量经由位于其他地理位置的服务器转发,从而有效绕过这些限制。这对访问区域锁定的内容,或访问那些通过 DNS 查找核验您所在位置的服务尤为有用。例如,若某流媒体服务通过您的 IP 和 DNS 解析器判断所在地区,那么使用目标国家的 GProxy 服务器,并让其使用当地的 DoH 解析器,即可获得顺畅访问。

设想这样一个场景:A 国的用户想访问仅在 B 国提供的服务。该服务会检查用户的 IP 地址,同时执行 DNS 查找以确认一致性。用户连接到位于 B 国的 GProxy 服务器,并让该 GProxy 服务器使用同样位于 B 国的 Google DoH 端点(或其他安全 DoH 解析器),这样用户实际上看起来就是来自 B 国的合法用户,所有流量与 DNS 查询都在 B 国的互联网生态内被安全、本地地处理。

import dns.resolver
import dns.query
import dns.message
import requests # Required for DoH

def resolve_domain_doh(domain, doh_resolver_url="https://dns.google/resolve"):
    """
    Resolves a domain using DNS-over-HTTPS (DoH) via a specified resolver.
    Requires 'dnspython' and 'requests' libraries.
    """
    try:
        # Create a resolver object for DoH
        resolver = dns.resolver.Resolver(configure=False)
        resolver.nameservers = [] # Clear default nameservers to ensure DoH is used

        # Use Google's DoH endpoint
        resolver.use_https(doh_resolver_url)

        print(f"Attempting to resolve '{domain}' via DoH using {doh_resolver_url}...")
        answers = resolver.resolve(domain, 'A')

        print(f"IP addresses for {domain}:")
        for rdata in answers:
            print(f"- {rdata.address}")
        return [rdata.address for rdata in answers]
    except dns.resolver.NXDOMAIN:
        print(f"Error: Domain '{domain}' not found.")
    except Exception as e:
        print(f"An error occurred during DoH resolution: {e}")
    return []

# Example usage:
if __name__ == "__main__":
    target_domain = "gproxy.net" # Using GProxy's domain as an example

    # Resolve via Google's DoH
    resolve_domain_doh(target_domain)

    print("\n--- Traditional DNS Lookup (for comparison) ---")
    try:
        # For traditional DNS, dnspython will use system configured resolvers
        # or fall back to default if none are set.
        traditional_answers = dns.resolver.resolve(target_domain, 'A')
        print(f"IP addresses for {target_domain} (Traditional DNS):")
        for rdata in traditional_answers:
            print(f"- {rdata.address}")
    except Exception as e:
        print(f"Traditional DNS lookup failed: {e}")

    # Example of how a client might use a proxy for an HTTPS request
    # This is conceptual, as actual proxy configuration depends on client software.
    print("\n--- Conceptual HTTPS request through a proxy ---")
    proxy_url = "http://your_gproxy_ip:port" # Replace with actual GProxy details
    proxies = {
        "http": proxy_url,
        "https": proxy_url,
    }

    try:
        # requests library will handle DNS resolution via the proxy if configured
        # and then establish an HTTPS connection.
        print(f"Attempting to fetch {target_domain} via proxy {proxy_url}...")
        # For simplicity, we're assuming the proxy is configured to handle DNS securely
        # and forward HTTPS traffic.
        response = requests.get(f"https://{target_domain}", proxies=proxies, timeout=10)
        print(f"Status Code for {target_domain}: {response.status_code}")
        # print(f"First 200 characters of response: {response.text[:200]}...")
    except requests.exceptions.ProxyError as pe:
        print(f"Proxy connection error: {pe}")
    except requests.exceptions.ConnectionError as ce:
        print(f"Connection error (check proxy or network): {ce}")
    except Exception as e:
        print(f"An error occurred during HTTPS request via proxy: {e}")
关于 HTTPS 与 Google DNS 服务器的疑问:一次讲清楚

对比表:传统 DNS、DoH 与 DoT

下面总结各 DNS 协议的主要差异:

特性 传统 DNS(UDP/53) DNS-over-HTTPS(DoH) DNS-over-TLS(DoT)
查询是否加密 无(明文) 是(封装在 HTTPS 中) 是(封装在 TLS 中)
标准端口 UDP/53 TCP/443(与 HTTPS 相同) TCP/853(专用)
协议层 应用层(DNS) 应用层(TCP 之上的 HTTPS) 应用层(TCP 之上的 TLS)
数据包检测难度 非常容易(明文) 困难(看起来像网页流量) 中等(端口专用,但已加密)
抗审查能力 低(易被封锁/篡改) 高(难以与正常网页流量区分) 中(专用端口易被针对)
DNS 查询隐私 低(ISP/网络可看到全部查询) 高(查询被加密并隐藏) 高(查询被加密)
管理员的网络监控 容易(明文、端口固定) 困难(混入网页流量) 中等(端口专用,但已加密)
常见使用场景 多数网络/ISP 的默认方式 现代浏览器(Firefox、Chrome、Edge)及部分操作系统 Android(私人 DNS)、Linux/Windows 的系统级配置

核心要点

厘清 DNS 与 HTTPS 这类互联网协议的复杂之处,对维护在线安全与隐私至关重要。理解它们各自的角色,以及它们与 Google DNS、代理服务商等服务的交互方式,能让用户做出更明智的决策。

  • DNS 与 HTTPS 是不同层次:DNS 把域名翻译成 IP 地址,HTTPS 则在这一翻译*之后*加密数据交换。以传统方式使用 Google DNS(8.8.8.8)既不会加密您的 DNS 查询,也不会影响 HTTPS 加密,它只是提供快速可靠的解析服务。
  • 拥抱加密 DNS:要真正获得 DNS 查询隐私,就要超越传统 DNS,改用 DNS-over-HTTPS(DoH)或 DNS-over-TLS(DoT)。Google Public DNS 两者皆支持,能显著提升对浏览活动的保护,抵御窃听与篡改。
  • 代理强化整条安全链:像 GProxy 这样可靠的代理服务,能大幅增强您整体的隐私与安全态势。把流量经由 GProxy 转发后,您直接的 DNS 查询被掩蔽,而代理本身还可配置为使用加密 DNS(DoH/DoT),确保连中间的查找也是安全的。这样就构建起一套抵御监控与审查的稳固多层防线。

实用建议:

  1. 配置 DoH/DoT:只要条件允许,就把浏览器、操作系统或路由器配置为使用 DoH 或 DoT。许多浏览器在隐私设置中直接提供该选项(例如 Firefox 的“加密 DNS”或 Chrome 的“安全 DNS”)。若需系统级保护,可查看操作系统层面的 DoH/DoT 设置,或在 Linux 上使用 systemd-resolved 之类的工具。
  2. 始终确认 HTTPS:务必查看锁形图标,确认网站使用 HTTPS,处理敏感信息时尤其如此。对证书警告保持警惕,它们往往意味着潜在的安全问题。
  3. 用 GProxy 获得全面防护:若需要进阶隐私、解除地域限制以及统一的安全连接方案,可把 GProxy 纳入您的工作流。GProxy 能确保流量经由安全隧道转发,其服务器还可设置为使用加密 DNS 解析器,提供单靠 DNS 或 HTTPS 配置无法实现的端到端隐私增强方案。
support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.