【内网穿透】通过frp将内网服务暴露到公网访问

一、简介

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

为什么使用 frp ?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

源码地址:https://github.com/fatedier/frp
官网文档:https://gofrp.org/docs/

二、准备

  • 一台具有公网IP服务器,以下简称服务端
  • 一台或若干台需要被外网访问的本地服务器,以下简称客户端

三、下载

下载地址:https://github.com/fatedier/frp/releases
打开找到我们要下载的版本,当前最新版为v0.42.0
在这里插入图片描述
根据自己需要,下载对应操作系统的版本

四、安装

frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。

我们将下载好的压缩文件上传到服务端和客户端服务器,window系统直接手动解压即可,我们主要介绍下linux解压。

解压

tar -zxvf frp_0.41.0_linux_amd64.tar.gz

重命名

mv frp_0.41.0_linux_amd64 frp

进入frp根目录

cd frp

五、配置

1.服务端基础配置

打开服务端服务器进入frp根目录,找到frps.ini进行配置。

[common]
bind_port = 19995
bind_addr = 0.0.0.0
token = 123456

[common] 是固定名称的段落,用于配置通用参数。

参数类型说明默认值可选值备注
bind_addrstring服务端监听地址0.0.0.0
bind_portint服务端监听端口7000接收 frpc 的连接
tokenstring鉴权使用的 token 值客户端需要设置一样的值才能鉴权通过

详细服务端配置参数请看官网文档:https://gofrp.org/docs/reference/server-configures/

2.客户端基础配置

打开客户端服务器进入frp根目录,找到frpc.ini(这里是frpc.ini不是frps.ini,不要搞混了哈)进行配置。

[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 19995
token = 123456
参数类型说明默认值可选值备注
server_addrstring连接服务端的地址0.0.0.0服务端的公网IP
server_portint连接服务端的端口7000
tokenstring鉴权使用的 token 值客户端需要设置一样的值才能鉴权通过

详细客户端配置参数请看官网文档:https://gofrp.org/docs/reference/client-configures/

3.启用监听仪表盘

打开服务端服务器进入frp根目录,找到frps.ini进行配置。

[common]
bind_port = 19995
bind_addr = 0.0.0.0
token = 123456

dashboard_user = admin
dashboard_pwd = 123456
dashboard_port = 9995
参数类型说明默认值可选值备注
dashboard_addrstring启用 Dashboard 监听的本地地址0.0.0.0
dashboard_portint启用 Dashboard 监听的本地端口0
dashboard_userstringHTTP BasicAuth 用户名
dashboard_pwdstringHTTP BasicAuth 密码

启用仪表盘后,我们通过浏览器访问公网ip:[dashboard_port],输入账户密码,可以看到我们的配置和访问统计信息,界面如下
在这里插入图片描述
在这里插入图片描述

4.TCP方式代理(mysql、oracle、ssh连接和远程桌面等)

TCP方式代理,无需进行服务端更改,我们只需要配置客户端即可,打开客户端服务器进入frp根目录,找到frpc.ini进行配置。

[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 19995
token = 123456

[2254]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2254

[2254] 是该代理名称,在整个代理中要唯一,不然启动会报名称被占用。按照上面的配置,我们可以通过远程工具,访问公网ip:[remote_port]即可连接到这台客户端服务器,相当于内网访问[local_ipt ]:[local_port ]

参数类型说明是否必须默认值可选值备注
typestring代理类型tcptcp, udp, http, https, stcp, sudp, xtcp, tcpmux
local_ipstring本地服务 IP127.0.0.1需要被代理的本地服务的 IP 地址,可以为所在 frpc 能访问到的任意 IP 地址
local_portint本地服务端口配合 local_ip
remote_portint服务端绑定的端口用户访问此端口的请求会被转发到 local_ip:local_port

详细客户端代理配置参数请看官网文档:https://gofrp.org/docs/reference/proxy/

其他示例
mysql

[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 3306

oracle

[orcl]
type = tcp
local_ip = xxx.xxx.xxx.xxx
local_port = 1521
remote_port = 1521

注:oraclelocal_ip 需要配置为内网ip,而不是默认的127.0.0.1,具体原因应该是oracle的监听问题,这里需要注意,如果其他代理出现了访问不到,也可以试下这样配置。

win远程桌面
我们在自己的windows客户端进行以下配置,然后启动frp,我们可以在别的电脑上使用公网ip:7789来远程桌面,这样我们就可以扔掉其他的远程软件了,简洁又快速,缺点就是一台电脑占用一个公网端口有点浪费了。。。

[mstsc]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7789

5.HTTP和HTTPS方式代理(web、gitlab、nexus等)

HTTPHTTPS方式代理,分为两种方式进行域名配置,custom_domainssubdomain 必须要配置其中一个,两者可以同时生效。custom_domains为全域名,服务端只需要配置HTTPHTTPS端口号(两者可只配一个,具体看使用情况),subdomain需要在服务端配置subdomain_host,即二级域名的后缀,例如服务端配置subdomain_hostmoonce.com,客户端配置subdomainabc,那么完整访问是abc.moonce.com,当然还要加上配置的端口号。

服务端
打开服务端服务器进入frp根目录,找到frps.ini进行配置。

[common]
bind_port = 19995
bind_addr = 0.0.0.0
token = 123456

subdomain_host = moonce.com
vhost_http_port = 9999
vhost_https_port = 9998
参数类型说明默认值可选值备注
subdomain_hoststring二级域名后缀
vhost_http_portint为 HTTP 类型代理监听的端口0启用后才支持 HTTP 类型的代理,默认不启用
vhost_https_portint为 HTTPS 类型代理监听的端口0启用后才支持 HTTPS 类型的代理,默认不启用

客户端
打开客户端服务器进入frp根目录,找到frpc.ini进行配置。

[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 19995
token = 123456

[gitlab]
type = http
local_port = 9999
subdomain = gitlab

[web]
type = http
local_port = 80
custom_domains = www.moonce.com

假设我们客户端地址是192.168.1.123,我们访问 www.moonce.com:9999时会被转发到本地的192.168.1.123:80,当我们访问 gitlab.moonce.com:9999会被转发到本地的192.168.1.123:9999上。

详细客户端代理配置参数请看官网文档:https://gofrp.org/docs/reference/proxy/

六、启动

1.linux服务端

nohup ./frps -c ./frps.ini &> frps.log &

查看日志

cat frps.log

2.linux客户端

打开客户端服务器进入frp根目录,执行命令

nohup ./frpc -c frpc.ini &> frpc.log &

查看日志

cat frpc.log

3.windows客户端

打开客户端服务器进入frp根目录,cmd执行命令

.\frpc.exe -c frpc.ini

关闭命令行即停止,需要做自动启动的可以通过nssm将命令做成服务,相关操作网上搜吧,挺简单的。

七、停止运行

使用ps查询进程号,然后kill杀死掉进程即可。

ps -aux | grep frp|grep -v grep
kill -9 xxxx
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫巳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值