树莓派公网服务器实现frp内网穿透

简介: 树莓派公网服务器实现frp内网穿透
+关注继续查看

自己挖坑给自己埋,服务器都弄坏两次,特来总结以下经验。

前提准备:公网服务器IP(我的是阿里云服务器)

5f590e46ccc65b1562241a21f97729a0_3739.png

你得确保你的服务器开通了端口号,不然连接不成功

阿里云-网络安全组配置-添加规则(我是打开了6000-7000之间的所有端口号,你也可以先按我的做)

9364cca8ce41b60060a554f6f30292ed_3877.png

获取树莓派所在局域网的IP地址(我的树莓派是连的wifi)

打开wifi后台管理器,查看树莓派连接的ip地址

这时已经获取到树莓派所在局域网的ip了:192.168.31.191(我的)

 

一、ssh到你的公网服务器安装配置frp服务端frps

1.安装包

wegt https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz

2.解压包

tar -zxvf frp_0.32.0_linux_amd64.tar.gz

3.进入解压包目录

cd frp_0.32.0_linux_amd64

4.查看frps.ini

nano frps.ini

5.然后在里面编辑 默认内容

[common]
bind_port = 7000

ctrl+o保存 enter回车确认 最后ctrl+x退出

6.启动frps(在frp_0.32.0_linux_amd64里启动)

./frps -c ./frps.ini

这时候会提示启动成功,不要关闭我们继续配置客户端,只有都启动了才能连通ssh。

 

二、安装配置frp客户端frpc

1.安装包

wegt https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_arm.tar.gz

2.解压包

tar -zxvf frp_0.32.1_linux_arm.tar.gz

3.进入解压包目录

cd frp_0.32.1_linux_arm

4.查看frpc.ini

nano frpc.ini

5.然后在里面编辑

[common]
server_addr =(你的公网服务器ip地址)
server_port = 7000
  
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

ctrl+o保存 enter回车确认 最后ctrl+x退出

6.启动frpc(在frp_0.32.1_linux_arm目录里启动)

./frpc -c ./frpc.ini

这时候显示成功了

 

就可以ssh连接你局域网的树莓派了

0a5a3efdec8658bc519977ea675fe917_3759.png

端口号记得改成6000

特别提示一定要先成功连接服务端,再连接客户端,服务端先走!!!

 

-----------------------常见报错-----------------------

1.[ssh] start error: port already used

先找到这个进程

ps -aux|grep frp| grep -v grep

root 3520 0.1 0.1 111188 9484 pts/0 Sl 15:04 0:00 ./frpc -c ./frpc.ini

执行之后如果显示这样则成功了

然后kill -9 进程号

kill -9 3520

2.0.0.0.0:7000 already used (小心不要把22端口杀掉了,不然ssh连不上服务器)

提示7000端口已经被使用了

netstat -tanlp 查看tcp进程
  
sudo kill 2683  杀掉

3.如果杀掉端口之后再服务端运行报错,查看你的7000端口有没有被关闭,关闭了就打开

nc -lp 7000 &(打开7000端口,即telnet)

4.不要直接运行这种命令

bee055549388ea04c962b2b4b22d122b_3825.png

你的机器上没有这个文件会直接报错,这个是要自己新建的自启服务

这个方法比较好用,很方便

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

在frps.service里写入以下内容

[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target
 
[Service]
Type=simple
#写你的frps的需要用绝对路径
ExecStart=/XXX/frps -c /XXXX/frps.ini
 
[Install]
WantedBy=multi-user.target


然后就启动frps

sudo systemctl start frps

再打开自启动

sudo systemctl enable frps

如果要重启应用,可以这样,sudo systemctl restart frps

如果要停止应用,可以输入,sudo systemctl stop frps

如果要查看应用的日志,可以输入,sudo systemctl status frps

查看磁盘空间命令: df -hl

相关文章
|
9月前
|
XML Java 数据库
面试项目说实现了一个后端多线程网络服务器框架应该怎样写
面试项目说实现了一个后端多线程网络服务器框架应该怎样写
面试项目说实现了一个后端多线程网络服务器框架应该怎样写
|
9月前
|
网络协议
自建内网穿透服务器替换TeamViewer和向日葵,实现远程控制
自建内网穿透服务器替换TeamViewer和向日葵,实现远程控制
237 0
自建内网穿透服务器替换TeamViewer和向日葵,实现远程控制
|
9月前
|
存储 算法 安全
分布式服务器框架之Servers.Core库实现 DES对称加密算法;SHA1信息摘要算法;MD5信息摘要算法
通信双方(通信主体)同时掌握一个钥匙,加解密都由这一个钥匙完成。通信双方通信前共同拟定一个密钥,不向第三方公开,发送前加密和接受后解密都由此密钥完成。即钥匙如果泄露,将暴露自己的全部信息。
|
9月前
|
数据安全/隐私保护
分布式服务器框架之Server.Core库中实现 XXTEA分组加密算法
在密码学中,微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。其设计者是剑桥大学计算机实验室的大卫·惠勒与罗杰·尼达姆。这项技术最初于1994年提交给鲁汶的快速软件加密的研讨会上,并在该研讨会上演讲中首次发表。
|
9月前
|
存储 缓存 NoSQL
分布式服务器框架之Servers.Core中 实现Log模块设计 写入MongoDB数据库
游戏服务器中都需要用到Log模块,log模块存在的意义第一个是将log输出到控制台又或者是写入到log文件中,出了BUG方便定位;第二是常用于将用户的数据(例如玩家登录、道具购买量)将这种log统计到数据库中,方便统计用户留存信息、数据分析等。
|
9月前
|
C# 容器
分布式服务器框架之Server.Common库中实现 秒级定时器
定时器模块是服务器中的常用组件,本文带你实现一个具有基本功能的定时器模块要想设计一个定时器模块,一般包含两部分,一个是定时器对象(ServerTimer),另一个管理定时器对象的管理者(TimerManager)也叫定时器容器;定时器使用了C#内System库里面的Timer定时器作为定时器的主驱动
分布式服务器框架之Server.Common库中实现 秒级定时器
|
9月前
|
NoSQL MongoDB 数据库
分布式服务器框架之Server.Core库中实现YFUniqueEntity、YFUniqueIDBase 管理MongoDB 自定义Id的自增
YFUniqueEntity是数据库中的结构,GetUniqueID函数中会根据Type和自增步长去数据库中寻找该类型的当前ID是多少,然后会用当前的Id去加上步长,把更新后的新ID插入到MongoDB中记录着ID的那张表里。
|
9月前
|
NoSQL MongoDB
分布式服务器框架之Servers.Core库中实现 MongoEntityBase 实现阻塞 异步对MongoDB的增删改查
YFMongoDBModelBase类是个模板类,对模板参数进行了约束YFMongoEntityBase,必须要继承YFMongoEntityBase
|
9月前
|
JSON NoSQL MongoDB
分布式服务器框架之Servers.Core库中实现MongoDB的ObjectId和Json转换
分布式服务器框架之Servers.Core库中实现MongoDB的ObjectId和Json转换
|
9月前
|
SQL NoSQL MongoDB
分布式服务器框架之Servers.Core库中实现MongoDB对象实体类 管理对象ID
MongoDB中的ID是一个hash码,和传统的关系数据库相比MongoDB没有办法实现ID的自增,如果需要ID自增的话,所以要自己管理ID,并且把对应类型的ID写入到一个专门的Collection(其实就是Sql中的Table)里面去,每次创建新对象的时候,都要取到该类型当前的ID,然后在这个基础上+1,比如当前是角色的ID是1,又创建了一个新的角色,要在原来的基础上+1 ID=2。今天先把MongoDB的对象实体基类实现了。
热门文章
最新文章
相关产品
云迁移中心
推荐文章
更多