前言简介
本人目前大三,计算机科学与技术专业,近期对树莓派很感兴趣,也动手实现了基于树莓派搭建树莓派私有云以及K3s的微型集群,其中很大一部分都是基于阿里云的ECS实现完成的,因此在此分享一下基于阿里云ECS搭建树莓派frp内网穿透的经验。
frp背景介绍
SSH和远程桌面都是需要在局域网下通过IP地址进行连接的,而我们配置一台服务器最重要的诉求,应该是可以随时随地去访问服务器。
比如在家里面,网络运营商提供的网络服务通过路由器路由到各个设备,此时路由器会同时具备内网地址(路由器之内,局域网,LAN,也就是192.168.x.x)和外网地址(路由器之外,互联网,WAN)。但是其实这个WAN口的IP并不是真正的“公网IP”,而是经过了多层的NAT转换之后的地址,外网的设备是不能通过这个地址访问到路由器的。
因此为了能让外网访问到我们局域网内的设备,就需要自己动手做一些操作来达到同样的目的,比如以下几种方法:
(1)用类似花生壳这样的DDNS服务平台做转发实现内网穿透,优点是比较简单稳定,缺点是需要持续付费,而且速度和延迟效果一般,而且每加一个端口都要额外付费。
(2)可以使用frp之类的软件做反向代理来实现内网穿透,这个方案也是需要一台带公网IP的云服务器的,优点就是完全可控,自己想配置多少个端口的穿透都可以,速度云服务器带宽有关。
至于为什么需要多个端口,是因为不同应用占用的端口不同,比如SSH走的是22号端口,如果需要自建Web服务的话则是走80/443端口,所以用上面第二个方案显然会方便很多。因此基于阿里云服务器,可以实现树莓派上的frp内网穿透。
阿里云端服务器配置frps
1.首先在阿里云服务器端配置安全组,打开相应的端口即可。
2.访问frp的官方GitHub网址,选择适合版本的压缩包,笔者云服务器为64位Linux系统,因此下载amd64版本的文件。
在阿里云服务器上,可以通过wget命令进行下载。
3.下载后进行解压并重命名解压后的文件夹,进入文件夹,并修改frps.ini文件,对端口,用户名和密码等进行具体设置。
其中dashboard_port是frp的web界面的端口号,dashboard_user以及对应的pwd是web界面的登录账户和登录密码,token则是frp客户端连接时的密码。启动frp的service端服务,然后可以配置自启动功能,使得每次开机可以自动开启frp的service端服务,首先新建systemctl 配置文件控制frps
sudo nano /etc/systemd/system/frps.service
然后将以下内容粘贴到文件内
[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
//启动服务的命令(此处写frps的实际安装目录)
ExecStart=/etc/frp/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target
4.可以通过systemctl命令来控制frp的service端服务,部分命令如下所示:
启动frps
sudo systemctl start frps
服务器开机自启frps
sudo systemctl enable frps
重启frps
sudo systemctl restart frps
停止frps
sudo systemctl stop frps
查看日志
sudo systemctl status frps
自此,阿里云服务器上的frps配置完成。
树莓派端配置frpc
1.获取到树莓派的架构与位数后,就可以根据信息选择对应的frp的压缩包版本。
2.依然是访问frp的官方GitHub网址 ,选择arm版本的压缩包文件。下载后进行解压并重命名解压后的文件夹,进入文件夹,并修改frpc.ini文件,其中编辑server_addr为服务器的公网IP,token即上述所编辑的密码,server_port与云服务器端的bind_port保持一致。
3.然后可以为具体服务编辑配置项,启动frp的client端服务可通过下面的指令实现:
./frpc -c /frpc.ini
启动client端的服务后,在service端即阿里云服务器端也可以看到相应的响应结果。
4.同样地,可以配置自启动功能,使得每次开机可以自动开启frp的client端服务,新建systemctl 配置文件控制frpc
sudo nano /lib/systemd/system/frpc.service
然后将以下内容粘贴到文件内
[Unit]
Description=frpc
After=multi-user.target
[Service]
TimeoutStartSec=10
RestartSec=30s
Restart=always
ExecStart=/home/pi/frpc -c /home/pi/frpc.ini //注意更换frpc路径
ExecStop=/bin/kill $MAINPID
[INSTALL]
WantedBy=multi-user.target
配置完就可以通过systemctl命令来控制frp的client端服务,控制命令与上述阿里云服务器端控制命令相同,树莓派端的frpc配置也到此完成。
总结
感谢阿里云提供的ECS服务,可以实现树莓派局域网下的公网访问。阿里云服务器的官方文档十分友好,使用起来十分舒适,后续我也会基于阿里云服务继续其他开发工作。