有时外网想访问局域网的服务器,找运营商要公网IP还需要一笔费用,那有没有一种可行的有性价比的替代方案呢?答案是肯定的,网上有很多这类工具,一般称为内网穿透/反向代理工具。如:开源的ngrok和frp,还有些商业化的如natapp,nat123,花生壳等。下文介绍其中一种:frp,开源免费、且一直在更新,亲试可用。
什么是frp
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
中文文档
架构
frp使用案例
-
通过ssh访问公司内网机器
-
通过自定义域名访问部署于内网的web服务
-
转发DNS查询请求
-
转发Unix域套接字
-
对外提供简单的文件访问服务
-
为本地HTTP服务启用HTTPS
-
安全的暴露内网服务
-
点对点内网穿透
部署环境:
服务端:阿里云 CentOS 7 64位操作系统
客户端:Win10 64位操作系统
服务端部署
环境:CentOS 7 64位操作系统
根据对应的操作系统及架构,从
Release页面下载最新版本的程序。
1.下载安装包并解压
$ wget https://github.com/fatedier/frp/releases/download/v0.32.0/frp_0.32.0_linux_amd64.tar.gz
$ tar -zxvf frp_0.32.0_linux_amd64.tar.gz
解压后,目录中有如下文件,
其中,
frps/frps_full.ini/fprs.ini是服务端程序及配置文件,文件放在具有公网IP的机器上。
frpc/frpc_full.ini/fprc.ini是客户端程序及配置文件,文件放到处于内网环境的机器上。
systemd下注册成服务的配置文件。
2.服务端
在解压路径下拷贝frps文件到/usr/bin/
$cp frps /usr/bin/
在解压路径下拷贝frps.ini文件到/etc/frp/
$mkdir /etc/frp/
$cp frps.ini frps_full.ini /etc/frp/
设置systemd服务
拷贝./systemd/frps.service文件到/etc/systemd/system
$cp sytemd/frps.service /etc/systemd/system
管理frps服务
$systemctl daemon-reload //重新加载单元配置
$systemctl enable frps //启用frps服务
$systemctl start frps //启动frps服务
$systemctl restart frps //重启frps服务
$systemctl stop frps //停止frps服务
$systemctl status frps //查看frps服务状态
成功运行,查看状态
服务器防火墙设置
firewall-cmd --zone=public --add-port=2000-8000/tcp --permanent
firewall-cmd --reload
阿里云防火墙安装组规则-配置了2000到8000的范围。
frps.ini配置添加,支持工作台
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
访问:http://frps.com:7500/ 即可。
客户端部署
环境:Win10 64位操作系统
1.下载安装包
2.解压,树形结构与Linux版本一致。
3.配置客户端frpc.ini,如下
[common]
server_addr = 0.0.0.0//服务端IP
server_port = 7000//服务端通信端口
内网服务器配置,这边是内网服务器上ssh服务,类型是tcp,IP是本机,端口22
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
通讯服务应用,比如,车辆gps采集服务,类型是tcp,IP是本机,端口6500
[tcp6500]
type = tcp
local_ip = 127.0.0.1
local_port = 6500
remote_port = 6500
4.CMD运行客户端
cmd>frpc.exe -c frpc.ini
5.测试通讯服务应用
使用网络调试助手,模拟
通信应用服务端,监听本机6500端口,如下:
模拟客户端访问外网的通信服务应用,连接公网IP,6500端口,如下:
模拟客户端发送“hello 你好吗?”,
通信应用服务端成功收到外网映射端口来的“hello 你好吗?”
至此,TCP类型的内网穿透成功。
6.设置远程桌面
frpc.ini映射配置应用,名称为RDP
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6389
frpc启动后,正常无意外远程桌面即可连上。
7.客户端添加工作台支持
frpc.ini中添加
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
重启客户端
内网服务器,网页输入访问:
http://127.0.0.1:7400/,可以进行GUI热配置,这样不要每次后台修改.ini文件。
参考:
更多欢迎关注微信公众号:
【
阿尔法星电子】,科技爱好者,记录分享科技趣闻,创意DIY。