Skip to content
赞赏-微信扫码

ssh 中已经介绍了 -D 命令. 得到了一个支持 socks5 协议的端口. 这里要基于它得到一个支持 http 协议的端口.

确定需要 http 协议的?

也许 sock5 协议的就能用呢,下面两个命令都试一下:

sh
HTTPS_PROXY=socks://127.0.0.1:7890 curl -i https://youtube.com
HTTPS_PROXY=http://127.0.0.1:17890 curl -i https://youtube.com

要明白,之所以用 HTTPS_PROXY/HTTP_PROXY,是因为 youtube.com 是 https/http 开头的。

如果你见过还有一个环境变量,叫 ALL_PROXY 就容易理解了。

HTTPS_PROXY=xxx 中,等号后面的 xxx 地址是 http 还是 socks 或是 其他开头,要看 curl 这个层级的应用支不支持。可以肯定的是 http 的支持度是最广的。

安装

sh
apt install privoxy

配置

sh
vi /etc/privoxy/config

搜索 listensocks5 关键字

listen-address  10.168.1.101:17890

forward-socks5   /               127.0.0.1:7890  .

白名单

紧跟着 forward-socks5 下面那段

        forward         192.168.*.*/     .
        forward         10.*.*.*/        .
        forward         127.*.*.*/       .

        forward         localhost/       .
        forward         .feling.net/     .
        forward         .apihub.net/     .
        forward         .cn/             .

启动

sh
service privoxy restart

各种软件怎么用它

apt

sh
apt -o Acquire::http::proxy="http://127.0.0.1:17890/" update

docker pull

要从 systemd 配置。 https://docs.docker.com/config/daemon/proxy/#systemd-unit-file

sh
mkdir -p /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/http-proxy.conf
sh
[Service]
Environment="HTTP_PROXY=http://localhost:17890"
Environment="HTTPS_PROXY=http://localhost:17890"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
sh
systemctl daemon-reload
systemctl restart docker
systemctl show --property=Environment docker

群晖 docker

sh
sudo -i

mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d
vi /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://10.168.1.101:17890"
Environment="HTTPS_PROXY=http://10.168.1.101:17890"
Environment="NO_PROXY=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,hb.apihub.net"

systemctl daemon-reload
systemctl restart pkg-ContainerManager-dockerd.service

systemctl show --property=Environment pkg-ContainerManager-dockerd.service


cat /var/packages/ContainerManager/etc/dockerd.json

{
  "data-root": "/var/packages/ContainerManager/var/docker",
  "insecure-registries": [
    "hb.apihub.net"
  ],
  "log-driver": "db",
  "registry-mirrors": [],
  "storage-driver": "btrfs"
}

k3s

https://docs.k3s.io/zh/advanced

sh
vi /etc/systemd/system/k3s.service.env
sh
HTTP_PROXY=http://10.168.1.101:17890
HTTPS_PROXY=http://10.168.1.101:17890
NO_PROXY=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.apihub.net

安卓手机

配置完后, 要 关闭再打开 wifi.

这些年一直以为是 wifi 的代理功能被国内阉割了...后来无意中在哪个视频里看到, 这是安卓的 bug.

环境变量

终端临时

sh
export HTTPS_PROXY=http://10.168.1.101:17890

单命令临时

sh
HTTPS_PROXY=http://10.168.1.101:17890 curl https://youtube.com