请注意:由于 V2Ray 项目变动,本文的操作方法已经失效,但仍具一定参考价值
本文将向你介绍如何使用树莓派配置和安装 V2Ray
和 privoxy
,让树莓派顺畅访问国际互联网,并为局域网内的其他的设备提供 socks5代理
和 http代理
服务。
先来给大家解释一下基本原理:
啊不好意思放错了,应该是这张:
我们这篇文章要实现的目标是:
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": "t@t.tt",
"security": "auto"
}
]
}
],
"servers": null,
"response": null
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"allowInsecure": true,
"serverName": "v2ray.com"
},
"tcpSettings": null,
"kcpSettings": null,
"wsSettings": {
"connectionReuse": true,
"path": "/v2ray",
"headers": {
"Host": "v2ray.com"
}
},
"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 中:
- 打开“
Settings
”菜单,或在地址栏中输入chrome://settings
- 向下滚动到底部
- 点击“ 高级 ”打开高级设置
- 向下滚动,直到看到“ 系统 ”选项
- 点击
打开您计算机的代理设置
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:password@proxyAddress: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:password@proxyAddress: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 中:
- 打开“
Settings
”菜单,或在地址栏中输入chrome://settings
- 向下滚动到底部
- 点击“ 高级 ”打开高级设置
- 向下滚动,直到看到“ 系统 ”选项
- 点击
打开您计算机的代理设置
- 在 Firefox 中:
- 打开
Options
菜单,或在地址栏中输入about:preferences
- 向下滚动到底部
- 点击
Settings...
标题下的Network Settings
按钮
- 打开
- 在 Internet Explorer 中:
- 转到设置。
- 点击
Connections
标签。 - 点击
LAN settings
按钮。 - 勾选
Use a proxy server for your LAN
IP 地址填入树莓派的 IP,端口默认情况下应设置为8118
(Privoxy 监听的端口)
也可以用 Switchyomega 这个插件处理转发规则,使用 http://树莓派IP:8118
即可。
设置系统网络代理服务器
一般在电脑、手机等设备的网络连接设置的高级选项里,都有设置代理服务器的地方,服务器填入树莓派 IP,端口填入 8118,认证选择无,保存即可生效,开始感受宛如置身海外的上网冲浪体验吧。
验证树莓派代理服务器
将代理设置配置为指向树莓派后,在浏览器中打开下面的地址
http://config.privoxy.org/
如果一切运行正常,可以看到 Privoxy 的欢迎界面:
如果显示的是 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)"