内网穿透
- 内网穿透(英文:Port Forwarding)是一种网络技术,用于将公共互联网(外网)的请求转发到私有局域网(内网)中的特定设备或服务。在许多情况下,设备或服务位于一个局域网中,而无法直接从外部网络访问,这可能是因为网络防火墙、路由器配置或其他网络限制等原因。内网穿透允许你在这种情况下仍然能够通过公共互联网访问这些设备或服务。
- 通俗来说,就是在世界的任意一个地方都可以直接访问局域网的某台设备或服务。
IP
既然每个互联网用户都拥有 IP 地址,为什么某些用户无法直接访问部署在个人PC上的服务呢?
结论:因为找不到。
- IP 地址分为两种:公网 IP 和内网 IP
- 内网 IP : 内网通常使用私有 IP 地址范围,这些地址在全球范围内不是唯一的。内网 IP 是用户在使用局域网时,由局域网的网关所分配的 IP 地址,每一个内网 IP 实际上都可以映射到当前所在局域网网关的某一端口,拥有内网 IP 可以被同一局域网下的其他设备所访问到;
- 公网 IP : 内网的设备想要访问非同一局域网下的资源则必须通过公网 IP ,公网 IP 是没有经过 NAT 转换的由互联网供应商(ISP)提供的最原始的 IP 地址,每一个公网 IP 都可以直接在互联网中被直接定位到。公网使用全球唯一的公共 IP 地址。
综上,只有公网IP才能在互联网上路由到,内网 IP 地址仅在当前局域网下可以被定位并访问到,无法跨域访问内网IP。
NAT(网络地址转换)技术
由于IPV4的数量是有限的,所以无法满足全世界人人手一个公网IP。在2019年,IPV4地址已经全部分配完毕,为什么我们依然可以正常上网?
结论:因为有NAT
- 网络地址转化技术的核心作用在于实现对公网 IP 地址的复用,即所有的内网主机共用同一个 IP 地址,NAT 的实现方式共有三种
其中,PAT使用最为广泛。 - 三种 NAT 实现方式共同点在于:对于内网用户来说自己对应的公网 IP 是不可知的。
- 因此,内网IP跨域访问的方法是:内网IP的访问请求则需要先映射为公网 IP 然后访问到另一局域网的公网 IP ,最后由另一局域网的网关将其映射到相应的局域网设备,但如果我们访问的地址属于局域网中的内网 IP ,就无法定位到其相应的公网 IP。
结论
- 前提:NAT 并不保证每次转换得到的公共 IP 地址都是一样的,特别是在动态 IP 地址分配的情况下。
- 所以如果我们想要实现在世界的任何地方都可以访问某局域网的设备或服务就需要一个公网IP服务器,并固定该公网IP服务器的某一端口映射到相应局域网主机。
FRP
- frp是一个开源的内网穿透工具,它允许在内网的计算机或设备通过NAT(Network Address Translation,网络地址转换)和防火墙连接到公共网络,从而使得外部设备可以访问内部设备提供的服务。
- frp使用客户端-服务器架构,其中frps是服务器端,负责接受来自外部设备的连接请求,而frpc是客户端,负责将内部服务映射到服务器上,实现内网穿透的功能。
答疑解惑
- 问:用户想通过frp访问局域网的设备,服务端是如何找到局域网设备的?
答:在使用frp进行内网穿透时,服务端(frps)如何找到局域网设备取决于两个关键部分:客户端(frpc)的配置和网络环境。在内网穿透过程中,frpc会主动连接到frps服务器。frpc主动连接到frps服务器时,它们之间的通信使用的是WebSocket协议。WebSocket是一种在单个TCP连接上进行持久性双向通信的协议。 - 问:永久连接的过程中,NAT不会给客户端重新分配公网ip和端口号吗?
答:在长连接或永久连接的过程中,NAT(Network Address Translation,网络地址转换)设备通常不会给客户端重新分配公网IP地址和端口号,因为在持久连接中,NAT设备会维护一个NAT映射表,将内部设备的IP地址和端口号映射到公网IP地址和端口号上。