proxychains & privoxy

关于终端环境 proxychains & privoxy 的配置

Posted by wwyqianqian on 2017-08-21
Words 763 and Reading Time 3 Minutes
Viewed Times

简述背景需求

昨晚要帮朋友在 terminal 里面跑个作业,我虽然打开了 1080,而且开了全局,但发现终端依旧需要配置,因为终端不支持 Socks5 代理,只支持 http 代理。所以得解决一下。

方法一:使用 proxychains

  • macOS homebrew 下载并进入配置页面

    1
    2
    brew install proxychains-ng
    vim /usr/local/etc/proxychains.conf
  • [ProxyList] 下面加入

    1
    socks5 127.0.0.1 1080

    (shadowsocks 本地端口是 1080),不用管那个被注释掉的 socks4 127.0.0.1 9050 (其实是Tor)。

  • 试试是否成功,可惜没有通。

    1
    proxychains4 curl google.com

    询问好多人,最后才发现 “你们 Mac 的内置 curl 怎么还带坑的”,即,自带的 curl 版本都比较老。详见 qingliu 找到的这个 issue https://github.com/rofl0r/proxychains-ng/issues/78

  • 这个问题鳖了我半天,所以赶紧再 brew 下载一个 curl

    1
    brew install curl
  • 之后就是素质三连。果然通了!

    1
    2
    3
    echo 'export PATH="/usr/local/opt/curl/bin:$PATH"' » ~/.zshrc
    source ~/.zshrc
    proxychains4 curl -v https://www.google.com
  • 最后开心地小脚本跑起来

    1
    proxychains4 ~/xxxxxx.sh

    方法二:使用 privoxy

    因为终端不支持 Socks5,只支持 http代理,所以可以使用 privoxy,我们正常理解的 Privoxy“是一款带过滤功能的代理服务器,针对了 HTTP、HTTPS 协议。通过 Privoxy 的过滤功能,用户可以保护隐私、对网页内容进行过滤、管理 cookies,以及拦阻各种广告等。” 在这里,我们用它在应用层进行代理转发,也就是说,要使用它之前,ss 得开启,privoxy 只是一个转发辅助,不能单独用于 fuxk GFW。

  • macOS 使用 homebrew 下载 privoxy

    1
    brew install privoxy
  • 修改配置文件

    1
    vim /usr/local/etc/privoxy/config
  • 在里面加上

    1
    2
    listen-address 0.0.0.0:8118
    forward-socks5 / 127.0.0.1:1080 .

    0.0.0.0 是让其他设备可以访问,也就是说局域网下的配置。如果仅仅要本机的话,那就改为 127.0.0.1,我这里是0.0.0.0; 8118 是HTTP 代理端口号;1080 后不要忘了那个 .

  • 启动 privoxy

    1
    /usr/local/sbin/privoxy /usr/local/etc/privoxy/config
  • 查看监听情况

    1
    netstat -na | grep 8118
  • 加在终端里面,我的是 zsh,所以是 vim .zshrc,感谢狗杰哥提供函数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    proxy-activate() {
    export http_proxy='http://127.0.0.1:8118'
    export https_proxy=$http_proxy
    }
    proxy-deactivate() {
    unset http_proxy
    unset https_proxy
    }
    alias pa='proxy-activate'
    alias pd='proxy-deactivate'
  • 重启一下 terminal,这样,pa 一下终端就通了。pd 一下终端就回归大局域网了。当然,别忘了 pa 之前 ss 要先是开启状态的。
    开心,小脚本跑起来:

    1
    2
    pa
    bash ~/xxxxxx.sh
  • 注意: pa 、pd 是对 某一个 terminal 里的 tab 生效的,(who am i),新开启一个标签页应该再手动 pa。

9.15 补充:长时间不开 pa 导致玄学问题,需重新启动/usr/local/sbin/privoxy /usr/local/etc/privoxy/config 以及后续部分操作。


CC BY-NC-SA 4.0.