一、内网穿透缘由

我个人云服务器的配置不高,除了平时部署一些个人的应用,还会有一些工作上的服务测试,写文的一些应用部署测试,以及一些深度学习的模型,这导致了我的服务器长期处于一个io、cpu、total基本上都是爆开的一个状态。

升配置的话,费用感觉过高了,所以买了一台mini(四核N5095,基频为2.00 GHz,睿频为2.90 GHz,缓存为4 MBL3,内存8g,256GB-SSD,这配置对我来说已经很足够),装了deepin(为啥装deepin,主要是为了方便在家有时候可以进行简易的办公,deepin虽然还不是特别成熟,但是毕竟是基于linux,并且是国人习惯适配的还不错的系统,占用资源小,但是很多使用上都很方便)。

刚好这几天服务器就到期,续了一台超级乞丐版的服务器(主要是为了个公网ip),并且使用frp进行内网穿透。

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

二、内网穿透环境

1. 服务器端环境

A.frps搭建在华为云 centos8.2,外网地址为124.71.67.131
Linux hcss-ecs-031b 4.18.0-348.7.1.el8_5.x86_64 #1 SMP Wed Dec 22 13:25:12 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

B.frps版本为0.58.1
0.58.1的版本,已经从ini配置文件换成toml配置文件,据说连配置格式都改了,但是实测,改前的写法还能用,改后的写法反而有问题,那就先这样(能跑起来就行,有没有bug跟我有什么关系)

2. 服务器端环境

A.frpc搭建在我个人的mini,deepin社区预览版,内网地址为127.0.0.1
Linux HEJIAJIN-PC 6.6.25-amd64-desktop-hwe #23.01.00.25 SMP PREEMPT_DYNAMIC Wed Apr 10 21:20:25 CST 2024 x86_64 GNU/Linux

B.frpc版本也同为为0.58.1,建议使用同一版本。

3.frp参考

部署参考:https://gofrp.org/zh-cn/docs/
          https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml
          https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml
源包下载:https://github.com/fatedier/frp/releases

三、frps和frpc搭建

1. frps搭建
A.先下载传到华为云,解压到/opt目录
[root@hcss-ecs-031b opt]# tree ./frp_0.58.1_linux_amd64/
./frp_0.58.1_linux_amd64/
├── frpc
├── frpc.toml
├── frps
├── frps.log
├── frps.toml
└── LICENSE

解压后共6个文件,服务端只需要配置frps.toml,然后使用frps跑起来就行。

B.frps.toml参考文件配置
-----------------------------------------------
[common]
# frps监听的端口,默认为7000,建议改成别的端口
bind_port = 7000
# 授权码,建议改成更复杂的
token = 123456
# frps管理后台端口,请按自己需求更改
dashboard_port = 11011
# frps管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
# frps日志配置
# 日志路径
log_file = /opt/frp_0.58.1_linux_amd64/frps.log
# 日志记录等级,记录主要的就行
log_level = info
# 日志最大保留天数
log_max_days = 1
-----------------------------------------------

C.使用systemctl管理并且自启动frps

vim /usr/lib/systemd/system/frps.service
配置文件如下:其中路径ExecStart=/opt/frp_0.58.1_linux_amd64/frps -c /opt/frp_0.58.1_linux_amd64/frps.toml根据自己实际路径填写
-----------------------------------------------------------------------------------
[Unit]
Description=frps
After=network.target

[Service]
Type=simple
ExecStart=/opt/frp_0.58.1_linux_amd64/frps -c /opt/frp_0.58.1_linux_amd64/frps.toml
ExecStop=/bin/kill $MAINPID
Restart=always 
RestartSec=5

[Install]
WantedBy=multi-user.target
-----------------------------------------------------------------------------------

D.重新加载服务的配置文件
systemctl daemon-reload

E.设为开机自启动并且开启服务
systemctl enable frps && systemctl start frps

F.成功启动如下,警告不用管,意思是这个是ini的格式写法,未来会弃用,弃用了再说。
[root@hcss-ecs-031b opt]# systemctl status frps
● frps.service - frps
   Loaded: loaded (/usr/lib/systemd/system/frps.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2024-06-04 10:46:44 CST; 2s ago
  Process: 39569 ExecStop=/bin/kill $MAINPID (code=exited, status=0/SUCCESS)
 Main PID: 39571 (frps)
    Tasks: 5 (limit: 11427)
   Memory: 9.3M
   CGroup: /system.slice/frps.service
           └─39571 /opt/frp_0.58.1_linux_amd64/frps -c /opt/frp_0.58.1_linux_amd64/frps.toml

Jun 04 10:46:44 hcss-ecs-031b systemd[1]: frps.service: Succeeded.
Jun 04 10:46:44 hcss-ecs-031b systemd[1]: Stopped frps.
Jun 04 10:46:44 hcss-ecs-031b systemd[1]: Started frps.
Jun 04 10:46:44 hcss-ecs-031b frps[39571]: WARNING: ini format is deprecated and the support will be removed in the future, pleas>

G.去云服务器,把防火墙的11011打开,然后通过你的云服务器的公网ip:11011访问管理系统,输入账号密码即可登录。

2. frpc搭建

A.先下载传到deepin,解压到/opt目录
[root@hcss-ecs-031b opt]# tree ./frp_0.58.1_linux_amd64/
./frp_0.58.1_linux_amd64/
├── frpc
├── frpc.toml
├── frps
├── frps.log
├── frps.toml
└── LICENSE

解压后共6个文件,内网客户端只需要配置frpc.toml,然后使用frpc跑起来就行。

B.frpc.toml参考文件配置
------------------------------------
# 客户端配置
[common]
# server_addr = 云服务器ip
server_addr = 124.71.67.131
# 与frps.toml的bind_port一致
server_port = 7000
# 与frps.toml的token一致
token = 123456

# 配置ssh服务,这个用于之后访问内网的linux
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 这个自定义,之后再ssh连接的时候要用
remote_port = 6000

# 配置http服务
# 配置8079端口,此处作了个例子,之前的文章有一个docker应用music,用于获取周董的歌曲的,这会部署了并且通过frp映射到外网服务,之后需要配更多的服务的添加一个一下的配置即可,端口不要重复,防火墙记得加上对应的访问端口。
[tcp_music]
type = tcp
local_ip = 127.0.0.1
local_port = 8079
# 这是在服务端响应的端口
remote_port = 8079
------------------------------------

C.使用systemctl管理并且自启动frpc

vim /usr/lib/systemd/system/frpc.service
配置文件如下:其中路径ExecStart=/opt/frp_0.58.1_linux_amd64/frpc -c /opt/frp_0.58.1_linux_amd64/frpc.toml根据自己实际路径填写
-----------------------------------------------------------------------------------
[Unit]
Description=frpc
After=network.target

[Service]
Type=simple
ExecStart=/opt/frp_0.58.1_linux_amd64/frpc -c /opt/frp_0.58.1_linux_amd64/frpc.toml
ExecStop=/bin/kill $MAINPID
Restart=always 
RestartSec=5

[Install]
WantedBy=multi-user.target
-----------------------------------------------------------------------------------

D.重新加载服务的配置文件
systemctl daemon-reload

E.设为开机自启动并且开启服务
systemctl enable frpc && systemctl start frpc

F.成功运行如下

root@HEJIAJIN-PC:/opt/frp_0.58.1_linux_amd64# systemctl status frpc
● frpc.service - frpc
     Loaded: loaded (/usr/lib/systemd/system/frpc.service; enabled; preset: enabled)
     Active: active (running) since Tue 2024-06-04 10:44:27 CST; 17min ago
   Main PID: 21639 (frpc)
      Tasks: 7 (limit: 9187)
     Memory: 5.5M (peak: 7.3M)
        CPU: 1.830s
     CGroup: /system.slice/frpc.service
             └─21639 /opt/frp_0.58.1_linux_amd64/frpc -c /opt/frp_0.58.1_linux_amd64/frpc.toml

6月 04 10:45:30 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:45:30.743 [I] [proxy/proxy_manager.go:173] [28cbc11365bb8dfb] proxy added:>6月 04 10:45:30 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:45:30.754 [I] [client/control.go:168] [28cbc11365bb8dfb] [tcp_music] start>6月 04 10:45:30 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:45:30.754 [I] [client/control.go:168] [28cbc11365bb8dfb] [ssh] start proxy>6月 04 10:46:44 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:46:44.972 [I] [client/service.go:294] [28cbc11365bb8dfb] try to connect to>6月 04 10:46:44 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:46:44.983 [W] [client/service.go:297] [28cbc11365bb8dfb] connect to server>6月 04 10:46:46 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:46:46.994 [I] [client/service.go:294] [28cbc11365bb8dfb] try to connect to>6月 04 10:46:47 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:46:47.136 [I] [client/service.go:286] [28cbc11365bb8dfb] login to server s>6月 04 10:46:47 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:46:47.136 [I] [proxy/proxy_manager.go:173] [28cbc11365bb8dfb] proxy added:>6月 04 10:46:47 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:46:47.192 [I] [client/control.go:168] [28cbc11365bb8dfb] [tcp_music] start>6月 04 10:46:47 HEJIAJIN-PC frpc[21639]: 2024-06-04 10:46:47.192 [I] [client/control.go:168] [28cbc11365bb8dfb] [ssh] start proxy

G.去云服务器,把防火墙的7000、6000、8079打开,这会其实已经可以访问内网的linux,以及在浏览器上打开music的服务。

四、访问内网linux以及访问music服务

1.访问内网linux,通过终端工具访问,SecureCRTPortable、shell、Termius都可以,我比较喜欢用Termius。
ssh -p [端口号] [用户名]@[远程主机IP或主机名]
ssh -p 6000 root@公网ip,或者直接填写对应的登录信息,保存下来一键登录即可。

2.访问music服务
http://124.71.67.131:8079/
我这边做了一个nginx的转发
http://124.71.67.131/music/也可登录,nginx转发自己配一下就行