最近想搭建一台个人服务器,由于没有公网IPv4地址,因此只能通过内网穿透的方式,实现外部设备对于内网服务器的访问
内网穿透介绍
内网穿透的基本原理是引入一个中介,这个中介拥有公网IP,通过将外部设备与内网服务器的流量进行转发,实现外部用户与内网服务器之间的通信。因此,为了实现内网穿透,必须要有一台公网服务器,可以选择买一台NAT VPS当作公网VPS(虚拟个人服务器)。
工具准备
为了通过内网穿透搭建个人服务器,你需要准备如下材料:
- 一台位于内网的个人服务器(客户端)
- 一台拥有公网IPV4的虚拟个人服务器,这个服务器不需要很强的性能,但是带宽要大(服务端)
- 用于访问内网服务器的用户
- frp内网穿透软件,下载命令如下:
1 | wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz |
工作原理
- 服务端运行,监听一个主端口,等待客户端的连接;
- 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
- 服务端fork新的进程监听客户端指定的端口;
- 外网用户连接到服务端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
- 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。
部署教程
服务端部署
服务端的部署请参考文献1,需要补充的一点是,有些VPS还需要在其控制台中配置云服务器安全组规则,例如我使用的华为云,需要在网络控制台-访问控制-安全组中进行规则配置
在入方向规则中,添加对应的frp内网及外网端口,从而实现外部流量与内部服务器流量的输入
在网络控制台中设置安全规则后,还需要在linux服务端防火墙中打开对应的端口:
1 | firewall-cmd --permanent --add-port=48010/tcp |
客户端(内网服务器)部署
请参考文献2进行部署
常用调试命令
Linux侧查看某个端口的防火墙状态
1 | firewall-cmd --query-port=6000/udp |
打开某个端口防火墙
1 | firewall-cmd --permanent --add-port=2222/tcp |
参考文献
- 1.frp内网穿透教程 ↩
- 2.frps实现远程桌面 ↩