「Polipo」- 将 SOCKS 转换为 HTTP(S) 代理

  CREATED BY JENKINSBOT

问题描述

现在我们有 SOCKS 代理服务器,但是由于部分软件功能限制,我们需要使用 HTTP(S) 代理服务。

该笔记将记录:将 SOCKS 代理服务 转化为 HTTP(S) 代理服务 的方法。

解决方案

使用 Polipo 软件。

服务搭建

系统版本:Debian GNU/Linux 10

第一步、安装服务

apt-get install polipo

第二步、修改配置

cp /etc/polipo/config /etc/polipo/config.backup

cat > /etc/polipo/config <<EOF
# 日志等级
logSyslog = false
logFile = /var/log/polipo/polipo.log
logLevel=255

# 上游代理服务
socksParentProxy = "127.0.0.1:1080"
socksProxyType = socks5

# 监听服务地址及端口
proxyAddress = "::0"        # both IPv4 and IPv6
# proxyAddress = "0.0.0.0" # or IPv4 only
proxyPort = 8123
EOF

有关日志等级设置,可以参考 http proxy – Make polipo to log all urls – Unix & Linux Stack Exchange 问题

第三步、启动服务

systemctl start polipo
systemctl enable polipo

第四步、代理验证

# 此命令将返回代理 IP 地址
curl --proxy http://127.0.0.1:8123 http://bot.whatismyipaddress.com/

# 测试 Google 访问
curl --proxy http://127.0.0.1:8123 https://www.google.com

相关链接

The Polipo Manual

常见问题汇总

Couldn’t create disk file … Permission denied

问题描述:
在启动 Polipo 服务之后,使用期间产生如下错误:

Couldn't create disk file /var/cache/polipo/repo.zabbix.com/hI-bv4EBKjxz41aA4cXXMQ==: Permission denied

问题原因:
通常不会遇到这个问题。在我们的场景中,当初为了测试,直接使用 ROOT 用户启动 Polipo 并测试,测试过程中已经创建 repo.zabbix.com 目录,但是属于 ROOT 用户。随后我们使用 systemd 管理服务,但是使用 proxy 用户,导致无法向 repo.zabbix.com/ 中写入。

解决方法:

Couldn't create disk file /var/cache/polipo/repo.zabbix.com/hI-bv4EBKjxz41aA4cXXMQ==: Permission denied

参考文献

Convert Socks Proxy To Http Proxy: Using Polipo
Make polipo to log all urls