1.为什么需要使用内网穿透式的反向代理
它可以帮助我们完成两件事:1.帮我们把一个内网机器上的服务发布到外网上,这样在给用户演示的情况下很有用。2.在开发阶段,如果我们集成了某种需要回调的第三方服务,可以让我们很方便的调试回调功能是否正常。
可以实现内网反向代理的工具有很多,如:ngrok、lanproxy、goproxy、nps、frp。而我选择使用frp,原因是用了一圈后,发现它的配置比较简洁。
2.使用前提
一台有外网ip的主机,本例使用的centos 7.8,ip:123.45.56.78
如果需要使用域名访问web服务,还需要准备域名,如本次示例:mm.agent.ztimage.com,并指向123.45.56.78
frp程序文件:https://github.com/fatedier/frp/releases,本次使用的版本 v0.34.3
2.服务端设置
下载并解压
# wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
# tar -zxvf -C /usr/local/frp frp_0.34.3_linux_amd64.tar.gz
配置 frps.ini (windows和linux版的配置是一样的)
[common]
bind_addr = 0.0.0.0 #绑定的服务IP
bind_port = 18080 #frp服务端口
dashboard_port = 10001 #frp统计web 端口,访问此端口可以查看frp的各种指标和信息
dashboard_user = goodboy #统计web的登录用户名
dashboard_pwd = 123456 #统计web的密码
vhost_http_port = 10002 #使用web转发时,服务端监听的端口号
max_pool_count = 50 #最大提供转发的数量
token = imgoodboy #客户端连接时需要提供的token,也可以不设置
运行
# ./frps -c frps.ini
3.客户端设置
配置 frqc.ini (windows和linux配置是一样的)
[common]
server_addr = 123.45.56.78 #服务器ip
server_port = 18080 #frq服务端口号
token = imgoodboy #服务器端需要的token,如果服务端不需要,这个可以不设置
[ssh]
type = tcp #转发协议
local_ip = 127.0.0.1 #本地提供ssh服务的ip
local_port = 22 #本地提供ssh服务的端口
remote_port = 10003 #远程服务器所监听的端口
[web01]
type = http #转发类型
local_port = 5000 #转发至本地那个端口
custom_domains = mm.agent.ztimage.com #访问域名
运行
# ./frpc -c frpc.ini
在本实例中提供了两种数据的转发
ssh:当访问 “123.45.56.78:1003"时,会转发至本地 22端口上
web01: 当访问 ”mm.agent.ztimage.com:10002“时,会转发至本地5000端口
4.开机启动
本示例是将 客户端设为开机启动,服务端同理,只需更改ExecStart参数即可。
新增systemd unit配置文件 frp.service ,放在位置/usr/lib/systemd/system或/lib/systemd/system
[Unit]
Description=frp service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
# systemctl enable frp.service #设为开机启动
# systemctl daemon-reload #重载服务配置
# systemctl start frp.service #启动frp服务