自建内网穿透服务器

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文介绍了如何使用FRP实现内网穿透。首先准备一台具有公网IP的云服务器和一台内网服务器,接着在云服务器上安装Docker和FRP服务端,配置`frps.ini`文件并启动服务。在内网服务器上手动安装FRP客户端,配置`frpc.ini`文件并启动服务。最后通过FRP控制台验证连接状态,确保可以通过公网IP访问内网服务。

参考文档

基于Docker的FRP内网穿透部署

视频:B站

准备工作

  1. 一台轻量级云服务器,可以是腾讯云、阿里云、华为云等云厂商的,主要是能够获得一个公网IP;
  2. 一个内网服务器,比如旧电脑或者旧手机改装的;
  3. 配合 frp 来实现内网穿透

云服务器

我们以阿里云服务器为例,购买一个轻量级的云服务器 ECS,然后在上面安装 docker,安装教程后续会增加一个链接到这里。

安装好 docker 以后呢,我们要在云服务器上安装 frp 的服务端。步骤如下:

  1. 登录云服务器的 Workbench
  2. 创建存放目录:sudo mkdir /etc/frp
  3. 创建 frps.ini 配置文件:sudo vim /etc/frp/frps.ini
  4. 然后执行 docker run --restart=always --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

frps.ini内容如下:


[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板账号设置
dashboard_user = admin
dashboard_pwd = spoto1234
# 设置http及https协议下代理端口(非重要)
vhost_http_port = 7080
vhost_https_port = 7081
# 身份验证
token = 12345678


这里说一下这些配置项的作用:

  • bind_port:frp 服务器的监听端口,后续设置 frp 客户端(内网中转服务器),需要公网IP+端口访问 frp 服务;
  • dashboard_port:面板端口,是 frp 管理后台的一个端口,可以通过它来访问 frp 的管理页面;
  • dashboard_user:登录 frp 的账号;
  • dashboard_pwd:登录 frp 的密码:
  • vhost_http_port:在有域名绑定的情况下,访问一些页面的端口
  • vhost_https_port:同上
  • token:身份验证,如果没有这个验证的话,所有的 frp 客户端多可以连接你的服务端

记录:

  • 服务端 frps 访问地址:你的IP:7500/static/#/

内网服务器

AidLux 对外开放的 ssh 端口是 9022.

这里使用的是旧的安卓手机上安装的 AidLux 软件,里面的 Linux 是 debian,然后 apt 的源是华为云的。不过在我将要在这个上面安装 docker 的时候,发现没有 yum,所以这里我又得先安装一下 yum。


sudo apt install yum


然后不出意外的话,意外出现了,华为云的源缺少了一个 python 的啥东西,所以我需要先给 apt 换一个阿里云的源。

PS:个人认为阿里云的源资源是比较齐的

那如何换呢?参考以下步骤:

  1. 备份 apt 配置文件:cp /etc/apt/sources.list /etc/apt/sources.list.bak
  2. 编辑 apt 配置文件:vim /etc/apt/sources.list
  3. 替换里面的华为云地址为阿里云地址:实际上就是将域名上的 huaweicloud 替换为 aliyun 即可
  4. 然后保存退出后,更新软件列表:sudo apt-get update
  5. 最后更新软件包:sudo apt-get upgrade

完成上述操作后,再执行 sudo apt install yum就可以成功安装 yum 了。

安装 docker

比较艰辛,最靠谱的还是官网,参考 debian 安装 docker ,目前安装成功以后,报错了:

root@localhost:/home# docker version
Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:46:28 2023
 OS/Arch:           linux/arm64
 Context:           default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?


这是因为我们没有启动 docker 的原因,在 debian 中要启动 docker,需要的命令是:service docker start

手动安装 frp

离大谱了,目前只有企业版的 aidlux 可以支持安装 docker,准确的来说是让 docker 在手机上跑起来,个人版目前还不支持,而在手机上跑 docker 也是一个百年难题,所以使用 docker 来安装 frp 客户端的操作只能停下来,另辟蹊径了。

ecs 的 ssh 限制只能是 22;

最终选择放弃使用 docker 的方式,手动在服务端和客户端来配置 frp,最后一试,不行就算了。

  • 在客户端我们已经安装了 0.38.0 的 arm64 的 linux 版本
  1. home 目录下新建一个 frp 目录,然后进入到 frp 目录
  2. 再拉取 frp 的安装包:wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_arm64.tar.gz
  3. 对安装包进行解压 tar xvf frp_0.38.0_linux_arm64.tar.gz
  4. 进入到解压出来的目录中去,设置客户端命令 frpc 环境变量-即将 frps 放到 path 目录下:cp frpc /usr/bin/
  5. 然后建立存放配置文件的目录:mkdir /etc/frp
  6. 再将配置文件复制到对应的目录:cp frpc.ini /etc/frp
  7. 编辑对应的配置文件:vim /etc/frp/frpc.ini
  8. 最后一步把frpc.servicesystemd文件复制到/etc/systemd/system/目录下,这样我们就可以通过systemctl来设置启动和开启自启动了
  • 启动:systemctl start frpc
  • 重启:systemctl restart frpc
  • 开机自启动:systemctl enable frps
  • 停止:systemctl stop frps
  • 查看状态日志:systemctl status frps
  • 我们的 frpc.ini 配置文件的内容会变更一下
[common]
# server_addr为FRPS服务器IP地址
server_addr = 你的 ip 地址
# server_port为服务端监听端口,bind_port
server_port = 7000
# 用户
user = admin
# 身份验证
token = 你的自定义 token
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 9022
remote_port = 2289
[http]
type=tcp
local_ip = 127.0.0.1
local_port = 30818
remote_port = 2288
# [ssh] 为服务名称,下方此处设置为,访问frp服务段的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
# type 为连接的类型,此处为tcp
# local_ip 为中转客户端实际访问的IP 
# local_port 为目标端口
# remote_port 为远程端口
  • 我们也可以临时进行启动,在解压后的 frp 目录里执行 ./frpc -c /etc/frp/frpc.ini,会有对应的日志透出
  • 而云服务器是 amd64 架构的,所以这里需要安装 0.38.0-amd64 的 frp
  1. home 目录下新建一个 frp 目录,然后进入到 frp 目录
  2. 再拉取 frp 的安装包:wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
  3. 对安装包进行解压 tar xvf frp_0.38.0_linux_amd64.tar.gz
  4. 进入到解压出来的目录中去,设置服务端命令 frps 环境变量-即将 frps 放到 path 目录下:cp frps /usr/bin/
  5. 然后建立存放配置文件的目录:mkdir /etc/frp
  6. 再将配置文件复制到对应的目录:cp frps.ini /etc/frp
  7. 编辑对应的配置文件:vim /etc/frp/frps.ini
  8. 最后一步把frps.servicesystemd文件复制到/etc/systemd/system/目录下,这样我们就可以通过systemctl来设置启动和开启自启动了
  • 启动:systemctl start frps
  • 重启:systemctl restart frps
  • 开机自启动:systemctl enable frps
  • 停止:systemctl stop frps
  • 查看状态日志:systemctl status frps
  • 我们的 frps.ini 配置文件的内容还是不变的,在保存之后紧接着进行下一步
  • 我们也可以临时进行启动,在解压后的 frp 目录里执行 ./frps -c /etc/frps.ini,会有对应的日志透出

这里补充一下说明:

frps 这最后一个 s 代表 server 服务端,所以我们在服务端执行的是 frps 命令;

而 frpc 里的 c 就是 client 客户端,所以要在客户端执行 frpc 命令

当服务端 frps 和客户端 frpc 都启动时,打开我们的 frp 控制台,上面有链接,就可以看到下面的状态了:


这个时候我们去访问公网的 2288 端口就可以连到我们的内网服务器了,而使用 ssh 链接公网的 2289 也可以连到内网服务器的命令行(这里如果提示输入密码,记得输入内网服务器密码)。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
Linux
CentOS7.9服务器一键脚本部署FRP内网穿透服务端与客户端
CentOS7.9服务器一键脚本部署FRP内网穿透服务端与客户端
636 1
|
6月前
|
存储 网络协议 Ubuntu
Linux环境下的SVN服务器搭建并结合内网穿透实现远程连接
Linux环境下的SVN服务器搭建并结合内网穿透实现远程连接
232 0
|
2月前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
|
2月前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
|
3月前
|
网络协议 网络安全 网络架构
移动宽带不借助软件和公网服务器实现基于IPV6的内网穿透
本教程指导如何设置路由器以支持IPv6访问:首先确保上网方式为自动获取IP,接着在路由器设置中开启IPv6功能,并关闭可能阻碍连接的防火墙。最后,在光猫管理界面同样关闭防火墙以确保无障碍的IPv6访问路径。操作时请注意网络安全。
移动宽带不借助软件和公网服务器实现基于IPV6的内网穿透
|
4月前
|
弹性计算 网络协议 Linux
阿里云主机构建FRP内网穿透家用服务器避坑指南
详述了利用FRP工具搭建内网穿透的流程,包括阿里云ECS的配置、家用服务器的准备、FRP工具的下载与配置,以及通过SSH远程访问本地服务器的解决策略,确保了内外网间的稳定连接。
1112 1
阿里云主机构建FRP内网穿透家用服务器避坑指南
|
4月前
|
弹性计算 负载均衡 监控
云服务器 ECS产品使用问题之如何实现内网穿透
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
6月前
|
运维 监控 安全
2023年最详细的:本地Linux服务器安装宝塔面板,并内网穿透实现公网远程登录
2023年最详细的:本地Linux服务器安装宝塔面板,并内网穿透实现公网远程登录
283 1
|
6月前
|
网络协议 物联网 Linux
你不能不知道的:无公网IP,SSH远程连接CentOS服务器【内网穿透】
你不能不知道的:无公网IP,SSH远程连接CentOS服务器【内网穿透】
337 0
|
6月前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
127 2