这里写自定义目录标题
前景
有时想要让其他人通过域名访问或者测试我们在本地搭建的 web 服务,但是由于本地机器没有公网 IP,无法将域名解析到本地的机器,通过 frp 就可以实现这一功能。
frp是什么
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
架构
使用示例
本次使用 frp做内网穿透的小测试,作为测试环境使用,本文章仅做学习使用,若有疑问请在本文留言,
本次示例来源于github :https://github.com/fatedier/frp,
请关注 frp中文文档
准备:
软件下载:https://github.com/fatedier/frp/releases :
- frp_0.24.1_linux_amd64.tar.gz
- frp_0.24.1_windows_amd64.zip
涉及到的系统
服务器:CentOS Linux release 7.3.1611 (Core)
本地计算机:window10
文件存放
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
1. 修改服务器上 frps.ini 文件
设置 http 访问端口为 8080,该端口为外网访问的端口,记得防火墙和安全组都开放这个端口。
frps.ini内容如下:
[common]
bind_port = 7000
vhost_http_port = 8080
frps启动成功后标识如下:
2019/02/26 08:46:26 [I] [service.go:124] frps tcp listen on 0.0.0.0:7000
2019/02/26 08:46:26 [I] [service.go:166] http service listen on 0.0.0.0:8080
2019/02/26 08:46:26 [I] [root.go:204] Start frps success
2.服务器上启动 frps
启动命令如下:
./frps -c ./frps.ini
frps shell启动脚本记录
##! /bin/bash
## frp所在目录
SERVER=/opt/data/frp
cd $SERVER
start(){
echo "启动"
nohup ./frps -c frps.ini > frp.out 2>&1 &
echo $! > $SERVER/server.pid
echo "启动成功"
}
stop(){
echo "暂停"
if [ ! -d "$SERVER/server.pid" ]; then
kill `cat $SERVER/server.pid`
rm -rf $SERVER/server.pid
echo "暂停成功"
else
echo "没有进程可以杀死"
fi
}
restart(){
echo "开始重新部署"
stop
sleep 1
start
}
restart
3.修改本地frpc.ini 文件
假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 web 服务对应的端口, 绑定自定义域名 www.yourdomain.com:
frpc.ini内容如下
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
4.本地启动frpc
dos 命令行 启动 frpc:
frpc.exe -c frpc.ini
本地启动成功打印日志如下
2019/02/25 19:09:28 [I] [service.go:214] login to server success, get run id [4c598326abd6bdf2], server udp port [0]
2019/02/25 19:09:28 [I] [proxy_manager.go:137] [4c598326abd6bdf2] proxy added: [web]
2019/02/25 19:09:28 [I] [control.go:143] [web] start proxy success
服务器端相应打印日志如下
2019/02/25 19:09:30 [I] [service.go:317] client login info: ip [110.87.117.91:10341] version [0.24.1] hostname [] os [windows] arch [amd64]
2019/02/25 19:09:30 [I] [http.go:67] [4c598326abd6bdf2] [web] http proxy listen for host [www.yourdomain.com] location []
2019/02/25 19:09:30 [I] [control.go:397] [4c598326abd6bdf2] new proxy [web] success
5.通过域名访问
通过浏览器访问 http://www.yourdomain.com:8080 即可访问到处于内网机器上的 web 服务。
总结:
本例子使用的是域名来进行内网穿透,frp还有更多功能待研究。