使用Frp和云服务器实现内网穿透

使用Frp和云服务器实现内网穿透

使用Frp和云服务器实现内网穿透

准备SSH客户端

可以下载一个FinalShell

下载链接:https://wwbum.lanzoue.com/iI9iD3e6tp9c

密码:9n4e

准备云服务器

先去阿里云、腾讯云、火山引擎等各家云平台买个符合自己要求的云服务器,下面我将使用阿里云演示

云服务器选择ubuntu系统

image-20251221225536918

连接服务器

打开FinalShell,连接服务器

image-20251221225845498

安装宝塔面板(可跳过)

在FinalShell中输入下方命令安装宝塔面板

1
wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && sudo bash install_panel.sh ssl251104

到这里,输入一个y,然后按回车

image-20251221230748547

安装好后如图

image-20251221231401544

现在直接访问给出的地址是访问不到的,需要先回到阿里云放行对应端口(也可以直接在服务器防火墙添加规则,不用一定和我一样)

image-20251221231838847

创建后点击操作里的应用至实例,然后再访问就可以了,输入命令行中给出的用户名和密码

image-20251221232107543

进入后选择绑定服务器,再之后会跳出推荐配置,根据自己买的服务器配置选择是否安装

下载Frp

Frp的github下载地址:[Releases · fatedier/frp](https://github.com/fatedier/frp)

我的电脑是Window系统,所以分别下载frp_0.65.0_linux_amd64.tar.gzfrp_0.65.0_windows_amd64.zip,分别用于服务器和本地电脑

image-20251221230457380

下载后解压压缩包,其中frpc表示客户端,frps表示服务端

所以可以把linux文件夹中除了frps和frps.toml外的内容都删了,windows文件夹中除了frpc.exe和frpc.toml外的内容都删了

Linux

在linux的文件夹中创建一个start.sh文件,其中如下填写

1
./frps -c ./frps.toml

然后打开frps.toml文件,如下编写

1
2
3
4
5
6
7
bindPort = 7000

# 下面是图形化页面
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin" # 账号密码可以按自己喜欢填
webServer.password = "123456"

然后在FinalShell中root目录下创建一个文件夹,可以取名为frp,然后将三个文件拖进去(应该是start.sh,图中我写错了,别写成bat文件了)

image-20251221234216241

然后分别执行下方命令:

1
2
3
4
5
6
7
8
# 进入刚刚创建的目录
cd /root/frp

# 赋予读写执行权限
chmod 777 /root/frp/*

# 运行脚本
./start.sh

然后同样去阿里云放行7000和7500端口,还要去宝塔控制台里也放行这两个端口,然后访问在电脑浏览器中服务器公网ip:7500

image-20251221234949463

嫌麻烦也可以直接关掉宝塔的防火墙

image-20251221235548017

这里的用户名和密码就是前面在frps.toml文件中编写的

登录后页面如下

image-20251221235640297

Windows

打开windows文件夹里的frpc.toml,将第一个serverAddr的值改为服务器的公网ip,其他先不动

1
2
3
4
5
6
7
8
9
serverAddr = "你服务器的公网ip"
serverPort = 7000

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

然后编写一个start.bat脚本,内容为:

1
2
frpc -c frpc.toml
pause # 运行成功时不影响,失败时不会自动关闭窗口

双击执行

image-20251222121254147

如图说明已经成功实现内网穿透了

配置穿透端口

以我的本地博客为例,修改frpc.toml的内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
serverAddr = "106.14.144.133"
serverPort = 7000

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

[[proxies]]
name = "web" # 名字不能重复
type = "tcp"
localIP = "127.0.0.1" # 本地ip地址,不用动
localPort = 1313 # 本地需要穿透的端口,我的博客的端口就是1313
remotePort = 1313 # 本地端口映射到服务器的端口

配置后重启脚本,打开frp的控制台,如图说明配置成功

image-20251222122808174

测试:

本地运行我的博客:

image-20251222122937853

不使用localhost而是使用服务器公网ip尝试访问

image-20251222122847302

发现可以使用服务器ip访问

配置其他端口类似

更详细的配置可以看frp的Github官方文档:Releases · fatedier/frp

服务器后台自动运行

关闭FinalShell发现内网穿透就失效了,可以在云服务器上安装一个screen后台运行

重新打开FinalShell,运行下面命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 安装screen
apt install screen

# 创建一个新screen会话
screen -S frp # frp是自定义screen会话名,可以自己取名字

# 在新会话中进入/root/frp目录
cd /root/frp

# 执行frp脚本
./start.sh

# 退出会话,回到原本的控制台
exit # 脚本运行时无法输入,可以使用快捷键Ctrl + A + D

现在即使关闭FinalShell,frp脚本也依旧会在服务器运行

关闭

当然,也可以关闭

重新打开FinalShell,输入下方命令

1
2
3
4
5
# 查看screen会话
screen -ls

# 进入创建的screen会话
screen -r 会话名或id

image-20251222124504815

图中588666为会话id,frp为会话名,输入其中一个即可进入会话,当然输入完整也行

进入后使用快捷键Ctrl + C关闭frp服务

如果要关闭会话可以执行下方命令

1
2
3
4
5
6
7
8
# 通过会话名关闭
screen -S 会话名 -X quit

# 或通过会话ID关闭
screen -S 会话ID -X quit

# 强制关闭无响应的会话
screen -wipe 会话名/ID
本站于2025年3月26日建立
使用 Hugo 构建
主题 StackJimmy 设计