基于Frp搭建内网穿透服务
声明:本文全部内容为原创内容,禁止在未经授权的情况下进行任何二次创作和修改,转载请注明出处。
摘要
这篇文章将会介绍什么是内网穿透,以及如何基于Github上的开源项目Frp在Linux系统中搭建内网穿透服务。
什么是内网穿透?
内网穿透又被称作网络地址转换穿透,用于在内网与公网的设备之间建立连接。
为什么需要内网穿透?
为了访问互联网,每个设备需要一个IP地址,以建立与互联网或者其他设备之间的通讯。目前使用最广泛的IP地址是形如xxx.xxx.xxx.xxx的IPv4地址。通过这些地址,不同的互联网设备能够在互联网或其他设备之间建立连接。在下图中,设备1,2,3可以连接互联网,并且也可以互相访问及通讯。
然而随着互联网设备数量的增长,IPv4公网地址逐渐不足,难以支持越来越多的网络设备访问互联网。为了避免这个问题,网络运营商使用网络地址转换技术,建立了基于一个公网IPv4地址的内网,使连接到这个内网的设备可以共享同一个IP地址访问互联网。在下图中,NAT1网络中的1,2,3设备可以共享地址1联网,NAT2网络中的4,5,6设备可以共享地址2联网。然而,NAT1中的设备无法访问NAT2中的设备,因为每个内网设备在公网上没有独立的IP地址。
为了解决不同内网设备间无法访问的问题,内网穿透服务允许内网中的设备映射到公网中,并被任何能够访问公网的设备访问。
最著名的内网穿透服务是Ngrok,其第一代项目在Github上开源,而第二代是非开源的。因此,在这篇文章中,将使用另一种开源的内网穿透服务Frp作为示例。
什么是Frp?
Frp是一种快速的反向代理,可以将位于NAT或防火墙保护之下的本地服务器暴露在互联网上。到目前为止,它支持tcp, udp, http以及https等常见协议。在这些协议中,访问请求可以通过域名转发到内网服务。
Github项目地址:https://github.com/fatedier/frp
Frp可以做什么?
通过Frp,局域网内的本地服务可以被映射到公网访问。比如,一个网站部署在内网的一部树莓派上,我们可以通过Frp服务将其映射到一个具有公网IP地址的云服务器上,并且通过云服务器的公网IP访问这个网站。
部署Frp服务
需求环境
- 一个部署在具有内网IP地址 ip_internal 的设备位于 port_internal 端口的服务,以树莓派为例。
- 一个具有独立公网IP地址 ip_public 的服务器,并且服务映射到 port_public 端口,以CentOS 7系统为例。
- 从Github下载的Frp服务端及客户端。
- 假设 port_internal 为7001,ip_internal 为192.168.123.101,ip_public 为123.456.789.100,port_public 为7010。
步骤一:在内网中检查服务访问
检查服务在内网中能否通过内网IP访问成功:http://192.168.123.101:7001,确保该服务能够正常工作。
步骤二 :从Github下载Frp
下载Frp的最新版本或者需要的特定版本,注意选择对应操作系统版本下载。
步骤三:部署Frp服务端
在服务器的管理系统中,放行防火墙7000以及7010端口。将frp, frps.ini文件上传到服务器的~/frp_server目录下。
cd ~
mkdir frp_server
mv frps frp_server
mv frps.ini frp_server
编辑frps.ini文件:
# frps.ini
[common]
# frps服务端口
bind_port = 7000
启动frps服务:
./frps -c ./frps.ini
步骤四:部署Frp客户端
在树莓派防火墙中放行7001端口,使用ufw配置防火墙即可。关于ufw防火墙配置的具体细节,可以参考我的另一篇文章:
https://blog.davcloud.top/?p=799&lang=zh
sudo ufw allow 7001
sudo ufw enable
启动frpc服务:
./frpc -c ./frpc.ini
步骤五:通过公网IP访问服务
现在,我们可以通过公网网址http://123.456.789.100:7010访问服务。
注意事项
- Frp的服务端和客户端需要匹配(在同一版本)。
- 如果服务可以在内网成功访问,但是无法通过公网访问,请确保服务器的防火墙放行了远程端口。
最后
以上是关于Frp内网穿透服务的基本应用,如需了解更多功能(如dashboard, udp, stcp, token),请阅读Frp项目的README文件:https://github.com/fatedier/frp
个人博客主站(最新内容):https://blog.davcloud.top
CSDN:DavidYang394
知乎:不向光的红外线
微信公众号:davcloud
推荐阅读