树莓派-内网穿透

树莓派只能在家里玩?当然不是,如何在外网访问家里的树莓派呢?

折腾树莓派,安装了宝塔,有了基本的 web 环境;安装了 homeassistant,没有小米mesh蓝牙网关设备也能在线看到小米温湿度数值;安装了 jenkins,但是不能用各种错误;
我想如果不在家也能连上树莓派,有什么方案呢?
需要完成这样一个工作:内网穿透。

参考地址: https://blog.csdn.net/weixin_44845947/article/details/108160292
内网穿透有很多种方法,这里主要说以下三种:
如果家里有公网IP的话,可以用路由器做映射,进而实现内网穿透;
natapp、ngrok等商业化或非商业化内网穿透工具,用的其实是人家的公网IP;
买云主机服务器以获得公网IP
这三种方法有一个共性就是,要想在公网访问到树莓派,必须要有一个公网的IP,而在这三种方法里,最省钱的无疑是第一种,操作也很简单,最多需要做个动态解析。唯一的问题在于,你很可能没有公网IP,那就无法使用第一种方法了。


最终选择 frp 内网穿透

1. 下载并部署Frp

下载

https://github.com/fatedier/frp/releases,找到对应的版本,arm64版本和普通版本,如下图:

树莓派-内网穿透_pic_01

部署

分别解压

  • 将frpc和frpc.ini两个文件传到树莓派上(我放在了/home/pi/目录下)
  • frps和frps.ini两个文件放云主机(我放在了/root/目录下)

2. 配置frpc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[common]
server_addr = XXX.XXX.XXX.XXX
server_port = 7000
privilege_token = 12345678

log_file = /home/pi/log/frpc.log
log_level = info
log_max_days = 3
pool_count = 5
tcp_mux = true

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 5901


添加日志目录

1
2
3
4
cd /home/pi
mkdir log
cd log
touch frpc.log

启动frpc

1
./frpc -c ./frpc.ini

3. 配置frps

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[common]
subdomain_host = magicyou.cn
bind_port = 7000
vhost_http_port = 8080
vhost_https_port = 444
dashboard_port = 7500
dashboard_user = user
dashboard_pwd = pwd
privilege_token = 12345678

log_file = /root/frps/log/frps.log
log_level = info
log_max_days = 3
max_pool_count = 5
authentication_timeout = 900

tcp_mux = true

添加日志目录

1
2
3
4
cd /root
mkdir log
cd log
touch frps.log

启动frps

1
./frps -c ./frps.ini

注意: privilege_token frps 和 frpc 一致;

4. 端口加入防火墙白名单

以上配置frpc和frps的所有端口都添加入云主机配置的安全组,当然记得在宝塔系统加入端口开放,否则云主机无法和树莓派通信

5. 尝试访问 XXX.XXX.XXX.XXX:7500

输入配置的 dashboard_user,dashboard_pwd;
树莓派-内网穿透_pic_02
树莓派-内网穿透_pic_03

可以看到
树莓派-内网穿透_pic_04

到此,内网已经成功穿透,已经可以远程访问家里的树莓派。

6. 添加开机启动项

以云主机 frps 为例。

创建启动文件

1
2
sudo vim /lib/systemd/system/frps.service

之后添加下面的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=frps service
After=network.target network-online.target syslog.target
Wants=network.target network-online.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/root/frps/frps -c /root/frps/frps.ini #对应自己安装的frps路径

[Install]
WantedBy=multi-user.target

wq保存退出,之后就可以使用如下指令:

1
2
3
4
5
sudo systemctl start frps.service	#开启frps服务
sudo systemctl enable frps.service #设置开机自启动
sudo systemctl restart frps.service #重启frps
sudo systemctl status frps.service #查看frps状态

7. 树莓派就顺利的连入了互联网