免责声明:本文仅供本人学习记录之用,并不提供相关服务。请勿转载或者将本文用于其他违法用途。
修订版本:v1.2
修订时间:2025年10月19日23:41:07
00 简介:什么是代理
代理服务器是一个中间人,它接收用户的上网请求并代为访问,再将结果传回给用户。
01 设置代理客户端
1.1 Linux
1.1.1 HTTP/HTTPS代理
HTTP/HTTPS 代理是 Web 流量的常用代理类型。所有 Web 请求首先发送到代理服务器,再由代理服务器转发到目标网站,因此目标网站看到的是代理服务器的 IP 而非您的真实 IP。HTTPS 代理通过加密代理与目标服务器之间的连接,提升了安全性。
1.1.1.1 设置临时 HTTP/HTTPS 代理在当前终端会话中设置临时代理:
export http_proxy=http://example.com:http_port
export https_proxy=http://example.com:https_port
- 注意:
- 会话关闭后,代理配置将失效。
- 通常 HTTPS 代理也使用 http:// 格式,因为代理连接本身不一定加密(加密发生在代理与目标服务器之间)。
- 建议使用小写变量(如 http_proxy),因为许多程序优先识别小写形式。
1.1.1.2 设置永久 HTTP/HTTPS 代理
编辑shell配置文件(如bash)
vim ~/.bashrc
添加以下内容:
export http_proxy=http://example.com:http_port
export https_proxy=http://example.com:https_port
应用配置
source ~/.bashrc
此配置将在所有新终端会话中生效。如果使用其他 shell(如 Zsh),请编辑对应的配置文件(如 ~/.zshrc)。
1.1.2 SOCKS4/SOCKS5 代理
SOCKS 代理(尤其是 SOCKS5)比 HTTP/HTTPS 代理更通用,支持多种网络协议和流量类型。SOCKS5 是 SOCKS4 的升级版,功能更全面。
1.1.2.1 SOCKS4 和 SOCKS5 对比
协议 | socks4 | socks5 |
---|---|---|
tcp | ✅ | ✅ |
udp | ❌ | ✅ |
身份验证 | ❌ | ✅ |
Ipv4 | ✅ | ✅ |
Ipv6 | ❌ | ✅ |
身份验证 | ❌ | ✅ |
在代理服务器解析DNS | ❌ | ✅ |
因此,SOCKS5 是一种更安全、更灵活的代理模式。
1.1.2.2 通过环境变量使用 SOCKS4/SOCKS5 代理
SOCKS 代理需通过 all_proxy 环境变量设置,而非 http_proxy 或 https_proxy:
# SOCKS4
export all_proxy=socks4://example.com:socks4_port
# SOCKS5(无身份验证)
export all_proxy=socks5://example.com:socks5_port
# SOCKS5(带身份验证)
export all_proxy=socks5://username:password@example.com:socks5_port
- 注意:
并非所有工具都支持 all_proxy 变量。某些工具(如 curl)支持,但其他程序可能只读取 HTTP/HTTPS 变量,或需单独配置。
1.1.2.3 通过 Proxychains 工具使用 SOCKS4/SOCKS5 代理
以 Ubuntu 22.04 为例:
# 安装 Proxychains
sudo apt install proxychains-ng proxychains4
在配置文件 /etc/proxychains4.conf 末尾添加以下内容之一(注释掉其他默认代理配置):
# SOCKS4
socks4 example.com socks4_port
# SOCKS5(无验证)
socks5 example.com socks5_port
# SOCKS5(带验证)
socks5 example.com socks5_port username password
使用时,在命令前添加 proxychains4:
proxychains4 curl example.com
- 注意:
Proxychains4 不支持 UDP 或 ICMP 流量(如 DNS 查询或 ping),因为它未 hook 相关函数。除非程序使用 TCP(如 TCP DNS),否则这些流量不会走代理。
Proxychains4 适用于命令行工具,不适合图形界面应用。
1.1.2.4 使用 SSH 通过端口转发创建 SOCKS5 代理(推荐)
通过 SSH 隧道创建 SOCKS5 代理:
# -f:后台运行
# -N:不执行远程命令,仅转发
# -D:创建 SOCKS5 隧道
# ServerAliveInterval:客户端检查服务器存活间隔(秒)
# ServerAliveCountMax:最大无响应次数
ssh -f -N -D 1080 user@host -o ServerAliveInterval=30 -o ServerAliveCountMax=3
此命令在本地监听端口 1080,并通过 SSH 隧道将流量转发到远程服务器。配置本地应用使用 localhost:1080 作为 SOCKS5 代理即可。
1.1.3 其他代理参数
1.1.3.1 ftp_proxy
用于指定 FTP 连接的代理服务器:
# HTTP 协议
export ftp_proxy=http://example.com:ftp_port
# SOCKS5 协议
export ftp_proxy=socks5://example.com:socks5_port
1.1.3.2 all_proxy
默认代理变量,适用于所有类型的网络连接(包括 HTTP、HTTPS 和 FTP)。如果未指定具体协议变量,程序将回退到 all_proxy:
# HTTP
export all_proxy=http://example.com:http_port
# HTTPS
export all_proxy=https://example.com:https_port
# SOCKS4
export all_proxy=socks4://example.com:socks4_port
# SOCKS5(带验证)
export all_proxy=socks5://username:password@example.com:socks5_port
1.1.3.3 no_proxy
指定不走代理的主机名、域名或 IP 列表(逗号分隔)。匹配时将直接连接:
# 示例:不代理本地主机和 example.com 域名
export no_proxy="localhost,127.0.0.1,example.com"
# 示例:不代理 example.com 和以 .internal 结尾的域名
export no_proxy="example.com,*.internal"
1.2 Windows
1.2.1 HTTP/HTTPS 代理
1.2.1.1 系统设置 HTTP/HTTPS 代理
- 打开“设置” > “网络和 Internet” > “代理”。
- 在“手动代理设置”下,启用“使用代理服务器”。
- 输入代理地址和端口(例如,example.com:http_port)。
- 选中“不要将此代理用于本地(Intranet)地址”。
- 点击“保存”。
1.2.1.2 使用第三方工具
您可以使用第三方工具(如 Proxifier 或 Fiddler)进行更高级的代理配置,需自行查找和安装。
注意:Windows 系统代理设置适用于大多数浏览器和系统应用,但某些程序可能需要单独配置。
1.2.2 SOCKS4/SOCKS5 代理
Windows 原生支持 SOCKS 代理(兼容 SOCKS4 和 SOCKS5)。
1.2.2.1 系统设置 SOCKS 代理
- 打开“控制面板” > “网络和 Internet” > “Internet 选项”。
- 切换到“连接”选项卡,点击“局域网 (LAN) 设置”。
- 勾选“为 LAN 使用代理服务器”,然后点击“高级”。
- 在“Socks”字段中,输入代理服务器的 IP 地址和端口(例如,example.com:socks_port)。
- 点击“确定”保存。
1.2.2.2 使用第三方工具
第三方工具(如 Proxifier 或 SocksCap)可提供更细粒度的 SOCKS 代理控制,需自行查找和安装。
1.2.2.3 使用 SSH 通过端口转发创建 SOCKS5 代理(推荐)
与 Linux 相同,使用 SSH 工具(如 PuTTY 或 OpenSSH for Windows)创建 SOCKS5 代理:
# 在 Windows 的命令行(需安装 OpenSSH)或 PuTTY 中运行
ssh -f -N -D 1080 user@host -o ServerAliveInterval=30 -o ServerAliveCountMax=3
此命令在本地监听端口 1080,通过 SSH 隧道转发流量。配置应用使用 localhost:1080 作为 SOCKS5 代理。
注意:Windows 系统中,PuTTY 提供图形界面配置动态端口转发(Dynamic Port Forwarding),适合不熟悉命令行的用户。
02 设置代理服务器
2.1 Linux
2.1.1 使用 Squid 提供 HTTP/HTTPS 代理服务器
Squid 是一款功能强大的开源代理服务器,支持 HTTP/HTTPS。
- 安装
sudo apt install squid
- 编辑配置文件
vim /etc/squid/squid.conf
- 添加基本配置
http_port 3128
http_access allow localhost
http_access deny all
- http_port 3128:监听端口(可修改)。
- http_access allow localhost:允许本地访问。
- http_access deny all:拒绝其他访问。
- 访问控制
acl localnet src 192.168.1.0/24
http_access allow localnet
- acl localnet src 192.168.1.0/24: 定义一个名为 localnet 的 ACL,匹配源 IP 地址在 192.168.1.0/24 网段内的客户端。
- http_access allow localnet: 允许匹配 localnet ACL 的客户端访问代理。
- 重启服务
sudo systemctl restart squid
注意:支持 HTTPS 流量需启用 ssl-bump 和配置 SSL 证书,过程复杂,建议参考官方文档。
2.1.2 Nginx 提供http/https代理服务器
Nginx 主要用于反向代理,但也可配置为正向代理(功能不如 Squid 全面,如缺少高级缓存和认证)。
- 编辑配置文件(例如 /etc/nginx/sites-enabled/proxy.conf):
server {
listen 8888;
resolver 8.8.8.8; # DNS 解析服务器
location / {
proxy_pass $scheme://$host$request_uri;
}
}
- 重启Nginx
sudo systemctl restart nginx
2.1.3 Dante 提供 Socks代理服务器
Dante 是一款高效的 SOCKS 服务器。
- 安装
sudo apt install dante-server
- 编辑 /etc/danted.conf,添加示例配置:
logoutput: syslog
internal: 0.0.0.0 port = 1080
external: eth0 # 替换为您的网络接口
clientmethod: none
socksmethod: none
user.privileged: root
user.unprivileged: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error
}
- 重启
sudo systemctl restart danted
2.1.4 3proxy 提供 Socks代理服务器
3proxy 是轻量级多协议代理服务器。
- 安装
sudo apt install 3proxy
- 编辑 /etc/3proxy/3proxy.cfg,添加:
daemon
log /var/log/3proxy.log D
auth none
socks -p1080
- 启动
sudo 3proxy /etc/3proxy/3proxy.cfg
2.2 Windows
2.2.1 使用 CCProxy 提供 HTTP/HTTPS/FTP/SOCKS 代理服务
CCProxy 是 Windows 专用的易用代理软件,支持多种协议。
官网:CCProxy
下载最新版本并安装(避免使用旧链接)。安装后,通过图形界面配置代理端口和访问规则。
2.2.2 WinGate 提供HTTP/HTTPs/FTP/Socks代理服务
WinGate 是功能丰富的代理服务器。
官网:WinGate
下载最新版本并安装。配置类似 CCProxy,通过界面设置。
2.2.3 一些开源代理软件(不补充)
某些开源的,S开头、C开头和V开头的开源应用,即可以当做服务器也可以当做客户端,此处不过多提及