官方文档:
官方项目地址:https://github.com/fatedier/frp
官方中文地址:https://github.com/fatedier/frp/blob/v0.33.0/README_zh.md
简介:
frp 是什么:frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
架构
使用示例
根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
安装:
操作前说明:
一台frp服务器在香港:
hk-frp-server
公网:8.210.7.28(自己申请服务器公网IP) 内网:10.0.5.67
frp-server.ljh.cool dns A解析到此公网IP,剩下的机器由本地的虚拟机实现内网联通,分别为frp-client01、frp-client02、frp-client03
一、中转服务端操作:
下载wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
解压tar -xvf frp_0.38.0_linux_amd64.tar.gz
移动至/usr/local
mkdir /usr/local/frp
mv frp_0.38.0_linux_amd64/* /usr/local/frp/
文件说明
frps.ini: 服务端配置文件
frps: 服务端软件
frpc.ini: 客户端配置文件
frpc: 客户端软件
删除客户端文件:
cd /usr/local/frp && rm frpc*
配置和使用
中转服务端配置(配置后记得把注释删除掉):
vi frps.ini
[common]
bind_port = 7000 #隧道端口,默认配置中监听的是 7000 端口,可根据自己实际情况修改。
subdomain_host = frp-server.ljh.cool #配置中转服务器域名绑定,可选配置,如果域名多可以设置一个
vhost_http_port = 80 #内网服务器http映射的端口,内网可以有多个网站使用这个端口
vhost_https_port = 443 #内网服务器https映射的端口,内网可以有多个网站使用这个端口
authentication_method = token #启用token验证,frpc也需要加此参数
token = 123 #token密码
dashboard_port = 7500 #配置Dashboard监控frp状态的端口,后面可以直接访问http://frp-server.ljh.cool:7500/或http://中转服务器公网IP:7500/
dashboard_user = admin #监控访问账户
dashboard_pwd = admin #监控访问密码
启动管理:
前台启动frps./frps -c ./frps.ini
后台启动
nohup ./frps -c ./frps.ini &
配置systemctl来控制,服务端运行
vim /usr/lib/systemd/system/frp.service
[Unit]
Description=The frps HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit
[Install]
WantedBy=multi-user.target
重新加载服务的配置文件systemctl daemon-reload
systemctl enable frp
systemctl start frp
systemctl status frp
Dashboard:
配置DNS,访问:http://frp-server.ljh.cool:7500/
二:内网客户端配置
1、通过 ssh 访问公司内网机器:本地虚拟机host1和host2作为ssh内网服务器,注册名为ssh-01,ssh-02
配置:
01内网服务器端:frpc.ini
[common]
server_addr = 8.210.7.28
server_port = 7000
token = 123
[ssh-01]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
02内网服务器端:frpc.ini
[common]
server_addr = frp-server.ljh.cool
server_port = 7000
token = 123
[ssh-02]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001
开启frpc服务,服务端查看注册状态
http://frp-server.ljh.cool:7500/
测试:
通过 ssh 访问内网机器,假设用户名为root
ssh -oPort=6000 root@8.210.7.28
2、通过自定义域名访问部署于内网的 web 服务:本地虚拟机host3作为http和https服务的测试机:
配置:
[common]
server_addr = frp-server.ljh.cool
server_port = 7000
token=123
[web1]
type = http
custom_domains = frp-agent1.ljh.cool
remote_port = 8000
local_ip = 127.0.0.1
local_port = 80
开启frpc服务,并安装一个nginx,页面进行标注
yum -y install nginx
vi /usr/share/nginx/html/index.html
将A解析记录frp-agent1.ljh.cool解析到中转服务器IP上,通过浏览器访问frp-agent1.ljh.cool即可访问到处于内网机器上的 web 服务。
为本地 HTTP 服务启用 HTTPS
通过 https2http 插件可以让本地 HTTP 服务转换成 HTTPS 服务对外提供
frpc.ini
[common]
server_addr = frp-server.ljh.cool
server_port = 7000
token=123
[https2http]
type = https
local_ip = 127.0.0.1
local_port = 443
custom_domains = frp-agent1.ljh.cool
plugin = https2http
plugin_local_addr = 127.0.0.1:80
# HTTPS 证书相关的配置
plugin_crt_path = /usr/local/frp/server.crt
plugin_key_path = /usr/local/frp/server.key
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp
frp-agent1.ljh.cool的证书需要下载nginx类型并部署
查看注册情况并访问:
转发 DNS 查询请求:
DNS 查询请求通常使用 UDP 协议,frp 支持对内网 UDP 服务的穿透,配置方式和 TCP 基本一致。
修改 frpc.ini 文件,设置 frps 所在服务器的 IP 为 x.x.x.x,转发到 Google 的 DNS 查询服务器 8.8.8.8 的 udp 53 端口(使用host1作为dns服务器):
[common]
server_addr = frp-server.ljh.cool
server_port = 7000
token = 123
[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6000
检测:通过 dig 测试 UDP 包转发是否成功,预期会返回 www.google.com 域名的解析结果(国内结果解析IP是127.0.0.1)
dig @frp-server.ljh.cool -p 6000 www.google.com
对外提供简单的文件访问服务
通过 static_file 插件可以对外提供一个简单的基于 HTTP 的文件访问服务。
使用host3(https://frp-agent1.ljh.cool/)作为https的文件访问服务域名
通过浏览器访问 http://frp-agent1.ljh.cool:8000/static/ 来查看位于 /tmp/file 目录下的文件,会要求输入已设置好的用户名和密码。
[common]
server_addr = frp-server.ljh.cool
server_port = 7000
token=123
[test_static_file]
type = tcp
remote_port = 8000
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = /usr/share/nginx/html
# 访问 url 中会被去除的前缀,保留的内容即为要访问的文件路径
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc
安全地暴露内网服务
对于某些服务来说如果直接暴露于公网上将会存在安全隐患。使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个 frpc。
启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:
在要访问这个服务的机器上启动另外一个 frpc,配置如下:
通过 ssh 访问内网机器,假设用户名为 test:ssh -oPort=6000 test@127.0.0.1
注:客户机secret_ssh对应配置:
[secret_ssh_visitor]
type = stcp
role = visitor
server_name = secret_ssh
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 6000
发布者:LJH,转发请注明出处:https://www.ljh.cool/5136.html