树莓派建立个人网站(三):frp内网穿透实现外网访问_树莓派如何通过frp访问本地资源-程序员宅基地

技术标签: 个人网站  linux  服务器  

BACK:树莓派建立个人网站(二):代码统计系统环境部署

一:实现方案

  依照目前针对内网穿透的三种方案:

  • 获得自家的公网IP,使用路由器进行端口映射
  • 使用第三方的软件进行内网穿透,如花生壳等
  • 使用工具进行内网穿透,如frp等

  其中第一种方案因为ipv4地址紧张,ipv6还未普及等原因,很难获取到自家的公网IP,且IP固定因为不便于更换服务器位置。

  第二种方案和第三种方案其实本质差不多,都是需要一个有外网地址的服务器做中转,把对于网站的访问再通过服务器到客户端的形式转移给你的内网服务器来处理。鉴于使用体验和数据安全等原因还是自己搭建外网服务器中转比较好,故采用frp来进行内网穿透。

二:frp的使用

  frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

  通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

更多的使用方法!

1. 准备工作
  • 公网服务器一台
  • 内网服务器一台
  • 内网服务器运行一个web服务,如Flask
  • 域名(没有也不影响访问使用)

2. 安装frp

2.1 frp分为服务端和客户端,在https://github.com/fatedier/frp/releases下载对应版本的frp压缩包,内含服务端文件和客户端文件。

下载命令:sudo wget https://github.com/fatedier/frp/releases/download/v0.35.1/frp_0.35.1_linux_amd64.tar.gz

2.2 新建文件夹frp在/usr/local/下,下载frp压缩包到frp文件夹里。然后解压frp压缩包并进入其文件夹:

sudo tar -zxvf frp_0.35.1_linux_amd64.tar.gz

2.3 配置服务端(公网的服务器),先删掉frpc和frpc.ini文件,然后vim打开frps.ini文件进行配置。

[common]
bind_port = 7000        # 用于frp客户端和服务端连接的端口,配置客户端时和这个一样
token = 123             # 用于frp客户端和服务端连接的口令,需自行设置并记录,客户端会用到
dashboard_port = 7500   # 服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为公网服务器的公网IP)查看frp服务运行信息。
dashboard_user = xxx    # 打开仪表板页面登录的用户名和密码,需自行设置
dashboard_pwd = xxxxx
vhost_http_port = 6081  # 访问客户端web的http服务自定义的端口号
vhost_https_port = 10443

保存后启动:

./frps -c ./frps.ini

2.4 配置客户端(内网服务器),先删掉frps和frps.ini文件,然后vim打开frpc.ini文件进行配置。

[common]
server_addr = x.x.x.x        # 公网服务器的IP
server_port = 7000           # 与服务器的bind_port相同
token = 123                  # 与服务器的token相同


# 公网通过ssh访问内部服务器
[ssh]
type = tcp                   # 连接协议
local_ip = 192.168.1.101     # 内网服务器的IP,使用127.0.0.1也可以         
local_port = 22              # ssh终端默认端口号
remote_port = 6000           # 自定义访问内部ssh的端口号,当进行外网访问内部服务器时用的端口


#公网访问内部web服务器以http方式
[web]
type = http                  # 访问协议
local_port = 80              # 内网web服务的端口
custom_domains = xxxxxx.com  # 所绑定的公网服务器域名,一级、二级域名都可以,必须要有

保存后启动:

./frpc -c ./frpc.ini

3. 访问方式(下方的域名可替换为公网IP地址)
  • 使用外网访问内部服务器:使用xshell进行ssh访问,用网址的http访问是不行的。访问方式和在局域网内一样,只是IP换成了公网IP,端口是6000
  • 使用外网访问内部的web服务:xxxxxx.com:6081

4. 树莓派上的frpc的开机启动

4.1 在 /lib/systemd/system/ 路径下创建 frpc.service 文件,其完整路径为:/lib/systemd/system/frpc.service

4.2 编辑frpc.service文件,添加如下代码:

#frpc.service
[Unit]
Description=frpc Service
After=network.target syslog.target
Wants=network.target

[Service]
User=pi
Type=simple
ExecStart=/填写frpc的绝对路径/frpc -c /填写frpc的绝对路径/frpc.ini

[Install]
WantedBy=multi-user.target

4.3 重载并设置开机启动

sudo systemctl daemon-reload
sudo systemctl enable frpc

4.4 以上操作完成以后重启树莓派看看是不是已经成功启动了frpc,可以在命令行执行下面指令的最后一个查看frpc的状态。

//启动命令
sudo systemctl start frpc
//停止命令
sudo systemctl stop frpc
//重启命令
sudo systemctl restart frpc
//查看状态
sudo systemctl status frpc

三:注意事项
  • 购买服务器时注意域名备案必须和服务器提供厂商是一家,比如你买的百度云服务器就只可以在百度云进行域名备案。
  • 域名备案时必须要有一个服务器,并且是大于3个月可使用时长的服务器,所以很多服务器最低租借时限是3个月。
  • 如果你没有域名,或者只是买了一个月的服务器(好像只有百度云有),导致没有域名可用,那么在配置客户端的时候custom_domains参数填写你的公网IP地址就可以,并且访问的时候只能使用IP地址加端口的访问方法。
  • 你还可以考虑远程修改网站代码,使用外网登录ssh方式就可以。可以参考这篇文章使用Pycharm远程写代码,其访问地址改为公网IP,端口为6000就行。

四:参考博文

使用frp进行内网穿透

十分钟教你配置frp实现内网穿透

frp在树莓派上的开机启动设置

我会将我的网站开放到服务器过期为止,到2021-2-18,晚上关闭,欢迎大家尝试使用!网站代码还有很多不完善的地方,敬请谅解!(目前暂停访问了!)


HenonBamboo:代码统计系统
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42572656/article/details/113915251

智能推荐

youtube上下载vr立体声视频及其处理_立体声小视频下载-程序员宅基地

文章浏览阅读864次。Gihosoft TubeGet下载立体声视频读取视频信息 ffmpeg -i video.mp4resize视频 ffmpeg -i video.mp4 -s 3840:2160 video1.mp4视频eac贴图至e ffmpeg -i video1.mp4 -vf v360=eac:e video2.mp4精确裁剪视频(00:28~20s) ffmpeg -y -i video2.mp4 -ss 00:00:28 -t 00:00:20 -c:a copy -vcodec libx264 -._立体声小视频下载

python中表示任意实数_Python基金会-数字类型,python,基础,numerictypes-程序员宅基地

文章浏览阅读3.3k次。数值类型(numeric types)integers(整型)什么是整数数学上,整数是指正整数、零、负整数。python中也是如此。整型可表示的范围sys.maxsizeAn integer giving the maximum value a variable of typePy_ssize_tcan take. It’s usually2**31 - 1on a 32-bit platform..._python中任意实数数字怎么表达

ES5和ES6新特性_es5的面向对象有哪些特性、和es6的面向对象有哪些特性-程序员宅基地

文章浏览阅读1.1k次。ES51、 严格模式(use strict)这种模式,使得JavaScript在更严格的语法条件下运行:(1)变量必须使用var声明;(2)禁止自定义的函数中的this指向window(3)创建 eval 作用域即为块级作用域(4)对象不能有重名的属性use strict可以在脚本或者函数开头声明,分别具有全局和函数作用域。2、 增加JSON对象JSON.stringify(obj/arr);JSON.parse(json);3、 扩展了数组Array_es5的面向对象有哪些特性、和es6的面向对象有哪些特性

【android笔记】解决“Android Device Monitor is already launched”的问题-程序员宅基地

文章浏览阅读2.5k次。Android studio启动android device monitor,第一次点击没有反应再点击是提示如上图“Android Device Monitor is already launched”解决办法: 点击上图中的按钮, 选择yes按钮 直接选择cancel然后再重新启动Android Device Monitor具体原因还不清楚,只知道这样操作可以临..._android device monitor is already launched

MYSQL外键约束和表关联_mysql 给表 添加外键约束指定约束名将表的外键和另一个表的键关联起来-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏8次。1. 外键约束约束 : 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、关联性foreign key 功能 : 建立表与表之间的某种约束的关系,由于这种关系的存在,能够让表与表之间的数据,更加的完整,关连性更强,为了具体说明创建如下部门表和人员表。示例# 创建部门表CREATE TABLE dept (id int PRIMARY KEY auto_increment,dname VARCHAR(50) not null);# 创建人员表CREATE TABLE_mysql 给表 添加外键约束指定约束名将表的外键和另一个表的键关联起来

recyclerview 复杂布局_friendscircleimagelayout-程序员宅基地

文章浏览阅读337次。这个吧我的头都搞痛了,哎!!先看布局这种类型于朋友圈的这样,最多9张至少一张的,刚开始决定每个大小size用不同的LinearLayoutmanager来实现,一个用1,两个就用gradmanager来实现,这类文字很多,因为这里的地址是网络地址传的是string,在自定义manager的时候发现,测量的高度始终为0,这样的话就无法显示图片,最后在本地使用一张图片,发现可以显示,那说明方法没有用错,最后就不得不放弃,另找一种方法。这个原因就花了一个下午的时间,因为时间紧,所以就换个写法。.._friendscircleimagelayout

随便推点

实测基于springboot的Flume整合_springboot整合flume-程序员宅基地

文章浏览阅读875次。基于springboot的Flume整合_springboot整合flume

c语言错误方法变成类型,C语言调试常见错误及修改方法(附习题)-程序员宅基地

文章浏览阅读1.1k次。1.调试 C 程序时常见的错误类型分析一般情况下,错误主要分为两大类:一、语法错误。对于这种错误,用编译器很容易解决。所以,改错题的第一步是先编译,解决这类语法错误。下面总结了二级C 语言上机改错题中常见的语法错误:(1) 丢失分号,或分号误写成逗号。(2) 关键字拼写错误,如本来小写变成大写。(3) 语句格式错误,例如for 语句中多写或者少写分号。(4) 表达式声明错误,例如:少了()(5..._关键字拼写错误,如把while写成whlie

计算机工作站机类型型号,Precision T3610 Desktop Workstation Hardware Specifications-程序员宅基地

文章浏览阅读433次。Precision T3610ManufacturerModelIntelIntel C602 ChipsetManufacturerModelsIntelSupports Single ProcessorIntel Xeon E5-1603 Processor (Quad Core, 2.8GHz Turbo, 10MB)Intel Xeon E5-1607 v2 Processor (..._precision t3610

mybatis 的 example 的 andGreaterThanOrEqualTo 和 andLessThanOrEqualTo-程序员宅基地

文章浏览阅读1.8w次。Example example = new Example(Notice.class); Example.Criteria criteria = example.createCriteria(); //当前时间 String currentDate = LocalDate.now().toString(); //时间检查 criteria.andGreaterThanOrEqualTo("noticeSt..._andgreaterthan

Python2.7 getattr()、setattr()以及hasattr()-程序员宅基地

文章浏览阅读550次。Python2.7 getattr()、setattr()以及hasattr()文章目录Python2.7 getattr()、setattr()以及hasattr()getattr()setattr()hasattr()总结getattr()>>> class A(object):... t=1... def test(self,a,b):... ..._python2.7 getattr

Ubuntu下安装Python的Tkinter和Pmw库_unbuntu pmw-程序员宅基地

文章浏览阅读2k次。在Linux下,如果需要编写界面应用,并且此界面应用对性能的要求不是很高,一般可以使用Python解决。Python中可以使用自带的Tkinter库或者是第三方的Wxpython库,当然Tkinter的移植性更好。 安装Tkinter非常简单,只需要输入下面命令即可:sudo apt-get install python-tk 即可安装成功Tkinter。 下_unbuntu pmw

推荐文章

热门文章

相关标签