使用frp实现内网穿透

最近想搭建一台个人服务器,由于没有公网IPv4地址,因此只能通过内网穿透的方式,实现外部设备对于内网服务器的访问

内网穿透介绍

内网穿透的基本原理是引入一个中介,这个中介拥有公网IP,通过将外部设备与内网服务器的流量进行转发,实现外部用户与内网服务器之间的通信。因此,为了实现内网穿透,必须要有一台公网服务器,可以选择买一台NAT VPS当作公网VPS(虚拟个人服务器)。

工具准备

为了通过内网穿透搭建个人服务器,你需要准备如下材料:

  1. 一台位于内网的个人服务器(客户端)
  2. 一台拥有公网IPV4的虚拟个人服务器,这个服务器不需要很强的性能,但是带宽要大(服务端)
  3. 用于访问内网服务器的用户
  4. frp内网穿透软件,下载命令如下:
1
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz

工作原理

  1. 服务端运行,监听一个主端口,等待客户端的连接;
  2. 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
  3. 服务端fork新的进程监听客户端指定的端口;
  4. 外网用户连接到服务端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
  5. 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

部署教程

服务端部署

服务端的部署请参考文献1,需要补充的一点是,有些VPS还需要在其控制台中配置云服务器安全组规则,例如我使用的华为云,需要在网络控制台-访问控制-安全组中进行规则配置

Hack computer Arch

在入方向规则中,添加对应的frp内网及外网端口,从而实现外部流量与内部服务器流量的输入

Hack computer Arch

在网络控制台中设置安全规则后,还需要在linux服务端防火墙中打开对应的端口:

1
2
3
firewall-cmd --permanent --add-port=48010/tcp
...
firewall-cmd --reload

客户端(内网服务器)部署

请参考文献2进行部署

常用调试命令

Linux侧查看某个端口的防火墙状态

1
firewall-cmd --query-port=6000/udp

打开某个端口防火墙

1
2
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

参考文献

0%