树莓派建立个人网站(三):frp内网穿透实现外网访问

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

流程一览:

          • 一:实现方案
          • 二:frp的使用
            • 1. 准备工作
            • 2. 安装frp
            • 3. 访问方式(下方的域名可替换为公网IP地址)
            • 4. 树莓派上的frpc的开机启动
          • 三:注意事项
          • 四:参考博文

一:实现方案

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

  • 获得自家的公网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:代码统计系统

你可能感兴趣的:(个人网站,linux,服务器)