代理¶
代理服务器(Proxy Server)是网络中的一个中间实体,它代表客户端向目标服务器发送请求,并接收目标服务器的响应。其主要功能包括转发请求、缓存数据、访问控制、隐藏客户端真实IP以及突破网络限制等。
代理工作在应用层,通常是 HTTP/HTTPS/SOCKS。通常不加密 (HTTPS代理除外)。流量仅限配置了代理的特定应用(如浏览器、下载软件)。速度较快(因为只处理特定流量且可能不加密)。
发明代理服务器的根本原因是为了提高性能、控制访问和节省资源。在带宽昂贵且有限的情况下,设置一个HTTP代理服务器,可以把内容缓存起来,后面人再访问时,直接从代理服务器获取即可。同时,当机构需要知道个人上网在做什么,或者禁止访问某些网站时,可以设置代理服务器,对流量进行控制和审计。
DNS¶
- 在系统代理模式下,代理软件仅代理应用层流量(HTTP/HTTPS/SOCKS),不强制接管 DNS。系统 DNS 设置仍生效,但 DNS 请求可能被代理规则处理。
- 在透明代理/TUN 模式下,代理软件通过虚拟网卡接管所有网络流量,包括 DNS 请求。此时代理软件完全控制 DNS 解析。
- 如果代理软件未显式配置 DNS,大多数代理工具会沿用系统 DNS。
- 如果代理软件显式配置了 DNS(例如 Clash 配置中指定了
nameserver: 114.114.114.114,且开启了dns.enable: true),代理软件会拦截 DNS 请求,并使用自身配置的 DNS 服务器。
判断¶
- 如果返回的 DNS 服务器地址是
127.0.0.1或代理软件监听的端口(如127.0.0.1:53),说明 DNS 被代理接管。 - 如果返回的是系统 DNS(如
10.10.0.21),说明代理未接管。
系统代理¶
当设置了 HTTPS_PROXY=127.0.0.1:7890,实际上是在告诉系统中所有支持该变量的软件(比如 curl、pip、git 或浏览器):请不要直接建立连接,而是先把数据包交给 127.0.0.1:7890 托管。即使要访问本地服务,程序在检查环境变量,发现存在 HTTPS_PROXY后,也会把流量发给代理端口。
NO_PROXY¶
为了防止这种“自己找自己还要通过代理”的尴尬情况,网络协议栈引入了另一个关键环境变量:NO_PROXY。当设置:
程序就会检查 NO_PROXY,发现目标在排除名单中,绕过代理,直接建立回环连接。