放假回家需要远程实验室的电脑,虽然可以通过Windows自带的远程功能加VPN访问,但有时电脑会重启,开机后电脑IP地址也就变了。为了确保万无一失,设置了内网穿透,实现通过公网IP访问内网机器的功能。
1. frp介绍
frp是一个开源的内网穿透工具,支持TCP、UDP、HTTP、HTTPS等协议,可以将内网的机器安全、便捷的通过具有公网IP的机器暴露到公网中。(太过抽象,可以跳过这一部分,直接进入准备工作,配置好之后再回来看就会明白了)
-
frp项目地址:frp
-
frp工作原理
frp需要一台具有公网IP地址的机器作为服务端,内网中的机器作为客户端。frp包括两部分,frps以及frpc,服务端运行frps,客户端运行frpc,其工作原理如下:
- 服务端运行frps,对设置的主端口进行监听,等待客户端的连接
- 客户端运行frpc,连接到服务端,同时告诉服务端要监听的端口和转发类型
- 服务端开启新的进程监听客户端指定的端口
- 公网用户连接到服务端的端口(该端口是第二步中客户端指定的端口),服务端将数据转发到客户端
2. 准备工作
这里我的服务端是一台Linux服务器,客户端是一台Windows电脑。
-
下载frp:frp下载地址
需要根据对应的操作系统和CPU架构,分别在服务端和客户端下载对应的frp。
-
解压frp
下载解压之后,服务器端保留frps、frps.ini、LICENSE这三个文件,电脑保留frpc、frpc.ini、LICENSE这三个文件即可。
-
Linux以及Windows需设置防火墙开放对应的端口,根据下面的配置,Linux需开启7000(该端口用于服务端与客户端之间建立联系)以及9000端口(该端口用于公网用户连接内网Windows),Windows需开启3389端口(该端口用于远程桌面)。
3. 服务器端配置
3.1 frps配置
打开 frps.ini
文件,输入以下内容:
[common]
bind_port = 7000 # 主端口,可设置为其他端口,客户端将通过该端口与服务端建立通信
token = thisispassword # 用于身份验证
3.2 启动frps
在解压后的文件夹内输入以下内容:
./frps -c ./frps.ini
3.3 设置开机自启
经过以上设置,frps已经在服务器上启动并监听7000端口了,但服务器重启后需要手动启动frps,因此这里再设置一下frps开机自启。
-
在**/lib/systemd/system** 下面新建一个文件frps.service:
vim /lib/systemd/system/frps.service
-
写入以下内容
[Unit] Description=frps [Service] Type=simple ExecStart=frps所在文件夹/frps -c frps所在文件夹/frps.ini [Install] WantedBy=multi-user.target
-
启动
systemctl start frps
-
设置开机自启
systemctl enable frps
4. 电脑端
4.1 frpc配置
打开frpc.ini文件,输入以下内容:
[common]
server_addr = 服务器的公网IP地址
server_port = 7000 # frps.ini里面设置的主端口
token = thisispassword # 与frps.ini里面设置的保持一致
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389 # 本地需要映射到服务器上的端口
remote_port = 9000 # 映射到服务器上的端口
4.2 启动frpc
在 frpc.ini
所在的文件夹进入命令行窗口,输入:
./frpc -c ./frpc.ini
启动成功后:
- 服务器端的7000端口将监听到有个frpc客户端想要与服务器建立连接
- 服务器端根据客户端的设置开始监听9000端口
- 若此时有台电脑访问服务器的9000端口,则根据frp的映射,将实际访问客户端的3389端口也就是访问Windows电脑的远程
4.3 设置开机自启桌面
同样,为了避免手动启动的麻烦,frpc也需要设置开机自启。借助winsw设置Windows下frpc的开机自启:
-
根据需要下载winsw-*.exe
-
将下载的
winsw-*.exe
放到frpc
所在的文件夹 -
新建一个名为
winsw.xml
的文件,写入以下内容:<service> <id>frp</id> <name>frp</name> <description>frp</description> <executable>frpc</executable> <arguments>-c frpc.ini</arguments> <logmode>reset</logmode> </service>
-
管理员权限打开命令行窗口,进入到
frpc
所在的文件夹,输入以下内容winsw install
5. 其他
frp还提供了后台管理等功能,具体可参考frp文档。