使用 frp 内网穿透访问内网 Web 服务(超详细)

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

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

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

首先,在 frp官网 查看最新 Release 版本号,截至本文发布,最新版本号为 0.36.2,下面以此为例讲解

下问题提及的服务端和客户端分别代指:

  • 服务端:拥有公网 IP 的服务器主机
  • 客户端:在内网中搭载有 Web 服务的主机

由于不同处理器架构所需的安装包不同,下载之前务必通过arch命令确认处理器架构,并下载对应版本的安装包

在用户目录下运行如下命令下载最新软件包(此处以amd64版本为例)

<span class="token function">wget</span> https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
<span class="token function">wget</span> https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz 
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz

执行命令将其解压

<span class="token function">tar</span> -zxvf frp_0.36.2_linux_amd64.tar.gz
<span class="token function">tar</span> -zxvf frp_0.36.2_linux_amd64.tar.gz 
tar -zxvf frp_0.36.2_linux_amd64.tar.gz

将解压后的文件夹将其重命名为 frp

<span class="token function">mv</span> frp_0.36.2_linux_amd64 frp
<span class="token function">mv</span> frp_0.36.2_linux_amd64 frp 
mv frp_0.36.2_linux_amd64 frp

打开目录

<span class="token function">cd</span> frp
<span class="token function">cd</span> frp 
cd frp

打开 frp 目录下的frps.ini,如下方所示进行配置

<span class="token punctuation">[</span>common<span class="token punctuation">]</span> bind_port <span class="token operator">=</span> <span class="token number">7000</span> <span class="token punctuation">(</span>之后与客户端连接所用端口,默认不变即可<span class="token punctuation">)</span> dashboard_port <span class="token operator">=</span> <span class="token number">7500</span> <span class="token punctuation">(</span>frp可视化面板访问端口<span class="token punctuation">)</span> dashboard_user <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span>此处填写面板登录用户名<span class="token punctuation">}</span> dashboard_pwd <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span>此处填写面板登陆密码<span class="token punctuation">}</span> vhost_http_port <span class="token operator">=</span> <span class="token number">8080</span> <span class="token punctuation">(</span>如果服务器上<span class="token number">8080</span>端口已被占用,可随意修改为其他空闲端口<span class="token punctuation">)</span>
<span class="token punctuation">[</span>common<span class="token punctuation">]</span> bind_port <span class="token operator">=</span> <span class="token number">7000</span> <span class="token punctuation">(</span>之后与客户端连接所用端口,默认不变即可<span class="token punctuation">)</span> dashboard_port <span class="token operator">=</span> <span class="token number">7500</span> <span class="token punctuation">(</span>frp可视化面板访问端口<span class="token punctuation">)</span> dashboard_user <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span>此处填写面板登录用户名<span class="token punctuation">}</span> dashboard_pwd <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span>此处填写面板登陆密码<span class="token punctuation">}</span> vhost_http_port <span class="token operator">=</span> <span class="token number">8080</span> <span class="token punctuation">(</span>如果服务器上<span class="token number">8080</span>端口已被占用,可随意修改为其他空闲端口<span class="token punctuation">)</span> 
[common] bind_port = 7000 (之后与客户端连接所用端口,默认不变即可) dashboard_port = 7500 (frp可视化面板访问端口) dashboard_user = {此处填写面板登录用户名} dashboard_pwd = {此处填写面板登陆密码} vhost_http_port = 8080 (如果服务器上8080端口已被占用,可随意修改为其他空闲端口)

保存并退出

注意,务必将上述三个端口添加到防火墙白名单

打开 frp 目录下的frpc.ini,如下方所示进行配置

<span class="token punctuation">[</span>common<span class="token punctuation">]</span> server_addr = <span class="token punctuation">{<!-- --></span>此处填写服务端的公网IP<span class="token punctuation">}</span> server_port = 7000 (服务端设置的连接用端口) <span class="token punctuation">[</span>web<span class="token punctuation">]</span> type = http local_ip = 127.0.0.1 local_port = <span class="token punctuation">{<!-- --></span>此处填写本地 Web 服务所在端口<span class="token punctuation">}</span> custom_domains = <span class="token punctuation">{<!-- --></span>此处填写服务端的公网IP或域名<span class="token punctuation">}</span>
<span class="token punctuation">[</span>common<span class="token punctuation">]</span> server_addr = <span class="token punctuation">{<!-- --></span>此处填写服务端的公网IP<span class="token punctuation">}</span> server_port = 7000 (服务端设置的连接用端口) <span class="token punctuation">[</span>web<span class="token punctuation">]</span> type = http local_ip = 127.0.0.1 local_port = <span class="token punctuation">{<!-- --></span>此处填写本地 Web 服务所在端口<span class="token punctuation">}</span> custom_domains = <span class="token punctuation">{<!-- --></span>此处填写服务端的公网IP或域名<span class="token punctuation">}</span> 
[common] server_addr = {此处填写服务端的公网IP} server_port = 7000 (服务端设置的连接用端口) [web] type = http local_ip = 127.0.0.1 local_port = {此处填写本地 Web 服务所在端口} custom_domains = {此处填写服务端的公网IP或域名}

保存并退出

使用如下命令后台静默启动 frp

<span class="token function">nohup</span> ~/frp/frps -c ~/frp/frps.ini <span class="token operator">&</span>
<span class="token function">nohup</span> ~/frp/frps -c ~/frp/frps.ini <span class="token operator">&</span> 
nohup ~/frp/frps -c ~/frp/frps.ini &

如要关闭,使用ps aux查看进程号,使用kill即可关闭

使用如下命令后台静默启动 frp

<span class="token function">nohup</span> ~/frp/frpc -c ~/frp/frpc.ini <span class="token operator">&</span>
<span class="token function">nohup</span> ~/frp/frpc -c ~/frp/frpc.ini <span class="token operator">&</span> 
nohup ~/frp/frpc -c ~/frp/frpc.ini &

如要关闭,使用ps aux查看进程号,使用kill即可关闭

服务开启后,在任意浏览器访问 URL:http://服务端公网IP:7500,输入用户名和密码,即可打开可视化面板

服务开启后,在任意浏览器访问 URL:http://服务端公网IP:8080,即可访问客户端 Web 服务

使用如下命令创建 frp 服务文件

<span class="token function">sudo</span> vim /etc/systemd/system/frp.service
<span class="token function">sudo</span> vim /etc/systemd/system/frp.service 
sudo vim /etc/systemd/system/frp.service

在其中填写下列内容

<span class="token punctuation">[</span>Unit<span class="token punctuation">]</span> Description=frp startup script After=network.target After=systemd<span class="token punctuation">-</span>user<span class="token punctuation">-</span>sessions.service After=network<span class="token punctuation">-</span>online.target <span class="token punctuation">[</span>Service<span class="token punctuation">]</span> (在服务端填写下面这一行) ExecStart=/home/<span class="token punctuation">{<!-- --></span>此处替换为你的用户名<span class="token punctuation">}</span>/frp/frps <span class="token punctuation">-</span>c /home/<span class="token punctuation">{<!-- --></span>此处替换为你的用户名<span class="token punctuation">}</span>/frp/frps.ini (在客户端填写下面这一行) ExecStart=/home/<span class="token punctuation">{<!-- --></span>此处替换为你的用户名<span class="token punctuation">}</span>/frp/frpc <span class="token punctuation">-</span>c /home/<span class="token punctuation">{<!-- --></span>此处替换为你的用户名<span class="token punctuation">}</span>/frp/frpc.ini <span class="token punctuation">[</span>Install<span class="token punctuation">]</span> WantedBy=multi<span class="token punctuation">-</span>user.target
<span class="token punctuation">[</span>Unit<span class="token punctuation">]</span> Description=frp startup script After=network.target After=systemd<span class="token punctuation">-</span>user<span class="token punctuation">-</span>sessions.service After=network<span class="token punctuation">-</span>online.target <span class="token punctuation">[</span>Service<span class="token punctuation">]</span> (在服务端填写下面这一行) ExecStart=/home/<span class="token punctuation">{<!-- --></span>此处替换为你的用户名<span class="token punctuation">}</span>/frp/frps <span class="token punctuation">-</span>c /home/<span class="token punctuation">{<!-- --></span>此处替换为你的用户名<span class="token punctuation">}</span>/frp/frps.ini (在客户端填写下面这一行) ExecStart=/home/<span class="token punctuation">{<!-- --></span>此处替换为你的用户名<span class="token punctuation">}</span>/frp/frpc <span class="token punctuation">-</span>c /home/<span class="token punctuation">{<!-- --></span>此处替换为你的用户名<span class="token punctuation">}</span>/frp/frpc.ini <span class="token punctuation">[</span>Install<span class="token punctuation">]</span> WantedBy=multi<span class="token punctuation">-</span>user.target 
[Unit] Description=frp startup script After=network.target After=systemd-user-sessions.service After=network-online.target [Service] (在服务端填写下面这一行) ExecStart=/home/{此处替换为你的用户名}/frp/frps -c /home/{此处替换为你的用户名}/frp/frps.ini (在客户端填写下面这一行) ExecStart=/home/{此处替换为你的用户名}/frp/frpc -c /home/{此处替换为你的用户名}/frp/frpc.ini [Install] WantedBy=multi-user.target

保存并退出

设置其权限为775

<span class="token function">sudo</span> <span class="token function">chmod</span> 775 /etc/systemd/system/frp.service
<span class="token function">sudo</span> <span class="token function">chmod</span> 775 /etc/systemd/system/frp.service 
sudo chmod 775 /etc/systemd/system/frp.service

输入如下命令使 frp 服务开机启动

<span class="token function">sudo</span> systemctl <span class="token function">enable</span> --now frp
<span class="token function">sudo</span> systemctl <span class="token function">enable</span> --now frp 
sudo systemctl enable --now frp

原文链接:https://blog.csdn.net/weixin_43681778/article/details/116204099

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享