一、个人自我介绍
大家好,我是一名大四的学生,就读的专业是机器人工程,主要学的是机器人学基础、工业机器人仿真技术、ROS操作系统、人工智能基础、单片微型计算机原理与接口技术、C++、Python、模电数电、电路原理还有电路PCB设计等主要专业课程。以前在阿里云平台有了解过一些物联网应用技术,利用阿里云做出了一个物联网设备,参加比赛获得过奖项。
二、实验操作前的准备
2.1 材料准备
树莓派4B、读卡器、16G内存卡、千兆网线一根、电脑、联网的wifi路由器,能流量上网的手机,最重要的是在阿里云申请一个有公网IP的云服务器。
2.2 树莓派设置
2.2.1 树莓派镜像烧录
树莓派4B,我用的是4G内存的版本,具体性能参数在树莓派的官网有,我这就不再赘述了,需要做一些比较大的项目的话可以选择内存8G的版本。树莓派的内存卡用16G以上的,然后烧录Ubuntu20.04 Server LTS的镜像,树莓派镜像下载和烧录请参照这个链接里的步骤。
2.2.2 Xshell登录树莓派
按照上图来连接好树莓派和电脑,然后登录路由器管理页面查看树莓派的IP,可以看到路由器分配给我们树莓派的IP是192.168.1.9。在电脑上的Xshell工具里(或者putty,没有的话可以去百度下载)
选择SSH,输入树莓派IP,默认端口号22不要改,最后点击连接。
这个镜像里树莓派的用户名是ubuntu,初始密码是ubuntu,第一次登录会强制修改原始密码,输入2次密码确认新修改的密码,下次登录就用新密码登录,登录成功会显示下面的内容。
设置管理员root,@前的ubuntu是普通用户,$是普通用户的标志,#是管理员的标志。我们可以设置管理员root,输入下面的指令,输入密码后可以切换到管理员root用户。root用户具有比ubuntu用户更高的权限。需要退出root用户的时候,请输入exit并回车
su
我们下次登录树莓派时发现时区不对,参考此链接查看如何更改时区。
2.2.3 树莓派换源
ubuntu20.04的镜像服务器在国外,国内要访问和下载一些工具往往会受服务器连接稳定性和网速的影响,因此这一步我们可以把树莓派的镜像源更换为国内的,我这选的是USTC的源。请按以下步骤完成树莓派的换源。
sudo cp -p /etc/apt/sources.list /etc/apt/sources.list.bak #备份树莓派的源 sudo vim /etc/apt/sources.list #用vim工具打开并编辑
按a进入--INSERT--模式,在每个黄色的deb前面加上#以注释掉该行。最后在文末增加如下代码。
# 默认注释了源码仓库,如有需要可自行取消注释 deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal main main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
编辑完如下图所示。然后按ESC退出--INSERT--模式,输入:wq保存修改并退出vim。
然后在命令行中先后输入以下2行代码,等待几分钟让树莓派自动更新源,如果提示【Y/N?】请输入Y并回车。
sudo apt update sudo apt upgrade
2.2.4 设置树莓派静态IP
树莓派默认是DHCP自动获取动态IP的,因此我们在局域网里登录树莓派前必须查看树莓派IP,这就很麻烦。所以我们可以设置树莓派的静态IP,这就省去了每次登录WiFi管理页面查看树莓派IP地址了。咱们说干就干。参考这个视频的静态IP的设置方法。
我们先输入下面一条命令获得树莓派网卡信息。
sudo apt install net-tools #如果提示command 'ifconfig' not found,请先输入这行代码安装net-tools ifconfig
eth0:是树莓派有线网卡的名称。
192.168.1.9 :是树莓派局域网当前的IP。
ll /etc/netplan/
我们输入上面指令并回车,查看netplan目录下有的文件。我们需要修改xx-cloud-init.yaml文件,我的是50-cloud-init.yaml,前面的50是随机数,每个人可能不一样,以你自己的为准。
sudo vim /etc/netplan/50-cloud-init.yaml
输入上面的代码进入网卡配置文件编辑,编辑方法参考树莓派换源那个步骤。下面这是我的配置,以供参考。文件保存并退出。
输入以下代码执行netplan的变更操作。
sudo netplan apply
如果Xshell没反应或者有如下的提示,说明此时树莓派IP已更换,需要在Xshell里重新输入更改后的树莓派IP并重新登录。步骤参考Xshell登录树莓派。
我们重新登陆上树莓派后可以通过ifconfig查看到树莓派IP变成了192.168.1.10
我们尝试通过ping一下百度,如果有ping成功说明此时我们树莓派是可以上网的。退出ping请输入Ctrl+C组合键。
ping baidu.com
可以看到我们ping成功了,说明到此为止树莓派基础配置已经完成。
三、frp内网穿透工具的配置
3.1. 申请一个阿里云服务器
学生专享免费领取服务器申请,按照步骤和提示,完成训练计划,点击免费领取,并完成相关任务,初步了解ECS云服务器。
我的云服务器选的是Ubuntu20.04 64位的系统,建议选这个系统,记住公网IP。
点击【远程连接】后,选择第一个,以root用户登录,记住登录密码。
到这一步已经完成了云服务器的远程登录。
3.2 FTP配置
有时我们需要往服务器上传文件和下载文件,我采用FTP实现服务器端和客户端文件的互传。相关的配置过程如下。首先输入下行代码下载安装vsftpd工具。
sudo apt update sudo apt upgrade #更新源 sudo apt-get install vsftpd
安装完成以后使用vim打开。/etc/vsftpd.conf 进行配置,命令如下。
sudo vim /etc/vsftpd.conf
打开vsftpd.conf文件以后,找到如下两行。
local_enable=YES write_enable=YES
确保上面2行代码前面没有“#”,有的话就取消掉,完成以后如下图所示。
修改完后保存退出,并且输入以下命令重启FTP服务
sudo /etc/init.d/vsftpd restart
因为阿里云服务器有默认的安全组保护,所以我们要将FTP需要使用的端口放开使用。进入阿里云控制台,点击【更多】->【网络和安全组】->【安全组配置】
之后点击【配置规则】,在【入方向】点击【手动添加】,配置端口20/21,源0.0.0.0/0,如下图所示。最后确定保存
链接:https://pan.baidu.com/s/18AlkpBGqDWiiFIhnQhHSHA?pwd=x5t2
提取码:x5t2
点开链接下载【FileZilla】,按照安装步骤一直下一步就可以了,然后打开软件,点击【站点管理器】
当出现下图所示信息,说明已经FTP已经成功连上了阿里云服务器,此时我们就可以往服务器上传和下载文件了。
树莓派端也可以通过FTP很方便地传输文件,在【站点管理器】那页输入树莓派的局域网ip(192.168.1.10)即可。我们就可以很方便地通过局域网给树莓派上传文件了。
3.3 frp的下载
打开网盘链接可以下载我的frp文件。
链接:https://pan.baidu.com/s/1GlIqBB-9PjHo6NfMD68F5Q?pwd=6p70
提取码:6p70
需要注意的是,请把linux_386的文件通过【FileZilla】发送到阿里云服务器的/opt/目录下,linux_arm64的文件发送到树莓派的/opt/目录下。如果树莓派的文件传输不了,提示permission denied,是因为我们登录的ubuntu用户没有权限操作/opt目录里的文件,即没有权限往/opt里传输文件。请按照这个链接里的步骤操作,然后在FileZilla这个软件里使用root和密码登录树莓派再传输文件到/opt。我们可以很方便地使用鼠标拖动文件的方式是实现文件地传输操作,这里我就不过多操作了,请你自己亲自操作尝试一下。
3.4 frp配置
3.4.1 阿里云服务器端的frp配置和frps服务开启
输入以下命令进入/opt目录,有一个frp的tar.gz的压缩包,我们输入指令解压它。然后进入解压出来的文件夹。
cd /opt/ #进入opt目录 ls #列出目录下的文件 tar zxvf frp_0.37.0_linux_386.tar.gz #解压文件 cd frp_0.37.0_linux_386/
解压出来的文件有如上所示的几个文件。阿里云的配置需要修改frps.ini这个文件。
vim frps.ini
保存配置后退出,我们还需要拷贝2个文件。输入以下2个命令拷贝文件。
cp frps /usr/local/bin/frps mkdir /etc/frp/ #创建/etc/frp/这个目录 cp frps.ini /etc/frp/frps.ini #如果提示No such file or directory,请先执行上一条命令
在我们解压的文件里,还有一个systemd文件夹,进入systemd文件夹查看里面的文件。我们还需要配置一下frps自启动的服务。使用vim工具进行编辑。
cd systemd ls vim frps.service
这个文件我们只需要修改ExecStart这一行代码,这行代码的意思是frps这个服务的开启路径,把frps和frps.ini这2个文件的路径相应地填进去就可以了。下面这行是我自己配置的路径,请相应的改为你自己的路径,经供参考!
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
保存后退出。输入以下命令把上面修改的文件复制到/etc/systemd/system/目录下
cp frps.service /etc/systemd/system/
然后输入以下几行代码让它能开机自动启动frps这项服务
systemctl daemon-reload #重载 systemctl start frps.service #启动frps服务 systemctl enable frps.service #使能开机自动启动frps服务 systemctl status frps.service #查看frps服务的当前状态
验证frps是否开机自动启动,先输入reboot让云服务器重启,然后重新登录上云服务器输入systemctl status frps.service查看。如果出现下图所示的提示【active(running)】说明已经成功配置了开机自动启动服务。
3.4.2 树莓派客户端的frp配置和frpc服务开启
树莓派的配置与云服务器端的配置相似,不同的是树莓派作为客户端需要配置的相关文件是frpc.ini,frpc ,frpc.service这三个。
这里讲解一下frpc.ini文件的配置,这里请记住用到的端口6000和端口7000。
[common] server_addr = 0.0.0.0 #frp服务端地址,可以填ip或者域名,这里假设为0.0.0.0 server_port = 7000 #frp服务端端口,即填写服务端配置中的 bind_port [ssh] type = tcp #连接类型,填tcp或udp local_ip = 127.0.0.1 #填127.0.0.1或内网ip都可以 local_port = 22 #需要转发到的端口,ssh端口是22 remote_port = 6000 #frp服务端的远程监听端口,即你访问服务端的remote_port就相当于访 #问客户端的 local_port,如果填0则会随机分配一个端口
然后是修改frpc.service文件,需要注意的是frpc.service ,不是frps.service。配置的内容如下图。
红框里的路径根据你的树莓派的配置路径填写,这是我的,仅供参考。然后通过以下命令复制frpc.service到指定目录。
cp frpc.service /etc/systemd/system/
下面重载服务并允许开启启动
systemctl daemon-reload #重载 systemctl start frpc.service #启动frps服务 systemctl enable frpc.service #使能开机自动启动frps服务 systemctl status frpc.service #查看frps服务的当前状态
3.5 云服务器端安全组设置
还记得之前要记住的6000和7000的端口号吗?阿里云服务器的安全组和我们个人电脑的防火墙概念类似,目的是保护我们服务器不被黑客肆意攻击破坏,所以我们上面已经配置好服务端和客户端但还是不能实现内网穿透,原因在于我们还没有给frp需要的端口开启服务,这一步我们就需要开启6000和7000端口。
进入阿里云控制台,点击【更多】->【网络和安全组】->【安全组配置】,之后点击【配置规则】,在【入方向】点击【手动添加】,配置端口6000/7000,源0.0.0.0/0,如下图所示。最后确定保存。
四 测试
我使用的测试工具是手机APP【JuiceSSH】,为了证明是外网登录树莓派,我断开手机的WiFi连接,使用4G流量登录树莓派。
点击【快速连接】然后选择SSH,输入[username@]server_addr[:port],输入密码后就可以登录了。
上面登录使用username的是你树莓派的用户名(root或者ubuntu),server_addr是阿里云服务器的公网IP,port 6000就是设置的 remote_port,最后的登录密码是树莓派的密码,而不是阿里云服务器的密码,这一点一定要注意。
五 总结与祝愿
通过这个外网访问家里树莓派的实例,我们学习了通过frp来实现内网穿透,通过对7000端口和6000端口的操作,了解到frp内网穿透的原理是通过一种反向代理的技术实现的。前期我们只开通了SSH的服务,后面我们如果需要搭建个人博客或者通过内网穿透操控树莓派管理家里的智能家具、家庭文件管理系统等等丰富的应用场景,我们还可以配置相关文件和端口。
在阿里云平台我们可以不仅可以学习物联网的知识,还能利用阿里云平台实现自我价值的一种体现,我在这发布我的内容和实践,通过这个开发者开放的平台,我们相互交流共同进步。
最后在这里,我祝大家新年快乐!工作顺利!家庭和睦!学习进步!