frp内网穿透

frp - 简单易用的内网穿透让你随时访问办公电脑- Hello World

官方文档:

官方项目地址:https://github.com/fatedier/frp

官方中文地址:https://github.com/fatedier/frp/blob/v0.33.0/README_zh.md

简介:

frp 是什么:frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp内网穿透

架构

frp内网穿透

使用示例

根据对应的操作系统及架构,从 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

frp内网穿透

一、中转服务端操作:

下载
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/

文件说明

frp内网穿透

frps.ini: 服务端配置文件
frps: 服务端软件
frpc.ini: 客户端配置文件
frpc: 客户端软件

删除客户端文件:

cd /usr/local/frp && rm frpc*

配置和使用

frp内网穿透

中转服务端配置(配置后记得把注释删除掉):

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

frp内网穿透

Dashboard:

配置DNS,访问:http://frp-server.ljh.cool:7500/

frp内网穿透

二:内网客户端配置

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/

frp内网穿透

测试:

通过 ssh 访问内网机器,假设用户名为root

ssh -oPort=6000 root@8.210.7.28

frp内网穿透

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

frp内网穿透

将A解析记录frp-agent1.ljh.cool解析到中转服务器IP上,通过浏览器访问frp-agent1.ljh.cool即可访问到处于内网机器上的 web 服务。

frp内网穿透
frp内网穿透
frp内网穿透

为本地 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类型并部署

frp内网穿透

查看注册情况并访问:

frp内网穿透
frp内网穿透

转发 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
frp内网穿透

检测:通过 dig 测试 UDP 包转发是否成功,预期会返回 www.google.com 域名的解析结果(国内结果解析IP是127.0.0.1)

dig @frp-server.ljh.cool -p 6000 www.google.com

frp内网穿透

对外提供简单的文件访问服务

通过 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
frp内网穿透
frp内网穿透

安全地暴露内网服务

对于某些服务来说如果直接暴露于公网上将会存在安全隐患。使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个 frpc。

启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:

frp内网穿透

在要访问这个服务的机器上启动另外一个 frpc,配置如下:

frp内网穿透

通过 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

(0)
上一篇 2022年4月11日 下午3:18
下一篇 2022年5月18日 上午1:04

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注