树莓派使用 V2Ray 魔法上网

编程 Nov 24, 2020

本文将向你介绍如何使用树莓派配置和安装 V2Rayprivoxy ,让树莓派顺畅访问国际互联网,并为局域网内的其他的设备提供 socks5代理http代理服务。

先来给大家解释一下基本原理:

image-20200410145120973

啊不好意思放错了,应该是这张:

File:VPN overview-en.svg

我们这篇文章要实现的目标是:

graph LR
A(你的设备/树莓派) --> B(树莓派 Privoxy)
B --> |普通域名| E(目标网站)
B --> |魔法域名| C(树莓派 V2Ray 客户端) --> D(V2Ray服务端) --> E(目标网站)
B --> |广告域名| F(拦截)

需要准备的材料

  • 树莓派(以 3B+ 为例)
  • 电源(5V,不小于 2A)
  • 8G 以上的高速 TF 卡
  • 电脑(以 Windows 为例)
  • 网线
  • 互联网连接(推荐使用 真 · 互联网)

安装和配置 V2Ray

什么是 V2Ray?

V2Ray 是 Project V 下的一个工具。Project V 是一个包含一系列构建特定网络环境工具的项目,而 V2Ray 属于最核心的一个。 官方中介绍 Project V 提供了单一的内核和多种界面操作方式。内核(V2Ray)用于实际的网络交互、路由等针对网络数据的处理,而外围的用户界面程序提供了方便直接的操作流程。不过从时间上来说,先有 V2Ray 才有 Project V。 如果还是不理解,那么简单地说,V2Ray 是一个与 Shadowsocks 类似的代理软件,可以用来科学上网(施展魔法)学习国外先进科学技术。

安装 V2Ray

安装 V2Ray。可以使用 V2Ray 提供的 go.sh 脚本安装,由于 GFW 会恶化对 GitHub 的访问,直接运行脚本几乎无法安装,建议先从 v2ray-core/releases 将安装包v2ray-linux-arm.zip下载到树莓派, 使用--local参数从本地安装

wget -O v2ray_install.sh  https://install.direct/go.sh
chmod +x v2ray_install.sh
sudo ./v2ray_install.sh --local v2ray-linux-arm.zip

配置 V2Ray

通过 v2rayN 可以导出节点配置为客户端配置,以下为 WS+TLS 的配置文件示例(请勿直接使用以下配置):

{
  "policy": {
    "system": {
      "statsInboundUplink": true,
      "statsInboundDownlink": true
    }
  },
  "log": {
    "access": "",
    "error": "",
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "proxy",
      "port": 1080,
      "listen": "0.0.0.0",
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      },
      "settings": {
        "auth": "noauth",
        "udp": true,
        "ip": null,
        "address": null,
        "clients": null
      },
      "streamSettings": null
    },
    {
      "tag": "api",
      "port": 8224,
      "listen": "127.0.0.1",
      "protocol": "dokodemo-door",
      "sniffing": null,
      "settings": {
        "auth": null,
        "udp": false,
        "ip": null,
        "address": "127.0.0.1",
        "clients": null
      },
      "streamSettings": null
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "192.19.108.30",
            "port": 443,
            "users": [
              {
                "id": "96603728-5243-4b0a-94c1-0b4c22a69eeb",
                "alterId": 2,
                "email": "[email protected]",
                "security": "auto"
              }
            ]
          }
        ],
        "servers": null,
        "response": null
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "tlsSettings": {
          "allowInsecure": true,
          "serverName": "outsite.xyz"
        },
        "tcpSettings": null,
        "kcpSettings": null,
        "wsSettings": {
          "connectionReuse": true,
          "path": "/os",
          "headers": {
            "Host": "outsite.xyz"
          }
        },
        "httpSettings": null,
        "quicSettings": null
      },
      "mux": {
        "enabled": true,
        "concurrency": 8
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {
        "vnext": null,
        "servers": null,
        "response": null
      },
      "streamSettings": null,
      "mux": null
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {
        "vnext": null,
        "servers": null,
        "response": {
          "type": "http"
        }
      },
      "streamSettings": null,
      "mux": null
    }
  ],
  "stats": {},
  "api": {
    "tag": "api",
    "services": [
      "StatsService"
    ]
  },
  "dns": null,
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "port": null,
        "inboundTag": [
          "api"
        ],
        "outboundTag": "api",
        "ip": null,
        "domain": null
      }
    ]
  }
}

将配置文件上传到树莓派,使用下面的命令替换默认配置:

sudo mv config.json /etc/v2ray/

检查配置文件并添加到系统启动项

/usr/bin/v2ray/v2ray -test -config /etc/v2ray/config.json # 查看配置文件是否出错

sudo systemctl start v2ray # 启动v2ray服务

sudo systemctl status v2ray # 查看v2ray运行状态

sudo systemctl enable v2ray # 将v2ray加入开机自启动

执行 curl -so /dev/null -w "%{http_code}" google.com -x socks5://127.0.0.1:1080 确认 V2Ray 已经可以使用魔法 (命令中 Socks5 指 inbound 协议为 socks,1080 指该 inbound 端口是 1080)。如果执行这个命令出现了 301 或 200 这类数字的话代表可以使用魔法,如果长时间没反应或者是 000 的话说明不可以使用魔法。[^1]

Privoxy 使用指南

Privoxy 是一个免费的开源非缓存 Web 代理,可以过滤和处理传入的数据。

使用 Privoxy,我们可以让树莓派变成你的局域网代理服务器。

Privoxy好处是,可以在网页数据到达浏览器之前对其进行过滤和操作。

这也意味着可以使用 Privoxy 充当浏览器的广告拦截器。

简介精简版

Privoxy 是个很朴素但很强大的工具,基本功能和 switchyomega 类似:根据规则来处理请求流向 —— 但不仅限于影响浏览器,我理解它介于 iptables 和 Switchyomega 之间。可以把接收到的请求,根据规则转发到下一次代理:比如 1080 常用来使用魔法,那么 Google 就走 1080,百度不需要使用魔法就直连。还可以根据规则屏蔽广告和垃圾站点。

简介故事版

电脑联网了,就像在大山里的村庄有了一条通往市里的路,我们发起的所有请求,都会通过这条路走出去。有一天你发现这条路走下去,到另一个方向的城市会南辕北辙走不通,但是这条路附近呢又有另一个村子,到那边就能通了,所以你在路上开了一条小路去那个村子借道:第一个城市就是我们平常的请求比如百度淘宝知乎,第二条路走下去可能是谷歌脸书推特油管,也有可能是公司的内网环境,另一个村子就是 VPN,它或许是墙外的节点,或许是公司里那个看门的。

这些路怎么走通往哪里,你知道了,但其他村民可能不知道,他们走到岔路口不知道它是通往哪里的,所以你就立了个路牌了做指向。Privoxy 是这个路牌,Switchyomega 也是这个路牌,proxifier 也是路牌之一 (mac 和 Windows 可用,有 GUI 和请求的详细日志,要花钱的)。这样理解的话,所有类型的 VPN 该怎么用就都好配置了。

不建议盲目开全局,虽然它可能经常是管用的,但实际上所有流量都走了 "另一个村子" 再绕回来,天寒地冻路远不说,而且像网易这样的 "店面",绕一下它可能就不接待你了 (他只认你哪里来的)。

在 树莓派上安装 Privoxy

各个 Linux 发行版源里都有,直接包管理器装即可。

sudo apt-get -y install privoxy # 安装privoxy

mac 可以 brew install privoxy ,然后用 brew sevices 子命令管理。( 官方也有提供安装包 )

Windows, 官方同样给了包和安装文档,但是等有空再写吧(其实基本就不想弄了…

配置

在开始本节之前,强烈建议确保树莓派有静态的局域网 IP 地址。

可以通过以下命令来查看树莓派的 IP

hostname-I

debian 装 privoxy ,它的配置文件里注释写的跟论文一样长,最开始的时候就被吓退了。

~ λ k -h /etc/privoxy
 config                      # 主配置文件
 default.action
 default.filter
 gfwlist.action              # 自己生成的,用了 gfwlist 清单
 match-all.action 
 regression-tests.action 
 templates 
 trust 
 user.action
 user.filter

config 文件处理 :

sudo cp /etc/privoxy/config /etc/privoxy/config.bak    # 做个备份
sudo nano /etc/privoxy/config  # 编辑配置文件

# 修改监听范围和端口(任选一句)
listen-address 127.0.0.1:8118  # 监听本机的8118端口(仅树莓派魔法)
listen-address 0.0.0.0:8118    # 监听本机+局域网的8118端口(树莓派+局域网魔法)

# 添加代理规则(任选一句)
actionsfile gfwlist.action     # 让 privoxy 加载 gfwlist.action 实现智能分流
forward-socks5t / 127.0.0.1:1080 .  # 全局代理无分流,注意后面还有一个点

完成后,按 CTRL+ X ,然后按 Y ,最后按 ENTER 保存文件。

生成 gfwlist.action 文件:

这个项目可以很方便的帮忙生成这个配置: https://github.com/zfl9/gfwlist2privoxy

curl -4sSkLO https://raw.github.com/zfl9/gfwlist2privoxy/master/gfwlist2privoxy
sudo mv gfwlist2privoxy /usr/local/bin && sudo chmod a+x /usr/local/bin/gfwlist2privoxy
# 放到 "PATH" 里保留,常用的

bash gfwlist2privoxy 127.0.0.1:1080
#  注意将 127.0.0.1:1080 替换为你的 socks5 地址

sudo mv -f gfwlist.action /etc/privoxy/
# gfwlist.action 移动到 privoxy 配置文件目录
sudo systemctl restart privoxy
# 重启一下确保配置生效

sudo service privoxy status
# 查看privoxy运行状态

tips: Privoxy 启动后,你设备配置好 HTTP 代理后,浏览器里输入 http://p.p ,你可以看到 Privoxy 成功启动的界面。

自定义配置:

如果你有公司的 VPN,Git 仓库或者其他办公站点也需要走代理,可以很方便的加一个配置。

sudo touch /etc/proxy/autovpn.action
sudo echo 'actionsfile autovpn.action' >>/etc/privoxy/config

# 以下注释可以删除

sudo cat > /etc/proxy/autovpn.action <<EOF
{{alias}}
alauda = +forward-override{forward-socks5 127.0.0.1:5087 .}
# alias 是定义别名的意思,可以在此处定义转发规则
{alauda}
.alauda.io
.alaudatech.com
# 引用别名,在其后紧跟需要适配这个规则的域名
# 支持泛域名,比如 .baidu.com 可以匹配 www.baidu.com,tieba.baidu.com
EOF

sudo systemctl restart privoxy
# 重启一下确保配置生效

开始施展魔法

树莓派

浏览器

在Chrome 中:

  1. 打开 “ Settings” 菜单,或在地址栏中输入chrome://settings
  2. 向下滚动到底部
  3. 点击“ 高级 ” 打开高级设置
  4. 向下滚动,直到看到 “ 系统 ” 选项
  5. 点击 打开您计算机的代理设置

IP 地址填入树莓派的 IP,端口默认情况下应设置为8118(Privoxy 监听的端口)

或者:Chrome、Firefox 有 Switchyomega 这个插件可以处理转发规则,配置也简单,但需要各自配置,使用 Privoxy 可以集中在一个地方处理。修改浏览器的代理,使用 http://localhost:8118 即可。

终端
方法1

在终端中直接运行命令

# 示例:本地 HTTP 代理
export  http_proxy=http://localhost:8118
export  https_proxy=http://localhost:8118

# 示例:本地 Socks5 代理
export http_proxy=socks5://127.0.0.1:1080
export https_proxy=socks5://127.0.0.1:1080

# 也可以用 ALL_PROXY
export ALL_PROXY=socks5://localhost:1080

# 如果代理服务器需要登陆,这时可以直接把用户名和密码写进去
http_proxy=http://userName:[email protected]:port

设置完毕后 wget curl 这类网络命令都会经过设置的代理。

localhost 就是一个域名,域名默认指向 127.0.0.1,两者是一样的。

这个办法的好处是简单直接,并且影响面很小,只对当前终端有效,退出就不行了。

方法2

把代理服务器地址写入 shell 配置文件.bashrc 或者.zshrc

直接在.bashrc 或者.zshrc 添加下面内容

# 示例:本地 HTTP 代理
export http_proxy="http://localhost:port"
export https_proxy="http://localhost:port"

# 示例:本地 Socks5 代理
export http_proxy="socks5://127.0.0.1:1080"
export https_proxy="socks5://127.0.0.1:1080"

# 也可以用 ALL_PROXY
export ALL_PROXY=socks5://127.0.0.1:1080

# 如果代理服务器需要登陆,这时可以直接把用户名和密码写进去
http_proxy=http://userName:[email protected]:port

然后 Ctrl + X 保存文件,接着在终端中执行 source ~/.bashrc

或者退出当前终端再起一个终端。 这个办法的好处是把代理服务器永久保存了,下次就可以直接用了。

或者通过设置 Alias 简写来简化操作,每次要用的时候输入 setproxy,不用了就 unsetproxy

alias setproxy="export ALL_PROXY=socks5://127.0.0.1:1080"
alias unsetproxy="unset ALL_PROXY"
alias ip="curl -i http://ip.cn"
方法3

改相应工具的配置

比如 apt 的配置:

sudo nano /etc/apt/apt.conf

在文件末尾加入下面这行

Acquire::http::Proxy "http://proxyAddress:port"

保存 apt.conf 文件即可。

更多关于 apt 的代理设置可以参考 ASK UBUNTU 里的这个问题

Git 的设置:

git config --global http.proxy 'socks5://127.0.0.1:1080' 
git config --global https.proxy 'socks5://127.0.0.1:1080'

Git 仓库有的在国内有的在国外,国内的有 GitCafe、Coding.net、开源中国 Git,所以用国内的就没必要设置了,反而会慢。

局域网内其他设备使用

浏览器

每种浏览器的设置不同,下面是一份快速指南:

  • 在Chrome 中:
  1. 打开 “ Settings” 菜单,或在地址栏中输入chrome://settings
  2. 向下滚动到底部
  3. 点击“ 高级 ” 打开高级设置
  4. 向下滚动,直到看到 “ 系统 ” 选项
  5. 点击打开您计算机的代理设置
  • 在 Firefox 中:
    1. 打开Options菜单,或在地址栏中输入about:preferences
    2. 向下滚动到底部
    3. 点击Settings... 标题下的 Network Settings 按钮
  • 在 Internet Explorer 中:
    1. 转到设置
    2. 点击 Connections标签。
    3. 点击 LAN settings按钮。
    4. 勾选 Use a proxy server for your LAN

IP 地址填入树莓派的 IP,端口默认情况下应设置为8118(Privoxy 监听的端口)

也可以用 Switchyomega 这个插件处理转发规则,使用 http://树莓派IP:8118 即可。

设置系统网络代理服务器

一般在电脑、手机等设备的网络连接设置的高级选项里,都有设置代理服务器的地方,服务器填入树莓派 IP,端口填入8118,认证选择无,保存即可生效,开始感受宛如置身海外的上网冲浪体验吧。

验证树莓派代理服务器

将代理设置配置为指向树莓派后,在浏览器中打开下面的地址

http://config.privoxy.org/

如果一切运行正常,可以看到 Privoxy 的欢迎界面:

![image-20200414115516257](不好意思这张图不见了

如果显示的是 Privoxy is not being used ,就要检查一下检查代理设置是否正确了。

Enjoy it!

到这里,你已经完成了树莓派魔法的安装与配置,你可以开始使用你的树莓派访问真正的互联网,并为局域网内的其他设备提供魔法代理服务。

希望你喜欢这篇文章,如果对你有帮助的话,别忘了点赞、收藏、分享和点击订阅,并留意更新动态。

Stay creative, and I will see you next time!


知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

参考文献:

[Ask Ubuntu]: https://askubuntu.com/questions/349702/apt-conf-acquirehttpproxy-proxyserverport-seems-not-to-be-used-ubuntu-13 "apt.conf “Acquire::http:Proxy ”proxyserver:port" seems not to be used (Ubuntu 13.04 under Virtual Box on Win7)"

标签

Jacob

科技社联合创始人,2018届社长

知识共享许可协议
本站文章除特别声明外,均采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可。
Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.