Linux 服务器中使用 Proxy 的几种方案
/ 3 min read
Updated:Table of Contents
在服务器上用代理,要分两步想:代理从哪里来(服务端怎么跑起来),以及程序怎么用上它(流量怎么接进去)。
代理从哪里来
ShellCrash
配置最省事的方案,但依赖系统服务,需要足够的权限。例如在容器里通常无法使用系统服务,这条路就走不通。
直接运行内核
选 sing-box、Xray 或 Clash.Meta 中的一个,写好 JSON / YAML 配置文件,直接启动即可。sing-box 配置 TUN 非常方便,但容器环境不一定支持 TUN。
前提有两个:
- 服务器本身能连接互联网;
- 服务器有一定的国际互联能力(如果只做国内转发,可以忽略这一条)。
SSH 反向端口转发
把本地的代理端口映射到远端服务器:
# 远端的 127.0.0.1:7890 会转发到本地的 7890 端口ssh -R 7890:127.0.0.1:7890 user@server非常简单通用,服务器不需要能出网。但一般不推荐长期使用:它要求本地和远端之间互联质量好,而且 SSH 断开代理就没了。
程序怎么用上它
TUN 方式
如果有 TUN 权限,直接开启 TUN 模式,所有 TCP / UDP 流量都会被接管,程序无需任何额外配置。
环境变量方式
大多数命令行工具会读取代理环境变量:
# 开启export http_proxy=http://ip:portexport https_proxy=http://ip:port
# 关闭unset http_proxy https_proxy在 Python 程序中:
import os
os.environ["http_proxy"] = "http://ip:port"os.environ["https_proxy"] = "http://ip:port"注意,这种方式只对“愿意读环境变量”的程序有效,不支持的程序需要用 TUN 或下面的 proxychains。
proxychains
proxychains4 通过 hook 网络调用,让不支持代理的程序也走代理:
proxychains4 curl https://example.com参考
- shell-proxy:终端代理设置的整理