幻想乡 - 内网穿透
type: channel
link: https://www.nekotofu.top/index.php/tag/NAT/
items: 在有公网ip服务器的前提下，利用frp为无内网机器做内网穿透

在有公网ip服务器的前提下，利用frp为无内网机器做内网穿透
type: item
date: 2022-11-06T17:46:00+08:00
description: 为什么要做内网穿透？你的家庭宽带连接到ISP（Internet Service Provider，互联网服务提供商，移动、联通、电信等），可以简略的表示为下图所示：一般来说，因为IPV4地址池有限，运营商并不会给你分配一个公网IP地址，会通过NAT（Network Address Translation）方式，使得一栋楼或者一个小区共用一个IP地址连接互联网，如下图。这样就会导致一个问题，如果你想通过公用的IP，从外部访问你的电脑（内网主机或其他网络设备），就会出现无法连接的问题，因为NAT方式使用的是当前地址池里空闲的端口为你转换，而你并不知道现在使用的端口是什么，并且这个地址是不停在变的（除非运营商使用静态NAT表，外部端口和你的内部端口是对应的）。为了解决这个问题，就需要内网穿透技术了。内网穿透也叫NAT穿透，进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。内网穿透工具有很多，例如花生壳、Ngrok、Natapp、Frp等，本文将在有一个公网服务器的前提下，介绍如何使用Frp进行内网穿透。frp内网穿透的原理如下图：服务端运行frps，监听外部连接。启动frpc，frpc启动后会向frps注册，也就是内网主机会向公网服务器请求注册，建立一条虚拟连接。外部客户端请求连接，查找是否有对应服务。frps告知frpc有新请求，需要建立连接，也就是公网服务器告知内网主机，需要建立连接。frps收到frpc的响应，建立新的连接。frps把frpc和请求连接的服务流量互相转发，将运行frps的服务器当成流量中转站，把内网主机的流量转发给外部客户端。frp客户端的使用从 https://github.com/fatedier/frp/releases 下载对应平台的软件，此处以Windows平台为例，下载 frp_x.xx.x_windows_amd64.zip ,解压后会获得如下文件： frpc.exe frpc.ini frpc_full.ini frps.exe frps.ini frps_full.ini LICENSE其中， frpc.exe，frpc.ini，frpc_full.ini 是内网客户端使用的程序及配置文件， frps.exe，frps.ini，frps_full.ini是有公网ip的服务器使用的程序及配置文件，其中xxxx_full.ini是完整的配置模板，可以根据需要自行探索，可以仅保留对应平台的应用和配置文件，下面我们将分别配置。配置服务端程序首先，连接你的公网服务器，复制frps.exe，frps.ini到服务器，打开frps.ini，修改初次建立连接使用的端口[common] bind_port = 7000建议修改 bind_port 为其他端口，部分运营商会屏蔽7000端口。在frps服务端目录打开控制台，运行frps -c frps.ini你将会看到控制台输出2022/11/06 20:37:51 [I] [root.go:209] frps uses config file: frps.ini 2022/11/06 20:37:51 [I] [service.go:194] frps tcp listen on 0.0.0.0:7000 2022/11/06 20:37:51 [I] [root.go:218] frps started successfully 出现如上字样即为启动成功。[note type="warning flat"]请在服务器防火墙开启对应端口，否则会连接失败[/note]配置客户端程序复制frpc.exe，frpc.ini到需要内网穿透的内网主机，打开frpc.ini，修改服务器地址以及添加内网服务[common] server_addr = 127.0.0.1 server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 修改 server_addr 为你的有公网ip的服务器地址，修改 server_port为 服务端 bind_port 的端口，下面示例的ssh服务的配置不需要的话可以删除。下面我们尝试添加web服务的内网穿透配置。[note type="info flat"]确保你的web服务为开启状态，打开控制面板--程序--启用或关闭Windows功能，勾选Internet Information Services，确定，打开浏览器，输入 localhost 或 127.0.0.1 ，你将看到如下界面，即为开启成功，默认页面在 C:/inetpub/wwwroot 内，可以…