背景
有了树莓派后,我想随时了解小派的运行情况,于是开始研究内网穿透,为了让树莓派与服务器的连接更为隐秘,我采用了nginx分流,在使用了frp,ngrok,holer后,我发现它们均不符合我的需求(稳定性不好且配置繁琐),正当我一筹莫展之时,偶然发现一直在使用的V2Ray居然支持反向代理/内网穿透,为了更少的资源消耗,我选择了它,于是便有了下文。在选用监控面板时我比较了 Grafana 和 Netdata,最终选择了 Netdata ,因为它的安装配置较为简单。先上一张成果图吧:可以看出,我并没有使用纯域名,而是采用了Nginx反代二级目录的方式进行分流
好了,下面就开始讲述如何搭建出来这一系列东西吧。
我的树莓派、服务器、访问端关系如图:
树莓派配置ln(m)p运行环境
sudo pacman -S nginx ##安装nginx,装完记得到浏览器里测试一下
sudo pacman -S php php-fpm ##安装php
在nginx的配置里添加下面一句,让php-fpm来运行php
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
然后重启php-fpm
将下面代码扔到nginx配置中相应的root目录测试php环境是否正常
<?php
phpinfo();
?>
允许nginx,php-fpm开机自启
systemdctl enable nginx
systemdctl enable php-fpm
树莓派安装Netdata
arch已经有人打包好了,直接安装就好
sudo pacman -S netdata
systemctl enable entdata ##允许开机自启
systemctl start entdata
打开后默认监听19999端口,可以到浏览器输入 树莓派地址:19999
访问查看效果。
使用V2Ray进行内网穿透
在进行到这一步时由于网上资料不是很多,我在这里卡了很久,还有对 Nginx 的反代不怎么熟悉,卡了很久。幸亏发现了 这篇文章,并且得到了 @Ailitonia大佬的部分帮助才解决出来,在此感谢大佬!
ps:为了更为方便地描述,下文中 Bridge 即为处于内网的树莓派, Portal 即为拥有公网ip及绑定域名的服务器, Client 即为任何两者之外访问服务的外网设备
pps:由于树莓派已经运行了一个服务了,服务器也是
,所以我在树莓派上写了个 systemd 又开了一个进程、服务器上开了一个inboundDetour来运行内网穿透,如果本来没有使用服务可忽略
安装
直接输入命令安装即可:
bash <(curl -L -s https://install.direct/go.sh)
记得允许自启和打开
配置
Bridge
配置V2Ray
Bridge 配置:
{
"log": {
"access": "/etc/v2ray/Vaccess.log",
"error": "/etc/v2ray/Verror.log",
"loglevel": "warning"
},
"reverse": {
"bridges": [{
"tag": "bridge", // 关于 Bridge 的反向代理标签,在路由中会用到
"domain": "mydomain" // Bridge 和 Portal 反向代理通信的域名,可以自己取一个,可以不是自己购买的域名,但必须跟 Portal 中的 reverse 配置的域名一致
}
]
},
"outbounds": [{
"tag": "tunnel",
"protocol": "vmess",
"settings": {
//这里可根据自己喜好配置
},
"mux": {
"enabled": true
}
},
{
"protocol": "freedom",
"settings": {},
"tag": "out"
}
],
"routing": {
"rules": [{
// 配置 Bridge 主动连接 Portal 的路由规则
"type": "field",
"inboundTag": [
"bridge"
],
"domain": [
"full:mydomain"
],
"outboundTag": "tunnel"
}, {
// 反向连接访问本地端口的规则
"type": "field",
"inboundTag": [
"bridge"
],
"outboundTag": "out"
}
]
}
}
将上方配置保存为 nat-ddns.json
,保存在 /etc/v2ray/
里面。
添加Systemd
在 /etc/systemd/system/
新建 nat-ddns.service
内容如下:
[Unit]
Description=V2Ray Nat-DDNS Service
After=network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/bin/v2ray/v2ray -config /etc/v2ray/nat-ddns.json
Restart=on-failure
RestartPreventExitStatus=23
[Install]
WantedBy=multi-user.target
启动它,并允许开机自启
systemctl start nat-ddns
systemctl enable nat-ddns
Nginx二级目录反代
Nginx配置添加以下内容:
location /status/ {
proxy_redirect off;
proxy_pass http://127.0.0.1:19999/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
重启Nginx
Portal
配置V2Ray
Portal 配置
{
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"reverse": {
"portals": [{
"tag": "portal",
"domain": "mydomain" // 必须和 Bridge 设定的域名一样
}
]
},
"inbound": {
//我的配置
},
"inboundDetour": [{
"tag": "tunnel",
//这里可根据自己喜好配置
}, {
// 接受 Client 的inbound
"tag": "netdata", // 标签,路由中用到
"port": 666,
// 防火墙不用开放,用于接收内部的 HTTP 访问
"protocol": "dokodemo-door",
"settings": {
"address": "127.0.0.1",
"port": 80, //Bridge 的监听端口
"network": "tcp,udp"
}
}
],
"routing": {
"rules": [{ //路由规则,接收 Client 请求后发给 Bridge
"type": "field",
"inboundTag": [
"netdata"
],
"outboundTag": "portal"
}, { //路由规则,让 Portal 能够识别这是 Bridge 主动发起的反向代理连接
"type": "field",
"inboundTag": [
"tunnel"
],
"outboundTag": "portal"
}
]
}
}
Nginx二级目录反代
Nginx配置添加以下内容:
upstream local {
server 127.0.0.1:666;
}
server
{
...
location /status/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://local;
proxy_buffering on;
proxy_buffer_size 2M;
proxy_buffers 16 2M;
proxy_busy_buffers_size 8M;
proxy_temp_file_write_size 8M;
proxy_max_temp_file_size 0;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
...
}
重启Nginx
看看效果吧: Netdata
ps:如果502那就说明是学校断电,树莓派关机了。。。
后记
后来又搭建了一个可道云:也能访问,我 Portal 在 树莓派上只反代了80端口,可道云的数据由树莓派上的Nginx反代二级目录得到,当然,如果开多个端口也是可以的, Portal 多加几个 inboundDetour 对,Nginx 添加相应二级目录反代即可,甚至可以通过树莓派访问内网局域网里的其他资源,这就要看各人的需求了。最后,看看我树莓派上的的可道云吧:
视频测试:魔术视频
Comments | 9 条评论
之前我内网穿透了树莓派,本来想把wordpress放在上面,结果访问速度太慢了(用的frp内透),还是买了服务器,请问这个是硬伤吗?
@空白 树莓派建小站性能是足够的,如果你想要速度更快建议把静态资源放在公共CDN
该评论为私密评论
@Alex 其实是开源的 https://spiritx.xyz/387.html ,我在页脚也有写链接
更正:树莓派上的二级目录反代非必须
搞了个N1不知道要弄什么好…
看着便宜就入手了。
@后宫学长 usb2.0有点伤,不过这个价格真的
,还要什么自行车,前几天逛到一个人的WP博客就是在上面搭的 
@Spirit 就那点上传宽带,2.0都用不满。
@后宫学长 搞个透明代理,再做个下载机