476 lines
9.4 KiB
Markdown
476 lines
9.4 KiB
Markdown
# Proxychains 故障排除指南
|
||
|
||
## 常见错误及解决方案
|
||
|
||
### 错误 1: "proxychains: command not found"
|
||
|
||
**症状:**
|
||
```bash
|
||
$ proxychains4 curl https://github.com
|
||
bash: proxychains4: command not found
|
||
```
|
||
|
||
**原因:** proxychains 未安装
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt update
|
||
sudo apt install proxychains4
|
||
|
||
# CentOS/RHEL
|
||
sudo yum install epel-release
|
||
sudo yum install proxychains-ng
|
||
|
||
# Fedora
|
||
sudo dnf install proxychains-ng
|
||
|
||
# macOS
|
||
brew install proxychains-ng
|
||
|
||
# Arch Linux
|
||
sudo pacman -S proxychains-ng
|
||
|
||
# 验证安装
|
||
proxychains4 --version
|
||
```
|
||
|
||
---
|
||
|
||
### 错误 2: "can't read configuration file"
|
||
|
||
**症状:**
|
||
```bash
|
||
$ proxychains4 curl https://github.com
|
||
[proxychains] can't read configuration file /etc/proxychains.conf
|
||
```
|
||
|
||
**原因:** 配置文件不存在或路径错误
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# 方法 1: 创建用户级配置文件
|
||
mkdir -p ~/.proxychains
|
||
cat > ~/.proxychains/proxychains.conf << 'EOF'
|
||
strict_chain
|
||
proxy_dns
|
||
[ProxyList]
|
||
http 127.0.0.1 9910
|
||
EOF
|
||
|
||
# 方法 2: 复制系统配置模板
|
||
sudo cp /usr/share/doc/proxychains*/proxychains.conf /etc/
|
||
# 或
|
||
sudo cp /usr/local/etc/proxychains.conf /etc/
|
||
|
||
# 方法 3: 指定配置文件路径
|
||
proxychains4 -f /path/to/proxychains.conf curl https://github.com
|
||
|
||
# 验证配置文件
|
||
cat ~/.proxychains/proxychains.conf
|
||
```
|
||
|
||
---
|
||
|
||
### 错误 3: "timeout"
|
||
|
||
**症状:**
|
||
```bash
|
||
$ proxychains4 curl https://github.com
|
||
[proxychains] Strict chain ... 127.0.0.1:9910 ... github.com:443 ... timeout
|
||
curl: (28) Connection timed out after 10000 milliseconds
|
||
```
|
||
|
||
**原因:** 代理服务未运行、端口错误或防火墙阻止
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# 1. 检查代理服务是否运行
|
||
netstat -tunlp | grep 9910
|
||
ss -tunlp | grep 9910
|
||
lsof -i :9910
|
||
|
||
# 2. 测试代理服务直接连接
|
||
curl -x http://127.0.0.1:9910 https://www.google.com
|
||
|
||
# 3. 检查防火墙规则
|
||
sudo iptables -L -n | grep 9910
|
||
sudo ufw status
|
||
|
||
# 4. 确认代理配置正确
|
||
cat ~/.proxychains/proxychains.conf | grep -A 2 "\[ProxyList\]"
|
||
|
||
# 5. 增加超时时间(编辑配置文件)
|
||
tcp_connect_time_out 15000
|
||
tcp_read_time_out 30000
|
||
|
||
# 6. 如果代理服务未运行,启动代理服务
|
||
# (根据你的代理软件,例如:)
|
||
# v2ray、clash、shadowsocks 等
|
||
```
|
||
|
||
---
|
||
|
||
### 错误 4: "connection refused"
|
||
|
||
**症状:**
|
||
```bash
|
||
$ proxychains4 curl https://github.com
|
||
[proxychains] Strict chain ... 127.0.0.1:9910 ... connect refused
|
||
curl: (7) Failed to connect to 127.0.0.1 port 9910: Connection refused
|
||
```
|
||
|
||
**原因:** 代理端口未监听或代理服务未启动
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# 1. 确认代理服务状态
|
||
# 检查你的代理软件是否运行(v2ray、clash、shadowsocks 等)
|
||
|
||
# 2. 验证代理端口
|
||
netstat -tunlp | grep 9910
|
||
# 如果没有输出,说明端口未监听
|
||
|
||
# 3. 检查代理软件配置
|
||
# 确认代理软件监听的端口是 9910
|
||
|
||
# 4. 尝试其他可能的代理端口
|
||
# 常见端口:1080 (SOCKS), 7890 (HTTP), 8080 (HTTP)
|
||
netstat -tunlp | grep -E '1080|7890|8080|9910'
|
||
|
||
# 5. 更新 proxychains 配置为正确端口
|
||
nano ~/.proxychains/proxychains.conf
|
||
# 修改 [ProxyList] 部分:
|
||
# http 127.0.0.1 [正确的端口]
|
||
|
||
# 6. 重启代理服务
|
||
# 根据你的代理软件执行相应命令
|
||
```
|
||
|
||
---
|
||
|
||
### 错误 5: "DNS request timed out"
|
||
|
||
**症状:**
|
||
```bash
|
||
$ proxychains4 curl https://github.com
|
||
[proxychains] DNS request timed out
|
||
curl: (6) Could not resolve host: github.com
|
||
```
|
||
|
||
**原因:** DNS 解析失败或 proxy_dns 配置问题
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# 1. 检查配置文件中的 proxy_dns 设置
|
||
cat ~/.proxychains/proxychains.conf | grep proxy_dns
|
||
# 应该有:proxy_dns
|
||
|
||
# 2. 如果没有,添加 proxy_dns
|
||
nano ~/.proxychains/proxychains.conf
|
||
# 添加:
|
||
proxy_dns
|
||
remote_dns_subnet 224
|
||
|
||
# 3. 测试 DNS 解析
|
||
proxychains4 nslookup github.com
|
||
proxychains4 dig github.com
|
||
|
||
# 4. 使用自定义 DNS 服务器
|
||
export PROXY_DNS_SERVER=8.8.8.8
|
||
proxychains4 curl https://github.com
|
||
|
||
# 5. 或者使用 IP 地址直接访问(跳过 DNS)
|
||
proxychains4 curl https://140.82.114.4 # GitHub IP
|
||
|
||
# 6. 检查 /etc/resolv.conf
|
||
cat /etc/resolv.conf
|
||
# 确保有有效的 nameserver
|
||
```
|
||
|
||
---
|
||
|
||
### 错误 6: "Program not supported"
|
||
|
||
**症状:**
|
||
```bash
|
||
$ proxychains4 ./static-binary
|
||
[proxychains] Program not supported
|
||
```
|
||
|
||
**原因:** 程序是静态链接的,proxychains 只支持动态链接程序
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# 1. 检查程序是否静态链接
|
||
ldd ./program
|
||
# 如果输出 "not a dynamic executable",则为静态链接
|
||
|
||
# 2. 对于静态链接程序,需要其他方案:
|
||
# - 使用系统级代理(iptables 转发)
|
||
# - 使用 VPN
|
||
# - 使用容器级代理
|
||
|
||
# 3. Go 程序示例(通常是静态链接)
|
||
# 设置环境变量而不是用 proxychains
|
||
export HTTP_PROXY=http://127.0.0.1:9910
|
||
export HTTPS_PROXY=http://127.0.0.1:9910
|
||
./go-program
|
||
|
||
# 4. 对于可重新编译的程序
|
||
# 编译为动态链接版本
|
||
```
|
||
|
||
---
|
||
|
||
### 错误 7: "strict chain ... all proxy servers are down"
|
||
|
||
**症状:**
|
||
```bash
|
||
$ proxychains4 curl https://github.com
|
||
[proxychains] strict chain ... all proxy servers are down!
|
||
curl: (97) Failure in receiving network data
|
||
```
|
||
|
||
**原因:** strict_chain 模式下所有代理都不可用
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# 1. 测试代理列表中的每个代理
|
||
cat ~/.proxychains/proxychains.conf | grep -A 10 "\[ProxyList\]"
|
||
|
||
# 逐个测试
|
||
curl -x http://127.0.0.1:9910 https://www.google.com
|
||
curl -x http://127.0.0.1:8080 https://www.google.com
|
||
|
||
# 2. 切换到 dynamic_chain 模式(自动跳过死代理)
|
||
nano ~/.proxychains/proxychains.conf
|
||
# 注释掉:#strict_chain
|
||
# 启用:dynamic_chain
|
||
|
||
# 3. 或者移除不可用的代理
|
||
nano ~/.proxychains/proxychains.conf
|
||
# 只保留可用的代理在 [ProxyList] 中
|
||
|
||
# 4. 重新测试
|
||
proxychains4 curl https://ipinfo.io/json
|
||
```
|
||
|
||
---
|
||
|
||
### 错误 8: "Permission denied"
|
||
|
||
**症状:**
|
||
```bash
|
||
$ proxychains4 curl https://github.com
|
||
[proxychains] Permission denied
|
||
```
|
||
|
||
**原因:** 配置文件或 proxychains 可执行文件权限问题
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# 1. 检查配置文件权限
|
||
ls -la ~/.proxychains/proxychains.conf
|
||
|
||
# 2. 修复权限
|
||
chmod 644 ~/.proxychains/proxychains.conf
|
||
|
||
# 3. 检查目录权限
|
||
ls -la ~/.proxychains/
|
||
|
||
# 4. 修复目录权限
|
||
chmod 755 ~/.proxychains/
|
||
|
||
# 5. 检查 proxychains 可执行文件权限
|
||
ls -la $(which proxychains4)
|
||
|
||
# 6. 如果是系统级配置文件
|
||
sudo chmod 644 /etc/proxychains.conf
|
||
```
|
||
|
||
---
|
||
|
||
## 高级故障排除
|
||
|
||
### 调试模式
|
||
|
||
```bash
|
||
# 启用详细输出
|
||
# 编辑配置文件,注释掉 quiet_mode
|
||
nano ~/.proxychains/proxychains.conf
|
||
# 注释:#quiet_mode
|
||
|
||
# 使用 strace 跟踪系统调用
|
||
strace -e trace=network proxychains4 curl https://github.com
|
||
|
||
# 查看环境变量
|
||
env | grep -i proxy
|
||
```
|
||
|
||
### 日志分析
|
||
|
||
```bash
|
||
# proxychains 输出到文件
|
||
proxychains4 curl https://github.com 2>&1 | tee proxychains.log
|
||
|
||
# 分析连接过程
|
||
cat proxychains.log | grep -E 'chain|connect|timeout'
|
||
```
|
||
|
||
### 网络连通性测试
|
||
|
||
```bash
|
||
# 测试本地连接
|
||
ping 127.0.0.1
|
||
telnet 127.0.0.1 9910
|
||
|
||
# 测试外部连接(不通过代理)
|
||
curl https://ipinfo.io/json
|
||
|
||
# 测试外部连接(通过代理)
|
||
proxychains4 curl https://ipinfo.io/json
|
||
|
||
# 比较 IP 地址
|
||
# 不通过代理的 IP 应该是本机 IP
|
||
# 通过代理的 IP 应该是代理服务器 IP
|
||
```
|
||
|
||
### 配置验证
|
||
|
||
```bash
|
||
# 验证配置文件语法
|
||
proxychains4 -f ~/.proxychains/proxychains.conf true
|
||
|
||
# 测试不同的代理类型
|
||
# HTTP
|
||
proxychains4 -f - curl https://github.com << 'EOF'
|
||
strict_chain
|
||
[ProxyList]
|
||
http 127.0.0.1 9910
|
||
EOF
|
||
|
||
# SOCKS5
|
||
proxychains4 -f - curl https://github.com << 'EOF'
|
||
strict_chain
|
||
[ProxyList]
|
||
socks5 127.0.0.1 1080
|
||
EOF
|
||
```
|
||
|
||
---
|
||
|
||
## 性能问题
|
||
|
||
### 连接缓慢
|
||
|
||
**症状:** 命令执行很慢
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# 1. 减少超时时间
|
||
nano ~/.proxychains/proxychains.conf
|
||
tcp_connect_time_out 5000
|
||
tcp_read_time_out 10000
|
||
|
||
# 2. 启用 quiet_mode 减少输出
|
||
quiet_mode
|
||
|
||
# 3. 使用更快的代理服务器
|
||
|
||
# 4. 测试代理延迟
|
||
time proxychains4 curl -I https://github.com
|
||
|
||
# 5. 使用 dynamic_chain 跳过慢速代理
|
||
dynamic_chain
|
||
```
|
||
|
||
### 频繁断开
|
||
|
||
**症状:** 连接经常中断
|
||
|
||
**解决方案:**
|
||
|
||
```bash
|
||
# 1. 增加超时时间
|
||
tcp_read_time_out 30000
|
||
|
||
# 2. 检查代理服务器稳定性
|
||
# 持续 ping 测试
|
||
ping -c 100 127.0.0.1
|
||
|
||
# 3. 更换代理服务器
|
||
|
||
# 4. 检查网络稳定性
|
||
mtr 8.8.8.8
|
||
```
|
||
|
||
---
|
||
|
||
## 检查清单
|
||
|
||
使用此清单快速诊断问题:
|
||
|
||
```bash
|
||
# ✅ 检查 1: proxychains 已安装
|
||
which proxychains4
|
||
|
||
# ✅ 检查 2: 配置文件存在
|
||
ls -la ~/.proxychains/proxychains.conf
|
||
|
||
# ✅ 检查 3: 配置文件格式正确
|
||
cat ~/.proxychains/proxychains.conf
|
||
|
||
# ✅ 检查 4: 代理服务运行中
|
||
netstat -tunlp | grep 9910
|
||
|
||
# ✅ 检查 5: 代理可直接访问
|
||
curl -x http://127.0.0.1:9910 https://www.google.com
|
||
|
||
# ✅ 检查 6: DNS 解析正常
|
||
proxychains4 nslookup github.com
|
||
|
||
# ✅ 检查 7: proxychains 连接正常
|
||
proxychains4 curl https://ipinfo.io/json
|
||
|
||
# ✅ 检查 8: IP 地址已变更
|
||
# 对比直接访问和代理访问的 IP 应该不同
|
||
curl https://ipinfo.io/json
|
||
proxychains4 curl https://ipinfo.io/json
|
||
```
|
||
|
||
---
|
||
|
||
## 获取帮助
|
||
|
||
如果以上方法都无法解决问题:
|
||
|
||
```bash
|
||
# 查看帮助文档
|
||
man proxychains4
|
||
proxychains4 --help
|
||
|
||
# 查看系统日志
|
||
sudo journalctl -xe | grep proxy
|
||
dmesg | grep -i proxy
|
||
|
||
# 检查 proxychains 版本
|
||
proxychains4 --version
|
||
|
||
# GitHub Issues
|
||
# https://github.com/haad/proxychains/issues
|
||
```
|
||
|
||
---
|
||
|
||
**提示:** 大多数问题都是由于代理服务未运行或端口配置错误造成的。首先确保代理服务正常运行。
|