前言:本文介绍了内网穿透技术原理及frp工具的部署方法。由于NAT映射表是临时且单向的,外网无法直接访问内网服务。通过部署公网服务器作为中转,frp实现了内网服务的穿透访问。具体步骤包括:下载frp软件包,详细说明了配置文件修改要点和端口开放注意事项,并提供了SSH和Nginx两个实际应用案例,希望能帮助您快速掌握内网穿透的实现方法。
我们都知道公网无法直接访问内网主机,因为缺乏预先建立的 NAT 映射关系,导致外网请求无法路由到指定内网设备。
1.NAT的工作原理
2.关键限制
那么如果一个服务部署在内网中,我们想要访问呢?比如公司做的私有服务,只有内部员工才能访问,部署在公司内网中。而作为一个公司的员工在家里要完成工作任务需要访问公司内网服务该怎么办?
例如主机A要访问主机C部署的服务:

为了解决这个问题我们需要用到内网穿透技术,原理很简单在中间加一个公网服务器。

让主机C访问公网服务器,这样就有了NAT映射表,只需要在公网服务器上部署一个服务,将公网IP:端口映射到内网主机IP:端口 。主机A访问 公网IP:外部端口 时,路由器自动转发到内网主机。 所以接下来我们要解决的是在公网上部署一个什么样的服务完成该工作呢?这里给大家介绍的是frp。
frp下载链接 本文讲解的是在linux系统下部署,下载以下版本:

接下来准备xshell连接远程服务器和虚拟机两个终端,并把本地下载的frp_0.58.1_linux_amd64.tar.gz压缩包上传到两个终端,可以直接拖拽、使用指令rz或指令scp
scp指令的使用:
scp 压缩包地址 虚拟机登录用户名@虚拟机IP: 要拷贝到的目录对压缩包解压:
tar zxf frp_0.58.1_linux_amd64.tar.gz打开文件:

frps*是服务器,frps.toml是服务器的配置文件。frpc*是客户端,frpc.toml是客户端的配置文件。LICENSE是一个权限许可相关的文件,这里不做关心。以xshell远程连接作为客户去访问内网虚拟机为例。那么我们需要在xshell中启动frps服务器,在虚拟机中启动frpc客户端。
服务器启动:
在此之前需要了解并修改一下配置文件,xshell用vim打开frps.toml配置文件,如下:
vim frps.toml内容如下:
bindPort = 7000这个表示frps服务的端口号,假设这里我们更改为7777
7777端口对外开放。启动服务:
./frps -c frps.toml-c frps.toml选项,表示按配置文件的配置启动客户端启动:
同样的在此之前先了解并修改一下配置文件,使用虚拟机打开frpc.toml配置文件,如下:
vim frpc.toml内容如下:
serverAddr = "127.0.0.1"
serverPort = 7000
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000 serverAddr服务器的IP这个修改成我们的公网服务器,比如我的120.46.0.237,servereAddr服务器端口,这里修改成上文我们填写的服务器端口7777
name字段随意填,type是传输层协议类型,localIP是本地服务器IP,如果是在自己主机上部署的服务就不用修改,localport是本地访问的端口号,这里就使用默认的服务端口22,即ssh服务,remotePort是需要映射到公网的端口号,这里我们改为8022
启动客户端:
./frpc -c frpc.toml接下来我们打开一个xshell,访问公网120.46.0.237:8022,就能访问到内网虚拟机的ssh服务了。

接下来再测试一个服务,在虚拟机上安装一个nginx服务并启动。 下载安装nginx:
sudo apt install -y nginx启动nginx:
sudo nginx查看它所对应的端口:
netstat -nltp结果如下:

此时我们只需要在虚拟机客户端的配置文件再添加一条映射关系: 如下:
serverAddr = "120.46.0.237"
serverPort = 7777
[[proxies]]
name = "ssh-service"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 8022
[[proxies]]
name = "http-nginx"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080 测试:物理机打开浏览器访问120.46.0.237:8080,效果如下:

非常感谢您能耐心读完这篇文章。倘若您从中有所收获,还望多多支持呀!