什么是内网穿透

百度百科:内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。

维基百科:在电脑科学中,NAT穿越(NAT traversal)涉及 TCP/IP 网络中的一个常见问题,即在处于使用了NAT装置的私有 TCP/IP 网络中的主机之间建立连接的问题。

我的理解:内网穿透其实就是把局域网内的资源或服务映射到公网,从而达到通过互联网访问内网的效果。

根据我的理解,可以做出如下图:

image-20220701104714835

因为内网穿透服务器是暴露在互联网(公网)的,所以它必须拥有公网IP地址。用户服务器既可以是公司内部的服务器集群,也可以是PC个人电脑。


一些常见的内网穿透工具的使用

Ngrok

官方文档:https://ngrok.com/docs

ngrok是一款非常便捷简单的内网穿透工具。内网穿透服务器由他们来提供,我们只需要指定要穿透的端口即可实现一键内网穿透

下载安装

  1. 官方下载地址下载对应版本的ngrok

image-20220701112204402

  1. 下载好后进行解压,会得到如下文件(先别急着运行)

image-20220701112307990

  1. 注册一个账号,注册地址:https://dashboard.ngrok.com/get-started/setup
  2. 登录,查看自己的token

image-20220701112832070

  1. 在刚刚文件的解压目录下打开cmd窗口

image-20220701113119264

至此,安装配置完成

使用

在刚刚文件的解压目录下打开cmd窗口,输入ngrok http [要穿透的端口号]回车即可

image-20220701113754212

红框圈住的即为穿透后的地址,通过互联网就可以访问。需要注意的是,免费版的分配的域名地址是随机的,每次穿透可能结果都不一样。


Frp

官方文档:https://gofrp.org/docs/

Frp是GitHub上的一个开源项目,使用go语言编写,速度很快,支持点对点内网穿透,功能非常强大

先决条件

  • 一台具有公网IP的服务器
  • 知道一丁点Linux相关知识

下载

Release v0.43.0 · fatedier/frp · GitHub下载对应版本的Frp。内网穿透服务器和本机服务器都要由一份。

使用frp实现http内网穿透

为了方面描述,内网穿透服务器简称为服务器,要穿透的本机服务器简称为本机

  1. 服务器端配置
  • 打开服务器端 frps.ini 配置文件,修改如下
1
2
3
[common]
bind_port = 7000
vhost_http_port = 8080
  • 放行 7000 端口和 8080 端口
  • 运行命令
1
./frps -c frps.ini
  1. 本机配置
  • 打开本机 frpc.ini 配置文件,修改如下
1
2
3
4
5
6
7
8
[common]
server_addr = [服务器ip地址]
server_port = 7000

[web]
type = http
local_port = [要代理的端口号]
custom_domains = [域名,没有解析域名的话可以填ip地址]
  • 运行命令
1
./frpc.exe -c ./frpc.ini

访问 域名.8080 即可看到本机的4000端口对应的资源/服务