通过反向代理frp实现rtsp远程访问

众所周知,RTSP协议只能在局域网进行播放,如果有公网访问的需求,第一种方法是申请互联网专线,但是价格高昂,第二种,也就是今天的主题,通过反向代理,将内网ip映射为公网,实时公网访问
本例服务端以腾讯云服务器(系统CentOS7.3),客户端以windows10,海康摄像头为例

服务端配置

登录腾讯云的控制台,进入服务器页面,添加防火墙规则”所有TCP允许访问”(实际生产环境可根据实际进行操作)
使用ssh工具登录云服务器,下载frp(版本0.49.0,很重要!客户端和服务端的版本请保持一致)

1
2
3
4
5
cd /home
wget https://github.com/fatedier/frp/releases/download/v0.49.0/frp_0.49.0_linux_arm64.tar.gz
tar -zxf frp_0.49.0_linux_arm64.tar.gz
cd frp_0.49.0_linux_arm64
ls

因为我们的服务器是用来作为frp服务端,所以我们需要使用的文件是fprs和frps.ini
使用vim等编辑器编辑frps.ini,输入如下内容

1
2
3
4
5
6
7
[common]
bind_port = 7000 #远程代理端口
token=123456 #验证令牌,用于客户端和服务端进行验证

dashboard_port=7500 #frp面板的端口
dashboard_user=admin #frp面板的账号
dashboard_pwd=admin #frp面板的密码

为了以后方便控制frps的启动和停止、配置后台运行和开机自启,可以使用systemd

1
yum install systemd

使用文本编辑器,如 vim 创建并编辑 frps.service 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vim /etc/systemd/system/frps.service

[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.ini

[Install]
WantedBy = multi-user.target

使用 systemd 命令,管理 frps

1
2
3
4
5
6
7
8
9
10
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps
#frps开机自启动
systemctl enable frps

至此服务端配置完成

客户端配置

根据操作系统下载对应的frp版本(0.49.0版本)

1
2
https://github.com/fatedier/frp/releases/download/v0.49.0/frp_0.49.0_windows_amd64.zip
#更多版本请查看:https://github.com/fatedier/frp/releases/tag/v0.49.0

下载解压后,进入frp的根目录,因为是客户端,我们需要使用的是frpc.exe和frpc.ini
编辑frpc.ini,输入以下内容

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 114.114.114.114 #服务器ip地址
server_port = 7000
token = 123456 #验证令牌,与服务端保持一致

[rtsp]
type = tcp #rtsp属于tcp协议
local_ip = 192.168.1.110 #摄像头的内网ip地址
local_port = 554 #内网rtsp的端口,默认为554
remote_port = 30000 #远程映射端口

然后通过cmd,进入frp的根目录,运行启动命令

1
frpc.exe -c frpc.ini

然后可以打开面板 http://114.114.114.114:7500 查看在线情况
至此客户端配置完成

公网地址转换

海康摄像头的本地rtsp流地址为 rtsp://admin:password@192.168.1.110:554
更详细的rtsp流地址获取方法可以使用onvif device manager
内网ip映射为公网ip即是 114.114.114.114
内网端口映射为公网端口即是 30000
所以我们得到的公网rtsp流地址是

1
rtsp://admin:password@114.114.114.114:30000

建议在转换前先使用VLC播放器测试本地流是否能正常播放
公网rtsp流地址可使用VLC,OBS等工具进行播放