内网穿透是什么?原理、用途和合法性说明
内网穿透是让外网访问内网设备的一种方法:内网里的客户端主动连上一台有公网 IP 的服务器并保持连接,外部请求先到这台服务器,再沿这条连接转回内网。技术本身是中性的:访问自己有权管理的设备是正常用途,私自在单位网络里打通对外通道、或用来访问无权访问的系统,就越过了合规边界。
内网穿透是什么意思?它是一种让外网访问内网设备的技术。内网里的设备通常没有公网 IP,躲在路由器或防火墙的 NAT 后面,外面的人无法主动连进来;内网穿透的做法是反过来,让内网里的一个客户端程序主动连上一台有公网 IP 的服务器,并把这条连接一直保持住。之后外部用户访问这台公网服务器的某个端口,服务器就把请求沿着这条已经建立好的连接送回内网,再由客户端转给目标设备。frp、SSH 反向隧道、各类商业穿透服务,原理都是这一套。
为什么内网设备需要“穿透”
内网设备用的是私有地址(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),这些地址在互联网上不能路由。它们上网要经过 NAT:出去的时候,NAT 设备把源地址换成自己的公网地址,并记下这条连接的对应关系,回包按这个记录送回内网。问题出在反方向:外面主动发来的新连接,NAT 设备上没有任何记录,不知道该转给内网哪台机器,只能丢弃。
再加上边界防火墙通常默认拒绝所有入方向的新连接,结果就是“内网能访问外面,外面访问不了内网”。常见的情况有这几种:
| 场景 | 外面为什么连不进来 |
|---|---|
| 家庭宽带 | 很多宽带拿不到公网 IPv4,路由器 WAN 口是 100.64.0.0/10 这类运营商级 NAT 地址;即使有公网 IP,也常被封了常用端口 |
| 企业办公网 | 出口防火墙只允许内部访问外部,不允许外部新建连接 |
| 机房管理网 | BMC、交换机管理口用私有地址,按规范本来就不接入公网 |
| 4G、5G 物联网设备 | 处在运营商的 NAT 后面,地址也会变化 |
| 云上没有绑定公网 IP 的主机 | 只有 VPC 内网地址,出网走 NAT 网关 |
内网穿透利用的是 NAT 和防火墙的一个共同特点:出方向的连接是放行的,而且这条连接上的回包也是放行的。只要让内网先连出去,后面的数据就能顺着这条连接进来。
内网穿透原理:内网主动连出,公网侧转发
以把内网 NAS(192.168.1.10:5001)开放给外部访问为例,参与的有三方:内网里的穿透客户端、有公网 IP 的穿透服务端(203.0.113.10)、外部访问者。
外网用户(任意网络)
│ ② 访问 203.0.113.10:6001
▼
[ 公网服务器 203.0.113.10:服务端监听 7000(隧道)和 6001(对外) ]
▲ ║
│ ║ ① 内网客户端主动连出到 7000,隧道一直保持(单线:连接发起方向)
│ ║ ③ 服务端把 6001 收到的请求放进隧道送回内网(双线:数据方向)
│ ▼
[ 内网客户端 192.168.1.5:在 NAT 后面,只能连出、不能被连入 ]
│ ④ 转给内网里的目标设备
▼
[ 内网设备 NAS 192.168.1.10:5001 ]
四个步骤对应四件事:
- 建立隧道:内网客户端启动后主动连接公网服务器的 7000 端口,完成认证,告诉服务端“请把你的 6001 端口转给我”。这是一条普通的出方向连接,NAT 和防火墙都会放行。
- 外部访问:外网用户访问 203.0.113.10:6001,他并不知道背后是内网设备。
- 反向送回:服务端把 6001 上收到的请求,通过第 1 步建立的那条连接发给内网客户端。对 NAT 来说,这只是已有连接上的回包,照常放行。
- 转给目标:内网客户端把数据转给 192.168.1.10:5001,NAS 的回应再沿原路返回。
为了让隧道一直可用,客户端会定时发送心跳,防止 NAT 设备因为连接长时间空闲而删除记录;连接断了会自动重连。
不装专门软件,用 SSH 自带的反向隧道就能体验同样的原理:
# 在内网机器上执行:把公网服务器的 6001 端口转回本机的 22 端口
ssh -N -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes -R 6001:localhost:22 [email protected]
# 在公网服务器上执行:连本机的 6001,就进入了内网那台机器
ssh -p 6001 内网机器的用户名@localhost
SSH 服务端默认只把反向转发的端口绑定在本机回环地址上,所以上面的 6001 只能在公网服务器本机访问,外人连不上,这本身就是一道保护;要对外开放,需要服务端的 GatewayPorts 配置允许。
还有一种变体叫点对点打洞:双方先连上一台协调服务器,交换各自 NAT 后的公网地址和端口,再尝试直接互发 UDP 包。打通之后数据不经过中转,速度快、不占服务器带宽;但能否成功取决于两边的 NAT 类型,遇到对称型 NAT 往往失败,实际产品一般在失败后退回中转方式。
内网穿透和端口映射、VPN 的区别
这三种方式都能“从外面访问里面”,区别在于连接由谁发起、需要什么条件、暴露了什么:
| 对比项 | 端口映射 | 内网穿透(中转) | VPN、组网工具 |
|---|---|---|---|
| 原理 | 出口路由器或防火墙把公网 IP 某端口收到的包转给内网某台机器(DNAT) | 内网客户端主动连出,公网服务器反向转发 | 访问端加入虚拟网络,像在内网里一样访问 |
| 内网出口要有公网 IP | 需要 | 不需要 | 看方案:VPN 服务端要能被连到;组网工具多数不需要 |
| 要不要能改出口设备的配置 | 要 | 不要 | VPN 服务端部署在边界时要 |
| 访问端要装软件 | 不用 | 一般不用;用带密钥的访问方式时要 | 要,还要登录认证 |
| 访问范围 | 单个端口 | 单个端口 | 整个网段,可以按策略限制 |
| 暴露面 | 内网服务直接暴露在公网 IP 上 | 服务暴露在中转服务器的端口上 | 只暴露 VPN 自身的端口,业务端口不对公网 |
| 适合 | 有公网 IP、自己管得了出口的网络 | 没有公网 IP,或改不了出口配置 | 团队远程办公、运维访问内网 |
所以“内网穿透和端口映射的区别”,核心就两点:连接方向和前提条件。端口映射是外面直接连进来,要求出口有公网 IP 并且你能改出口设备的配置;内网穿透是里面先连出去,这两个条件都不需要,代价是多了一台中转服务器和一段绕行。
内网穿透有啥用:常见用途
| 用途 | 例子 | 要注意的地方 |
|---|---|---|
| 远程访问家里的设备 | 在外面访问家里的 NAS、摄像头,远程桌面连家里的电脑 | 速度受家里上行带宽限制;登录页面不要直接暴露在公网 |
| 开发调试 | 本地开发的网站接收第三方平台的回调(webhook),或者临时给客户演示 | 调试结束就关掉,不要把开发机长期挂在公网上 |
| 远程维护分散的设备 | 门店收银机、工控机、4G 联网的物联网终端 | 设备数量多时,用统一的管理平台或组网方案更好管 |
| 运维临时访问内网 | 应急时访问没有公网地址的服务器或管理口 | 只能作为临时手段,正式访问应走 VPN 或堡垒机,留下审计记录 |
| 对外提供服务 | 在家里或办公室的机器上跑网站、接口 | 稳定性受宽带和中转影响;面向公众的业务应放到有公网 IP 的服务器上,并满足备案要求 |
内网穿透违法吗:合规边界在哪里
内网穿透是一种连接技术,是否合规,看的是用它做什么、有没有授权,而不是用了哪个软件。以下是常识性说明,不构成法律意见,具体以所在单位的制度、宽带服务协议和法律法规为准:
- 访问自己的设备,属于正常用途。用穿透远程访问自己家里的 NAS、自己开发机上的测试站,和使用远程桌面、VPN 没有本质区别。
- 在单位网络里私自开通,违反的是单位的安全制度。穿透隧道绕过了边界防火墙、准入和审计,等于在内网墙上自己开了一扇门。即使出发点是方便工作,也应当先经过 IT 部门审批;因此造成数据泄露的,还可能要承担相应责任。
- 访问无权访问的系统,可能构成违法犯罪。用穿透进入不属于自己、也没有获得授权的网络或系统,属于《网络安全法》禁止的非法侵入他人网络;情节严重的,可能触犯刑法中非法获取计算机信息系统数据、非法控制计算机信息系统等罪名;针对国家事务、国防建设、尖端科学技术领域的计算机信息系统,刑法另设了非法侵入计算机信息系统罪。
- 对外提供网站要备案。通过境内的中转服务器、用域名向公众提供网站服务,和普通建站一样需要办理 ICP 备案;很多家庭宽带协议也约定不得私自架设对外服务的服务器,以你签署的协议为准。
- 不能用来绕开网络访问管理。《计算机信息网络国际联网管理暂行规定》要求国际联网必须使用国家公用电信网提供的国际出入口信道,任何单位和个人不得自行建立或者使用其他信道进行国际联网。借助境外中转搭建隧道、为自己或他人绕开访问管理,超出了内网穿透的正常用途。
拿不准的时候,先问单位网络管理部门或法务,比事后补救稳妥得多。
安全风险:打通的是一条进入内网的路
内网穿透的核心风险是:原本只在内网可达的服务,变成了互联网上任何人都可能访问到的服务。
| 风险 | 后果 | 怎么降低 |
|---|---|---|
| 公网端口被扫描和暴力破解 | 远程桌面、SSH、NAS 登录页暴露后,很快就会出现大量登录尝试 | 只映射确实要用的端口;高危服务用访问端也要持有密钥的方式,或只在本机回环地址监听 |
| 中转服务器被入侵 | 攻击者拿到一条现成的、通往内网的隧道 | 中转服务器单独加固、及时更新,客户端和服务端之间启用认证令牌和加密 |
| 用第三方穿透服务 | 流量经过别人的服务器,未加密的内容对方看得到 | 只传加密协议(HTTPS、SSH),敏感系统不走第三方中转 |
| 隧道成为横向移动的跳板 | 被攻破的那台设备,可以继续访问同网段的其他机器 | 穿透客户端放在隔离的网段,只允许它访问指定的目标地址和端口 |
| 绕过审计 | 谁在什么时候访问了什么,没有记录 | 正式的运维访问走堡垒机或 VPN,用完的隧道及时关闭 |
对网络管理员来说,更现实的问题是发现别人私自开的隧道。穿透客户端的特征是长期保持一条到外部某个固定地址的连接,可以在服务器上定期检查:
# 列出所有已建立的对外连接及所属进程,留意长期存在、目标陌生的连接
ss -tnp state established
# 查找常见穿透客户端的进程名,结果只作参考,进程名可以被改掉
ps -eo pid,user,etime,cmd | grep -Ei 'frpc|ngrok|ssh .*-R' | grep -v grep
最根本的办法是在出口上做出方向控制:服务器、管理网只允许访问业务真正需要的外部地址和端口,隧道就很难建起来。
在管理系统里怎么落地
机房里最常见的穿透冲动,是为了在外面访问 BMC 管理口:管理网用私有地址,不在机房就够不着。但 BMC 拥有服务器的完全控制权,给它打一条穿透隧道,风险远大于便利。Toplink DCIM 的做法是在每个机房部署从节点,从节点就近连接 BMC 所在的管理网,运维人员只需访问 DCIM 后台,就能在浏览器里远程开关机、打开控制台;每次会话自动录像。需要让厂商工程师临时协助排查时,在 IPMI 远程管理里生成只读或可控制的共享链接,并限制使用次数,不必为他开一条通往管理网的隧道。
办公室、门店里没有 BMC 的普通电脑和工作站,穿透客户端跑在操作系统里,死机、蓝屏或关机后隧道也就断了。这类设备可以加装 IPMI 远程管理卡:它是独立于主板、CPU 和操作系统的硬件,有自己的网口,能远程看画面、操作键鼠和开关机。卡的网口同样应接入管理网络,通过 VPN 或堡垒机这类正式通道访问,而不是再给它开一条穿透。
常见问题
内网穿透会比直接访问慢吗?
一般会慢一些。数据要先到中转服务器再绕回来,延迟是“访问者到中转服务器”和“中转服务器到内网”两段之和,速度取决于内网上行带宽和中转服务器带宽中较小的那个。中转服务器选在离内网和访问者都近的地方,绕行的代价会小一些。
有了 IPv6 还需要内网穿透吗?
内网设备拿到了全局 IPv6 地址、访问方也有 IPv6 时,可以直接连接,不需要穿透;但家用路由器和光猫通常默认拦截 IPv6 的入方向连接,要在防火墙上放行对应端口,暴露面的问题同样存在。访问方只有 IPv4 时,仍然连不进来。
自己搭中转服务器和用现成的穿透服务,怎么选?
自建要有一台公网服务器,自己部署服务端、打补丁,带宽、端口和认证方式都由自己决定;现成服务注册后装客户端就能用,省去服务器,但带宽、端口数量和域名通常受套餐限制。长期使用或要传敏感数据,自建更可控。
内网穿透和 DDNS 是一回事吗?
不是。DDNS 只是让域名跟着变化的公网 IP 走,前提是你本来就有公网 IP、端口能从外面连进来。没有公网 IP 的网络,配 DDNS 也连不进来,这时才需要内网穿透或 IPv6。