基于http+域名的Frp内网穿透教程(Linux)

6 篇文章 0 订阅
3 篇文章 0 订阅

在自建服务器过程中,内网穿透是十分重要的一环,可以将内网服务暴露到公网。
我在文章:私有云服务器搭建教程(保姆级)——台式电脑+ubuntu+docker+nextcloud+mysql+花生壳内网穿透 中提到通过花生壳完成内网穿透的实现。相对于花生壳,frp是一种性价比更好的内网穿透方式。
Frp作为内网穿透的常见手段,其前提条件是:一台配有公网Ip的云服务器(我的是阿里云)以及一个域名(非必须)。
云服务器系统:Alibaba Cloud Linux + 内网服务器系统:Ubuntu 22.04.1 LTS


前言

本文主要讲解 Alibaba Cloud Linux 上搭建Frp内网穿透服务的流程。
云服务器系统版本:Alibaba Cloud Linux 3.2104 LTS 64位 (兼容Centos);私网物理服务器操作系统:Ubuntu 22.04.1 LTS。
网上frp教程很多,其中不乏很多高质量的教程,对我自己在搭建Frp内网穿透过程中有很大帮助。但,每个人踩的坑并不相同,我踩了两个坑。故,在此做一下记录。如果能帮助到你,那是我的荣幸~


一、frp介绍

frp中文文档

1.frp 是什么?

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

2.为什么使用 frp?

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

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

二、Alibaba Cloud Linux介绍

随着 CentOS 的停止维护,Alibaba Cloud Linux 成了一个替换方案。
Alibaba Cloud Linux 文档

Alibaba Cloud Linux是阿里云基于龙蜥社区(OpenAnolis)的龙蜥操作系统(Anolis OS)打造的操作系统发行版,在兼容RHEL/CentOS生态的同时,为云上应用程序提供安全、稳定、高性能的定制化运行环境,并针对云基础设施进行了深度优化。

总的来说,Alibaba Cloud Linux兼容CentOS,CentOS上的命令,在Alibaba Cloud Linux同样可以运行。

三、安装前的准备:局域网(私网)物理服务器、公网云服务器及域名解析设置

1.局域网(私网)物理服务器配置

我这里,在内网服务器上已经搭建起了一个服务。现在我需要的就是通过内网穿透,将内网服务器的9001端口,暴露到公网上去。
在这里插入图片描述

2.公网云服务器设置

我购买了一台阿里云服务器ESC。本文的公网ip我们用47.99.x.x表示。
在这里插入图片描述

四、公网云服务器(Alibaba Cloud Linux)安装Frps 服务

1. 安装Frps

先去GitHub查看frp的最新版本 。找到适配自己系统的安装包。这里我选择:frp_0.44.0_linux_amd64.tar.gz。
在这里插入图片描述

下载安装包

wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz

在这里插入图片描述
解压

tar zxf frp_0.44.0_linux_amd64.tar.gz

移动至 /usr/local
在/usr/local/下创建一个frp文件夹。/usr/local目录类似于windows系统的C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。

mkdir /usr/local/frp

将frp_0.44.0_linux_amd64移动到 /usr/local/frp 里面

mv frp_0.44.0_linux_amd64/* /usr/local/frp/

进入文件夹

cd /usr/local/frp/

列表显示根目录下的文件

ls

在这里插入图片描述
frps就是frp server端的部分;frpc 是frp client端的部分。这里我们只需要关心Server端。
这里我们可以直接删掉frpc、frpc_full.ini、frpc.ini三个文件,节省硬盘空间

find . -name 'frpc*' -exec rm {} \;

在这里插入图片描述

修改配置文件:frps.ini

vi frps.ini 

键入【i】,修改内容如下:

[common]
# frp server 绑定的端口
bind_port = 7000 
# 设置 http 访问端口为 80
vhost_http_port = 80
# 设置域名(保证此域名可用;我们假设你的域名为【subdomain.yourdomain.com】)
subdomain_host = yourdomain.com

【bind_port】:frp客户端连接服务端的端口
【vhost_http_port】:是http访问的端口(外网端口)。我这里设置成80端口。也就是说,在配置正确的前提下,外网可以通过浏览器直接访问【http://47.99.x.x】访问内网服务。
【subdomain_host】:你的一级域名。我们假设你的域名为:【subdomain.yourdomain.com】。【subdomain】是二级域名,【yourdomain.com】是一级域名。如果不需要用到域名则不需要配置此项。

[注意]:
建议1:不要加注释。我在配置ini的时候,加了注释好像会报错。
建议2:新手建议只设置这两个,设置越多越容易出错。建议走通后再慢慢改。

修改完成后。按下Esc退出编辑模式。然后输入:wq保存并退出。

启动frps

./frps -c frps.ini 

在这里插入图片描述

2. 设置Frps 服务开机自启

创建后台启动模版

vim /usr/lib/systemd/system/frp.service

设置启动模版内容

[Unit]
Description=The nginx 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 套装来控制 frp 了。

对frp服务的启动/停止/重启,查看状态,设置开机自启/关闭开机自启

systemctl start frp
systemctl stop frp
systemctl restart frp
systemctl status frp
systemctl enable frp
systemctl disable frp

这里我们设置frp开机自启,只需要运行 systemctl enable frp 这句命令。

重启服务器

reboot

重启后查看frpc的状态

systemctl status frp

在这里插入图片描述
Loaded:loaded Active:active (running) 就说明开机自启成功。

3. 阿里云服务器ESC添加安全组入站规则

云服务器的防火墙需要在云控制台设置。
云服务器ECS->实例->实例详情->安全组->配置规则
在这里插入图片描述
添加入站规则
我们这里添加:7000(frp端口)、80(http默认端口)、443(https默认端口)三个端口
在这里插入图片描述

五、内网服务器(ubuntu)安装Frp Client端

1. 安装Frpc

下载安装包

wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz

在这里插入图片描述
解压

tar zxf frp_0.44.0_linux_amd64.tar.gz

移动至 /usr/local
同样在/usr/local/下创建一个frp文件夹。

sudo mkdir /usr/local/frp

在这里插入图片描述

将frp_0.44.0_linux_amd64移动到 /usr/local/frp 里面

sudo mv frp_0.44.0_linux_amd64/* /usr/local/frp/

在这里插入图片描述

进入文件夹

cd /usr/local/frp/

在这里插入图片描述

列表显示根目录下的文件

ls

在这里插入图片描述

frpc 是frp client端的部分。

修改配置文件:frpc.ini

vi frpc.ini 

修改frpc.ini

[common]
server_addr = 47.99.x.x			
server_port = 7000

[web]
type = http
local_port = 9001
custom_domains = 47.99.x.x

[subdomain]
type = http
# 本地 web server 端口
local_port = 9001 
# 二级域名名称, 如:www
subdomain = subdomain

【server_addr】:frps云服务的公网ip地址,这里的47.99.x.x是我购买的云服务器ECS的公网ip
【server_port】:frps云服务的端口
【type】:请求类型,建议用http,https需要证书。
【local_port】:本地服务器需要暴露到公网上的服务端口
【custom_domains】:自定义域名。必须设置。建议新手先直接用ip。设置成功之后再改域名。用域名的话还需要配置域名解析和域名备案。
[注意]:
建议1:不要加注释。我在配置ini的时候,加了注释好像会报错。
建议2:新手建议只设置这5项,设置越多越容易出错。建议走通后再慢慢改。

启动frpc

./frpc -c frpc.ini

在这里插入图片描述

login to server successs:成功登录到服务端。
[web]start proxy success:启动[web]协议成功。

2. 设置Frpc 服务开机自启

进入到存放开机自启文件的路径:

cd /etc/systemd/system

新建名为frpc的.service文件:

sudo touch frpc.service

编辑上一步新建的文件:

sudo vim frpc.service

然后将下面的代码粘贴进去(先按i键,进入编辑模式,然后点击鼠标右键粘贴):

[Unit]
Description=Frp Client Service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/bin/bash -c '/usr/local/frp/frpc -c /usr/local/frp/frpc.ini'

[Install]
WantedBy=multi-user.target

注意frpc 和 frpc.ini 的路径,可以根据自己的实际情况修改。

设置开机自启:

sudo systemctl enable frpc

在这里插入图片描述

重启服务器

reboot

重启后查看frps的状态

sudo systemctl status frpc

在这里插入图片描述

Loaded:loaded Active:active (running) 就说明开机自启成功。

六 点亮效果

frps 和 frpc 打通后,就可以在互联网上通过公网ip访问:我这里是47.99.x.x。
在这里插入图片描述

七 踩坑记录

如果,客户端的frpc.ini 里的 custom_domains设置成域名。而你的域名刚好还没备案就会出现下面这个页面。2021年以后,这个阿里云上每一个域名都需要备案。你有两个选择:1:、乖乖备案域名;2、不使用域名,只是用公网ip进行内网穿透。
备案域名需要几个工作日,所以本教程使用公网ip进行内网穿透,必过域名备案步骤。
在这里插入图片描述

总结

到此,Alibaba Cloud Linux 搭建Frp内网穿透成功。希望本教程对你有所帮助。

参考链接:

CentOS下搭建Frp内网穿透服务
Alibaba Cloud Linux 文档
frp中文文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

切糕师学AI

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

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

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

打赏作者

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

抵扣说明:

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

余额充值