使用VPS实现内网穿透

前言

搞了一个香橙派Zero3做服务器想跑服务和博客,服务搭建好后一般只能在局域网访问,想要从公网远程访问服务就必须要进行内网穿透。穿透方式一般有两种:本地路由转发(DDNS)和VPS转发。VPS转发方式可以在网络上寻找内网穿透服务网站,有很多公益性质的网站可以选择,如ChmlFrp等,但也因为公益性质,有时候提供的服务并不稳定,因此就想要自己搭建一个Frp服务器实现内网穿透。

准备

  1. 具有ipv4公网ip的服务器
  2. 本地能连接网络的客户端

开始

下载Frp

这里下载

选择最新的release版本下载即可,注意要选择服务器和客户端对应系统的版本(架构不一样也可以)。

下载的压缩包中既有服务端(frps)也有客户端(frpc)。

下载完成后,分别解压到客户端和服务端。解压指令tar -xvf 压缩包名字

部署服务

客户端需要配置frpc.toml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
serverAddr = "服务端ip地址"
serverPort = 7000
auth.token = "elixfrp" # 密钥,必须与服务端相同
#transport.protocol = "kcp" # 启用KCP降低延迟

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22 #客户端需要进行穿透的端口
remotePort = 6010 # 通过VPS此端口访问

[[proxies]] #第二个服务
name = "custom_service" # 自定义名称(建议有明确含义)
type = "tcp" # 根据实际协议选择 tcp/udp
localIP = "127.0.0.1" # 服务所在本地地址
localPort = 6806 # 本地服务端口
remotePort = 6020 # 服务端暴露的新端口(必须唯一!)

解释一下,这段配置就是可以通过你公网服务器ip地址的6000端口,来访问你本地服务器的22端口。

当然这两个端口都是可以自定义的(只需要在客户端修改即可)。

而上面的公网服务器7000端口是Frp的服务端口,这个端口只负责进行转发。

配置完成后,在Frp的同级目录执行./Frp/frpc -c ./Frp/frpc.toml即可运行,客户端配置到此就告一段落。

服务端需要配置frps.toml:

1
2
3
4
5
6
bindPort = 7000
auth.token = "elixfrp" #密钥,必须与客户端相同
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "frp"

这里没啥好说的,7000端口就是Frp服务器运行的端口,注意这里要改的话客户端的配置要一起修改。

下面webServer是管理面板的配置。

配置完成后,在Frp的同级目录执行./Frp/frps -c ./Frp/frps.toml即可运行,客户端配置到此就告一段落。

如果运行成功,就可以进行连接测试了,访问公网服务器ip:6000,应该能够正常连接服务了。

系统化运行

本步骤的目的是让服务加入系统任务,并能够持续运行和错误重启(开机自启)。

客户端

/etc/systemd/system建立vpsfrpc.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=VPSFRP Client Service
After=network.target

[Service]
Type=simple
WorkingDirectory=/usr/network/Frp # Frp所在目录
ExecStart=/usr/network/Frp/frpc -c /usr/network/Frp/frpc.toml # 路径为绝对路径
Restart=on-failure
RestartSec=5
StandardOutput=null
StandardError=null

[Install]
WantedBy=multi-user.target

运行服务

1
2
3
4
sudo systemctl daemon-reload
sudo systemctl start vpsfrpc
sudo systemctl enable vpsfrpc
sudo systemctl status vpsfrpc # 查看运行状态,active (running)即为成功

服务端

/etc/systemd/system建立vpsfrps.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=FRP Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/network/Frp/frps -c /usr/network/Frp/frps.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

运行服务

1
2
3
4
sudo systemctl daemon-reload
sudo systemctl start vpsfrps
sudo systemctl enable vpsfrps
sudo systemctl status vpsfrps # 查看运行状态

大功告成