skip to content
Liu Yang's Blog

Linux 服务器中使用 Proxy 的几种方案

/ 3 min read

Updated:
Table of Contents

在服务器上用代理,要分两步想:代理从哪里来(服务端怎么跑起来),以及程序怎么用上它(流量怎么接进去)。

代理从哪里来

ShellCrash

配置最省事的方案,但依赖系统服务,需要足够的权限。例如在容器里通常无法使用系统服务,这条路就走不通。

直接运行内核

选 sing-box、Xray 或 Clash.Meta 中的一个,写好 JSON / YAML 配置文件,直接启动即可。sing-box 配置 TUN 非常方便,但容器环境不一定支持 TUN。

前提有两个:

  1. 服务器本身能连接互联网;
  2. 服务器有一定的国际互联能力(如果只做国内转发,可以忽略这一条)。

SSH 反向端口转发

把本地的代理端口映射到远端服务器:

Terminal window
# 远端的 127.0.0.1:7890 会转发到本地的 7890 端口
ssh -R 7890:127.0.0.1:7890 user@server

非常简单通用,服务器不需要能出网。但一般不推荐长期使用:它要求本地和远端之间互联质量好,而且 SSH 断开代理就没了。

程序怎么用上它

TUN 方式

如果有 TUN 权限,直接开启 TUN 模式,所有 TCP / UDP 流量都会被接管,程序无需任何额外配置。

环境变量方式

大多数命令行工具会读取代理环境变量:

Terminal window
# 开启
export http_proxy=http://ip:port
export 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 网络调用,让不支持代理的程序也走代理:

Terminal window
proxychains4 curl https://example.com

参考