假设已存在 socks5/http 代理服务器,需要在 Linux 使用代理服务器的流量:

  • 某 ui入站列表 - 添加入站,协议选择 “socks”,可以打开密码认证,则对外提供代理服务地址为 socks5://IP:PORT
  • 本地安装有某 N 也可以开启本地 socks 监听端口,并且打开“允许来自局域网的连接”,则可对局域网提供代理服务地址为 socks5://192.168.0.104:10808http://192.168.0.104:10809

临时为部分软件启用代理(当前 shell 下)

适合软件支持读取环境变量中的代理设置,常用软件大多数支持自动读取代理,如 curl、wget 等工具。如果不确定或不支持请参考后续的强制代理部分。

# 首选
export all_proxy=socks5://192.168.0.104:10808
# 不推荐,可能会遇到问题
export http_proxy=http://192.168.0.104:10809 && export https_proxy=http://192.168.0.104:10809 && export no_proxy="localhost, 127.0.0.1, ::1"
# 检查设置
env | grep -i proxy
# 使用代理
curl -4 ip.sb
# 取消终端代理
unset all_proxy
unset http_proxy https_proxy no_proxy

如果希望以上设置永久生效,可以通过使用 vi ~/.bashrc 命令编辑 bash 配置文件,选择一种方式加到文件最后一行。

  • /etc/profile 文件
  • ~/.bashrc
  • ~/.zshrc
  • /etc/profile.d/ 文件夹下新建一个文件 xxx.sh
# 例如
sudo tee /etc/profile.d/custom_proxy.sh <<'END'
export proxy="http://192.168.0.104:10809"
# export proxy="socks5://192.168.0.104:10808"
export http_proxy=$proxy
export https_proxy=$proxy
export ftp_proxy=$proxy
export no_proxy="localhost, 127.0.0.1, ::1"
END

为不支持的软件强制启用代理

对于不支持设置代理的软件,可以通过使用 proxychains4 的方式为它们强制启用代理,但注意这种方式只支持 TCP 连接

在你需要代理的命令前加入 proxychains4 使用, 例如:

# 1. 安装
apt install proxychains4
# 2. 配置
# 编辑默认配置文件 /etc/proxychains4.conf
# 2.1 注释掉文件中如下一行
# #remote_dns_subnet 224
# 2.2 在文件末尾添加代理配置。支持 HTTP, SOCKS4a, SOCKS5 协议的代理。
# 添加格式如下
# socks5/http/https ip port username password
# 2.3 最终配置文件内容:
# root@debian11-develop:~# cat /etc/proxychains4.conf
# strict_chain
# proxy_dns 
# #remote_dns_subnet 224
# tcp_read_time_out 15000
# tcp_connect_time_out 8000
# [ProxyList]
# socks5  192.168.0.104 10808
# 3. 使用
# proxychains curl -o /dev/null -s -w %{http_code} www.github.com
# 可以看到,代理链也一并输出了。如果不想输出代理链,使用 -q 选项。
# 4. 卸载
apt remove --purge proxychains4
# 使用
proxychains4 curl -4 ip.sb
proxychains4 python example.py

curl 使用代理

curl -4 --socks5 192.168.0.104:10808 ip.sb

apt 使用本地代理

apt -o Acquire::socks::proxy="socks5://192.168.0.104:10808/" update

composer 使用代理

# 第一种,切换国内镜像源
# 查看源
composer config -g -l | grep repositories.packagist.org.url
# 所有项目都会使用该镜像地址
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer config -g --unset repos.packagist # 取消配置
# 仅当前工程可使用该镜像地址
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
composer config --unset repos.packagist    # 取消配置

# 第二种,使用代理
# 见 为不支持的软件强制启用代理,即 export 环境变量

ssh 使用代理(??未验证)

# 安装 nc
apt-get install netcat
# use 'nc'(nmap-netcat) with http protocol
ssh -o ProxyCommand='nc --proxy 192.168.0.104:10809 %h %p' USER@FINAL_DEST:PORT
# use 'nc'(openbsd-netcat) with http protocol
ssh -o ProxyCommand='nc -X connect -x 192.168.0.104:10809 %h %p' USER@FINAL_DEST:PORT

# use 'nc'(openbsd-netcat) with socks5 protocol
ssh -o ProxyCommand='nc -X 5 -x 192.168.0.104:10809 %h %p' [用户名]@[远程服务器]:[端口]
# ssh -o ProxyCommand='nc -X 5 -x [代理服务器]:[代理端口] %h %p' [用户名]@[远程服务器]:[端口]
# 参数解释如下:
#   -o ProxyCommand: 指定连接到远程服务器之前,如何通过代理服务器建立连接
#   nc: 是 netcat 工具,用于建立网络连接
#   -X 5: 指定 netcat 使用 SOCKS5 代理协议
#   -x: 后面跟代理服务器的地址和端口
#   %h: 代理命令中的占位符,表示远程主机的地址
#   %p: 代理命令中的占位符,表示远程主机的端口
#   [用户名]: 你要登录的远程服务器的用户名
#   [远程服务器]:[端口]: 远程服务器的地址和端口
# 
# 如果代理服务器使用的是 HTTP 代理,可能需要使用不同的工具或配置来建立代理链接

git 使用代理

# 1. 查看 git 配置是否有 proxy
git config --global -l
git config --global --get http.proxy
git config --global --get https.proxy
# 2. 临时使用 HTTP 代理,cmd 环境也一样
git clone -c http.proxy="http://localhost:10809" https://github.com/FranzKafkaYu/x-ui.git
# 3. 全局使用 HTTP 代理(??未全验证)
# 3.1 set git http(s) proxy
git config --global http.sslverify false
git config --global http.proxy http://192.168.0.104:10809
git config --global https.proxy http://192.168.0.104:10809
# 3.2 only for 'github.com'
git config --global http.https://github.com.proxy http://192.168.0.104:10809
# 3.3 unset
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset http.https://github.com.proxy
# 3.4 如果只想在当前项目配置/取消代理
# 参考下面命令,cd 到当前项目目录下
# 配置代理
git config --local http.proxy
git config --local https.proxy
# 取消代理
git config --local --unset http.proxy
git config --local --unset https.proxy
# 4. SSH 协议使用代理(??未验证)
# set git ssh proxy
git config --global core.sshCommand "ssh -o ProxyCommand='nc -X connect -x 192.168.0.104:10809 %h %p'"
# 5.取消 SSH 协议使用代理
git config --global --unset core.sshCommand

docker 使用代理

# Configure Docker to use a proxy server,官方文档,如何配置运行 容器 的环境,与如何拉取镜像无关,说明见 https://www.cnblogs.com/Chary/p/18096678
# https://docs.docker.com/network/proxy/
# docker build --network=host --build-arg HTTP_PROXY="http://192.168.0.104:10809" --build-arg HTTPS_PROXY="http://192.168.0.104:10809" -f ./build/php-fpm/Dockerfile . -t php_fpm:v838

# Docker 使用代理
# 1. 编辑或添加文件 ~/.docker/config.json
~/.docker/config.json
{
 "proxies": {
   "default": {
     "httpProxy": "http://192.168.0.104:10809",
     "httpsProxy": "http://192.168.0.104:10809",
     "noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
   }
 }
}

# 2. 编辑或添加文件 /etc/docker/daemon.json
/etc/docker/daemon.json
{
    "proxies": {        
        "http-proxy": "http://192.168.0.104:10809",
        "https-proxy": "http://192.168.0.104:10809",
        "no-proxy": "localhost,127.0.0.0/8"
    }
}

# 3. 重启服务(debian11)
docker -v
service docker restart
service docker status

# 4. 验证输出有配置的地址
docker info | grep Proxy
# root@debian11-develop:~# docker info | grep Proxy
#  HTTP Proxy: http://192.168.0.104:10809
#  HTTPS Proxy: http://192.168.0.104:10809
#  No Proxy: localhost,127.0.0.0/8

# 4. 使用代理构建镜像
docker build --network=host -f ./build/php-fpm/Dockerfile . -t php_fpm:v838