拷问了deepseek、Gemini、claude、grok之后,终于得到一个比较容易使用的方案

如果你需要系统全局走SOCKS5代理,有几种方法可以实现。以下是最推荐的方法:

方法一:使用透明代理 (推荐)

这种方法使用iptables将所有TCP流量重定向到SOCKS5代理,需要使用redsocks工具:

  1. 安装必要的软件包:
sudo apt update
sudo apt install redsocks iptables-persistent
  1. 配置redsocks:
sudo nano /etc/redsocks.conf

修改为以下内容:

base {
    log_debug = off;
    log_info = on;
    log = "stderr";
    daemon = on;
    redirector = iptables;
}

redsocks {
    local_ip = 127.0.0.1;
    local_port = 12345;
    
    ip = your_proxy_ip;
    port = your_proxy_port;
    
    type = socks5;
    login = "your_username";
    password = "your_password";
}
  1. 启动redsocks服务:
sudo systemctl restart redsocks
sudo systemctl enable redsocks
  1. 配置iptables规则,将TCP流量重定向到redsocks:

创建一个脚本文件:

sudo nano /usr/local/bin/proxy-up.sh

添加以下内容:

#!/bin/bash

# 创建新的链
iptables -t nat -N REDSOCKS

# 忽略代理服务器的IP地址,防止循环
iptables -t nat -A REDSOCKS -d your_proxy_ip -j RETURN

# 忽略局域网和保留地址
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

# 重定向所有TCP流量到redsocks的本地端口
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

# 将OUTPUT链上的本地生成流量转发到REDSOCKS链
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS

echo "Proxy enabled"

创建一个关闭代理的脚本:

sudo nano /usr/local/bin/proxy-down.sh

添加以下内容:

#!/bin/bash

# 清除规则
iptables -t nat -D OUTPUT -p tcp -j REDSOCKS
iptables -t nat -F REDSOCKS
iptables -t nat -X REDSOCKS

echo "Proxy disabled"
  1. 设置脚本权限:
sudo chmod +x /usr/local/bin/proxy-up.sh
sudo chmod +x /usr/local/bin/proxy-down.sh
  1. 启用代理:
sudo /usr/local/bin/proxy-up.sh
  1. 如果要保存iptables规则,使其重启后依然生效:
sudo netfilter-persistent save

方法二:使用系统级环境变量

某些程序会尊重环境变量中设置的代理,可以在系统级别添加:

  1. 编辑/etc/environment
sudo nano /etc/environment
  1. 添加以下内容:
http_proxy=socks5://username:password@your_proxy_ip:your_proxy_port
https_proxy=socks5://username:password@your_proxy_ip:your_proxy_port
ftp_proxy=socks5://username:password@your_proxy_ip:your_proxy_port
no_proxy=localhost,127.0.0.1,::1
HTTP_PROXY=socks5://username:password@your_proxy_ip:your_proxy_port
HTTPS_PROXY=socks5://username:password@your_proxy_ip:your_proxy_port
FTP_PROXY=socks5://username:password@your_proxy_ip:your_proxy_port
NO_PROXY=localhost,127.0.0.1,::1
ALL_PROXY=socks5://username:password@your_proxy_ip:your_proxy_port
  1. 重启系统或者加载新环境:
source /etc/environment

注意:这种方法只对遵循代理环境变量的应用程序有效,不是所有应用程序都会遵循这些设置。

方法三:使用全局PAC或桌面环境设置

如果你使用的是GNOME或其他桌面环境:

  1. 在系统设置中找到"网络"
  2. 选择"网络代理"
  3. 选择"手动"并配置SOCKS代理
  4. 输入你的代理IP和端口
  5. 应用设置

这将影响使用系统代理设置的应用程序。

结论

上述方法中,第一种(透明代理)是最彻底的系统全局代理解决方案,几乎所有TCP流量都会被重定向通过SOCKS5代理。其它方法可能只对部分应用程序有效。

记得将示例中的your_proxy_ipyour_proxy_portyour_usernameyour_password替换为你自己的SOCKS5代理信息。