回到顶部

阅读目录

树莓派 + frp + 公网服务器,实现自定义域名内网穿透,暴露内网服务在公网(多 ssh, 多 web)

认识 FRP

FRP 是 Fast Reverse Proxy 的缩写,一款支持 TCP/UDP 快速反向代理的开源软件,可以很方便的内网穿透。和花生壳、Ngrok 等不同,FRP 客户端和服务端的控制权都在自己手中,这也意味着你需要准备一台有公网IP 的 VPS 运行服务端程序。

参考文档

FRP 公网服务器 配置

Linux VM_2_29_centos 3.10.0-514.26.2.el7.x86_64

下载对应版本:https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz

解压:

tar -zxvf frp_0.33.0_linux_amd64.tar.gz

移动到 /usr/local/frp:

mv frp_0.33.0_linux_amd64 /usr/local/frp

cd 到 /usr/local/frp:

cd /usr/local/frp

修改 frps.ini(云服务器要开放对应的端口,如我这使用的:7000 和 9000)

# common 公用/通用配置
[common]
# 监听 frpc 的端口,与客户端的 server_port 一致
bind_port = 7000
# 外网访问服务器的端口
vhost_http_port = 9000

对于域名访问:

只要将域名解析到公网服务的 IP 即可。

启动 frps.ini:

./frps -c ./frps.ini

加入开机启动:

sudo vi /etc/systemd/system/frps.service
# /etc/systemd/system/frps.service
[Unit]
Description=frps
After=network.target
[Service]
TimeoutStartSec=30
WorkingDirectory=/usr/local/frp
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 刷新服务
sudo systemctl daemon-reload
# 允许开机启动
sudo systemctl enable frps.service
# 运行服务
sudo systemctl start frps.service
# 查看状态
sudo systemctl status frps.service

FRP 树莓派端 配置

Linux raspberrypi 4.19.118-v7l+ #1311 SMP Mon Apr 27 14:26:42 BST 2020 armv7l GNU/Linux

下载对应版本:https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_arm.tar.gz

修改 frpc.ini(多 web):

# common 公用信息
[common]
# 公网服务器的 IP(假设为 193.112.50.149)
server_addr = 193.112.50.149
# 公网服务器监听的端口,与服务端的 bind_port 一致
server_port = 7000

# 本地 web 服务
[web]
# http 类型
type = http
# 本地 web 服务端口
local_port = 80
# 公网服务器的域名1
custom_domains = zhuoqun.info

# 本地 web 服务,中括号里的 web2 不能与前面同类的配置重名
[web2]
# http 类型
type = http
# 本地 web 服务端口
local_port = 8080
# 公网服务器的域名2(多级域名也可以),注意域名不要重复
custom_domains = python3.top

[ssh]
# type 请求协议
type = tcp
# 本地 ip
local_ip = 127.0.0.1
# 本地 ssh 端口
local_port = 22
# 外网请求过来的端口
remote_port = 6000

另外一台客户端机器启动 frpc 服务(未验证):

# common 公用信息
[common]
# 公网服务器的 IP(假设为 193.112.50.149)
server_addr = 193.112.50.149
# 公网服务器监听的端口,与服务端的 bind_port 一致
server_port = 7000

# 本地 web 服务
[web]
# http 类型
type = http
# 本地 web 服务端口
local_port = 80
# 公网服务器的域名
custom_domains = zhuoqun.info

# 本地 web 服务,中括号里的 web2 不能与前面同类的配置重名
[web2]
# http 类型
type = http
# 本地 web 服务端口
local_port = 8080
# 公网服务器的域名
custom_domains = python3.top

# 中括号里的 ssh2 不能与另外一台机器 ssh 配置重名(未验证)
[ssh2]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

启动 frpc.ini:

./frpc -c frpc.ini 

启动日志:

root@raspberrypi:/usr/local/frp# ./frpc -c frpc.ini 
2020/06/07 01:00:06 [I] [service.go:282] [cebc77f32bea36db] login to server success, get run id [cebc77f32bea36db], server udp port [0]
2020/06/07 01:00:06 [I] [proxy_manager.go:144] [cebc77f32bea36db] proxy added: [web ssh]
2020/06/07 01:00:06 [I] [control.go:179] [cebc77f32bea36db] [web] start proxy success
2020/06/07 01:00:06 [I] [control.go:179] [cebc77f32bea36db] [ssh] start proxy success

加入开机启动:

sudo vi /etc/systemd/system/frpc.service
# /etc/systemd/system/frpc.service
[Unit]
Description=frpc
After=network.target
[Service]
TimeoutStartSec=30
WorkingDirectory=/usr/local/frp
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 刷新服务
sudo systemctl daemon-reload
# 允许开机启动
sudo systemctl enable frpc.service
# 运行服务
sudo systemctl start frpc.service
# 查看状态
sudo systemctl status frpc.service

SSH 连接树莓派

IP 填写公网服务器的 IP: 193.112.50.149

端口填写 ssh 里面填的: 6000

访问 树莓派上的站点

域名 zhuoqun.info 解析到了公网服务器 IP 193.112.50.149 

浏览器访问的端口是 vhost_http_port 填的,即 9000 端口。

个人的:http://zhuoqun.info:9000/

注意事项

如果提示:-bash: ./frpc:无法执行二进制文件: 可执行文件格式错误

那可能是:下载的 tar 跟系统不匹配,如:使用了 arm64 位的包

 


^_^
请喝咖啡 ×

文章部分资料可能来源于网络,如有侵权请告知删除。谢谢!

前一篇: 树莓派安装 git, nginx, redis, supervisor, mariadb
下一篇: 树莓派启动 root 账户登录