简介
Linux 系统代理设置教程,涵盖命令行代理、桌面环境代理、以及各种应用的代理配置方法。
系统级代理设置
环境变量方式
临时设置(当前终端)
# HTTP/HTTPS代理
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
# SOCKS5代理
export all_proxy="socks5://127.0.0.1:7891"
# 不代理的地址
export no_proxy="localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12"
永久设置(用户级)
编辑 ~/.bashrc 或 ~/.zshrc:
nano ~/.bashrc
添加以下内容:
# 代理设置
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export all_proxy="socks5://127.0.0.1:7891"
export no_proxy="localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8"
使配置生效:
source ~/.bashrc
系统级设置
编辑 /etc/environment:
sudo nano /etc/environment
添加:
http_proxy="http://127.0.0.1:7890"
https_proxy="http://127.0.0.1:7890"
no_proxy="localhost,127.0.0.1,::1"
代理切换脚本
创建快速切换脚本 ~/proxy.sh:
#!/bin/bash
function proxy_on() {
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export all_proxy="socks5://127.0.0.1:7891"
export no_proxy="localhost,127.0.0.1,::1"
echo -e "代理已开启"
}
function proxy_off() {
unset http_proxy
unset https_proxy
unset all_proxy
echo -e "代理已关闭"
}
function proxy_status() {
if [ -n "$http_proxy" ]; then
echo "代理状态: 开启"
echo "HTTP代理: $http_proxy"
echo "HTTPS代理: $https_proxy"
echo "SOCKS代理: $all_proxy"
else
echo "代理状态: 关闭"
fi
}
case $1 in
on)
proxy_on
;;
off)
proxy_off
;;
status)
proxy_status
;;
*)
echo "用法: source proxy.sh {on|off|status}"
;;
esac
使用方法:
chmod +x ~/proxy.sh
source ~/proxy.sh on # 开启代理
source ~/proxy.sh off # 关闭代理
source ~/proxy.sh status # 查看状态
桌面环境代理
GNOME/Ubuntu
使用GUI设置
- 打开 设置 → 网络
- 点击 网络代理
- 选择 手动 模式
- 配置代理服务器:
- HTTP代理:127.0.0.1, 端口:7890
- HTTPS代理:127.0.0.1, 端口:7890
- SOCKS代理:127.0.0.1, 端口:7891
使用命令行设置
# 设置为手动模式
gsettings set org.gnome.system.proxy mode 'manual'
# HTTP代理
gsettings set org.gnome.system.proxy.http host '127.0.0.1'
gsettings set org.gnome.system.proxy.http port 7890
# HTTPS代理
gsettings set org.gnome.system.proxy.https host '127.0.0.1'
gsettings set org.gnome.system.proxy.https port 7890
# SOCKS代理
gsettings set org.gnome.system.proxy.socks host '127.0.0.1'
gsettings set org.gnome.system.proxy.socks port 7891
# 忽略的主机
gsettings set org.gnome.system.proxy ignore-hosts "['localhost', '127.0.0.0/8', '::1']"
关闭代理:
gsettings set org.gnome.system.proxy mode 'none'
KDE Plasma
- 打开 系统设置 → 网络设置 → 代理
- 选择 手动指定代理服务器
- 配置代理信息:
- HTTP代理:http://127.0.0.1:7890
- HTTPS代理:http://127.0.0.1:7890
- SOCKS代理:socks://127.0.0.1:7891
XFCE
- 打开 设置管理器
- 选择 会话和启动 → 应用程序自启动
- 添加环境变量到启动脚本
应用程序代理配置
APT/APT-GET
创建配置文件:
sudo nano /etc/apt/apt.conf.d/proxy.conf
添加:
Acquire::http::Proxy "http://127.0.0.1:7890";
Acquire::https::Proxy "http://127.0.0.1:7890";
临时使用:
sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:7890" update
Git
# HTTP/HTTPS代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
# SOCKS5代理
git config --global http.proxy socks5://127.0.0.1:7891
git config --global https.proxy socks5://127.0.0.1:7891
# 只对GitHub使用代理
git config --global http.https://github.com.proxy http://127.0.0.1:7890
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
Wget
临时使用:
wget -e use_proxy=yes -e http_proxy=127.0.0.1:7890 URL
永久配置,编辑 ~/.wgetrc:
use_proxy = on
http_proxy = 127.0.0.1:7890
https_proxy = 127.0.0.1:7890
no_proxy = localhost,127.0.0.1
Curl
使用代理:
# HTTP代理
curl -x http://127.0.0.1:7890 URL
# SOCKS5代理
curl -x socks5://127.0.0.1:7891 URL
配置文件 ~/.curlrc:
proxy = 127.0.0.1:7890
Docker
编辑 /etc/systemd/system/docker.service.d/http-proxy.conf:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
添加:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
重启Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
NPM/Yarn
# NPM
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890
# Yarn
yarn config set proxy http://127.0.0.1:7890
yarn config set https-proxy http://127.0.0.1:7890
# 取消代理
npm config delete proxy
npm config delete https-proxy
yarn config delete proxy
yarn config delete https-proxy
Snap
sudo snap set system proxy.http="http://127.0.0.1:7890"
sudo snap set system proxy.https="http://127.0.0.1:7890"
Flatpak
flatpak --user override --env=http_proxy=http://127.0.0.1:7890
flatpak --user override --env=https_proxy=http://127.0.0.1:7890
浏览器代理
Firefox
- 打开 设置 → 常规
- 滚动到 网络设置
- 点击 设置
- 选择 手动代理配置
- 配置代理信息
Chrome/Chromium
使用命令行参数:
google-chrome --proxy-server="http://127.0.0.1:7890"
google-chrome --proxy-server="socks5://127.0.0.1:7891"
使用SwitchyOmega插件
- 安装SwitchyOmega扩展
- 配置代理服务器
- 设置自动切换规则
代理测试
测试HTTP代理
curl -I http://www.google.com
测试SOCKS代理
curl --socks5 127.0.0.1:7891 http://www.google.com
查看当前IP
curl ip.sb
curl ipinfo.io
curl ifconfig.me
测试代理速度
curl -o /dev/null -s -w 'Total: %{time_total}s\n' http://www.google.com
透明代理
使用iptables
# 将流量重定向到代理端口
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 7890
sudo iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 7890
使用redsocks
安装redsocks:
sudo apt install redsocks
配置 /etc/redsocks.conf:
base {
log_debug = off;
log_info = on;
daemon = on;
redirector = iptables;
}
redsocks {
local_ip = 0.0.0.0;
local_port = 12345;
ip = 127.0.0.1;
port = 7891;
type = socks5;
}
常见问题
代理不生效
# 检查环境变量
echo $http_proxy
echo $https_proxy
# 测试代理连接
curl -v -x http://127.0.0.1:7890 http://www.google.com
部分应用无法使用代理
- 确认应用支持系统代理
- 检查应用自身代理设置
- 尝试使用透明代理
sudo命令无法使用代理
# 保留环境变量
sudo -E apt update
# 或在sudoers中添加
sudo visudo
# 添加: Defaults env_keep += "http_proxy https_proxy no_proxy"
注意事项
- 不同应用可能需要单独配置
- 注意代理端口号是否正确
- 某些应用需要重启才能应用代理设置
- 合理设置no_proxy以避免不必要的代理
- 遵守当地法律法规