Skip to content
hev edited this page Oct 24, 2022 · 1 revision

NATMap FAQ

可以做什么?

NATMap可以打通运营商完全锥型NAT网关的端口,使得通过运营商网关的公网IP:端口能够访问到用户内网的服务。

支持哪些协议?

TCP和UDP协议。默认是TCP协议模式,启用-u参数为UDP协议模式。

数据是如何流转的?

根据数据流转路径的不同,可分为三种运行方式:

  1. 直接绑定模式,natmap和业务服务端同时运行在分配了私网IP的用户路由器上,natmap负责打通运营商网关的端口映射,业务服务端直接负责侦听并接受处理外部访问请求,用户侧数据无中转。
  2. 防火墙中转模式,natmap运行在分配了私网IP的用户路由器上,业务服务端运行在其它主机,natmap负责打通运营商网关的端口映射,用户路由器防火墙的端口转发配置负责将外部访问中转至业务服务端处理。业务服务端可以直接获取客户端原始IP:端口信息。
  3. natmap中转模式,natmap运行在分配了私网IP的用户路由器上,业务服务端运行在其它主机,natmap负责打通运营商网关的端口映射以及侦听并接受外部访问请求,再将外部访问中转至业务服务端处理。业务服务端不能直接获取客户端原始IP:端口信息。

根据数据转发的额外开销程度,由低至高分别是:直接绑定模式 < 防火墙中转模式 < natmap中转模式。natmap中转模式的优势是免除防火墙端口转发配置,使用简便。

运行环境有什么要求?

NATMap目前支持Linux、BSD和MacOS等系统。需要注意的是在直接绑定模式,由于natmap和业务服务端需要绑定同一源端口,当业务服务端没有启用reuseport特性的情况下,natmap会尝试跨进程打开,该功能依赖Linux 5.6及以上版本内核。

域名访问是如何实现的?

对于TCP、UDP协议的服务,访问服务需要IP:端口信息。在natmap打洞的网络场景中,IP和端口均是动态的,利用域名解析方式访问的一种参考实现是使用DNS的AAAA记录同时记录IPv4地址和端口号,并在客户端侧增加相应的支持。这样只要natmap在建立映射后,调用脚本通过DDNS的API将IP和端口更新到DDNS的AAAA记录中,客户端再通过域名解析即可同时获得IP和端口。

这种将IPv4地址和端口同时编码在DNS AAAA记录中的方式在NATMap中称为IP4P地址格式,目前支持该方式的客户端有:

IP4P的字段:

2001::{port}:{ipv4-hi16}:{ipv4-lo16}

其它?

请通过Issue提问: https://github.com/heiher/natmap/issues/new

Clone this wiki locally