跳转至

代理

代理服务器(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 服务器。

判断

nslookup google.com
  • 如果返回的 DNS 服务器地址是 127.0.0.1 或代理软件监听的端口(如 127.0.0.1:53),说明 DNS 被代理接管。
  • 如果返回的是系统 DNS(如 10.10.0.21),说明代理未接管。

系统代理

当设置了 HTTPS_PROXY=127.0.0.1:7890,实际上是在告诉系统中所有支持该变量的软件(比如 curlpipgit 或浏览器):请不要直接建立连接,而是先把数据包交给 127.0.0.1:7890 托管。即使要访问本地服务,程序在检查环境变量,发现存在 HTTPS_PROXY后,也会把流量发给代理端口。

NO_PROXY

为了防止这种“自己找自己还要通过代理”的尴尬情况,网络协议栈引入了另一个关键环境变量:NO_PROXY。当设置:

export HTTPS_PROXY=127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,::1

程序就会检查 NO_PROXY,发现目标在排除名单中,绕过代理,直接建立回环连接。

Clash

配置文件

rules:
    // 绕过本地地址,避免回环
  - IP-CIDR,127.0.0.0/8,DIRECT
  - DOMAIN,localhost,DIRECT