网段为何通过 NAT 访问内网 PLC 和 CNC 设备
CNC 加工单元通常位于独立子网。机床厂商从小地址池分配地址,常见为 192.168.1.x 或 10.10.10.x,这些地址在不同单元之间重复。工厂 IT 读取这些机床数据时,第一个问题是两个单元可能用同一地址对应不同控制器。NAT 为每台机床在工厂侧分配第二个身份,从而解决该问题。
映射 IP 思路相同,但粒度更细。路由器不逐包转换,而是维护一张表,规定某个外部地址和端口属于某台内部设备。192.168.1.10:102 上的 Siemens 828D 在工厂网络上变为 172.20.5.10:4001。工厂侧看不到原始地址,单元之间的地址冲突不再有影响。
执行访问的网段通常是一台带两个接口的网管交换机或小型工业路由器。一个接口面向机床子网,另一个面向工厂网络或 DMZ。两者之间的所有流量都经过映射表,其他流量不通过。正是这条规则防止配置错误的机床用广播流量淹没工厂网络。
这种布局有三个实际好处。单元之间允许地址复用。工厂侧看到一份稳定的目标清单,只需记录一次。可以在边界丢弃或改写流量,而无需改动控制器程序。
- 1地址复用每个单元可保留默认子网,无需重新编号。
- 2工厂侧目标稳定IT 为每台机床记录一个 IP,而不是变动的 DHCP 租约。
- 3边界过滤由你决定哪些端口通过、朝哪个方向通过。
NAT 与映射 IP 如何处理 PLC 和 CNC 流量
多数 PLC 和 CNC 协议面向连接且有状态。Siemens S7 使用 TCP 102。FANUC FOCAS 使用 TCP 8193。Modbus TCP 使用 502。EtherNet/IP 显式消息使用 44818,隐式 I/O 使用 UDP 2222。映射表必须转发 TCP 控制连接,并在协议需要时转发 UDP 侧通道。只转发 TCP 端口,机床可能连上但始终无法交换周期数据。
静态一对一映射最安全。一个内部地址映射一个外部地址,所有端口开放。推理简单,调试也简单。代价是地址消耗和更大的暴露面。如果工厂侧是扁平网络,这种暴露就有影响。
端口级映射节省地址。把 102 转发到一台控制器、8193 转发到另一台、502 转发到第三台,全部位于一个外部地址之后。直到两台设备需要同一端口时,这种做法才失效。两台 S7 控制器都要 102,一个外部地址无法同时服务两者,除非使用不同的外部端口。硬编码端口的客户端会失败。部分 HMI 和 SCADA 软件允许自定义端口,很多不允许。
时序是隐蔽的失效模式。NAT 增加一次转换步骤,在小型工业路由器上该步骤会带来延迟。几毫秒对每秒轮询的数据记录器没问题,对运动同步或安全通道不行。把周期 I/O 留在机床子网内。只让诊断、配方传输和程序上传跨过边界。
- 1周期 I/O 留在本地不要让实时流量跨过 NAT 跳。
- 2检查 UDP 需求EtherNet/IP 隐式消息需要开放 UDP 2222。
- 3注意硬编码端口两台设备都用 102 端口时无法共用一个外部 IP。
映射 IP 在哪些情况下失效
在载荷中嵌入 IP 地址的协议是典型问题。如果帧的数据字段携带发送方地址,NAT 改写头部但不改载荷。接收方随后回复一个在其侧不存在的地址。部分工业协议有应用层网关可修正此问题,其他没有,连接在首次握手后就会停滞。
广播和组播发现也会失效。通过广播查找设备的扫描工具只能看到本网段内的设备。这通常可以接受,但会让期望看到完整机床列表的工程师感到意外。如果需要在边界之外发现设备,需要代理或代表设备应答的网关,而不是普通 NAT。
地址耗尽 是第三个限制。一对一映射需要每台设备一个外部地址。一个有 40 台机床、每台 3 个控制器的车间需要 120 个外部地址。在 /24 上没问题,在小型 DMZ 地址段上就很吃力。端口映射缓解压力,但重新带来共享端口冲突。
最后一个限制是运维层面。映射表是一份文档。如果机床搬迁或控制器更换时没人更新,表就会出错,故障看起来像网络中断。把表纳入版本控制,并让每条记录关联资产标签。
- 1载荷内嵌地址报文头 NAT 无法修改数据字段内的地址。
- 2广播发现扫描按设计止步于网段边界。
- 3映射表漂移过期的映射表会表现为硬件故障。
在一对一 NAT 与端口映射之间选择
先看协议,再看地址规划。如果设备使用可配置端口的纯 TCP 协议,端口映射就够了。如果它混用 TCP 和 UDP,或者客户端软件固定了端口号,一对一映射能在问题出现前消除一整类问题。
然后统计设备数量。约 20 个端点以下,一对一映射是低风险选项,映射表也保持可读。超过这个数量,地址预算通常迫使采用端口映射,提交前应确认每个客户端都能接受自定义端口。
再检查流量类型。轮询、文件传输和诊断可以容忍一次 NAT 跳转。循环 I/O、运动同步和安全流量不行。如果控制回路跨越边界,无论映射表怎么建,设计都是错的。
最后,确定映射表由谁负责。如果工厂 IT 负责而控制团队没有读取权限,每次变更都会变成工单。让两个团队都能查看,并记录每条条目的内部地址、外部地址、协议和端口。
- 1协议优先可配置端口允许端口映射;固定端口不行。
- 2设备数量20 个端点以下,一对一映射更简单。
- 3流量类型只有非实时流量才应跨越边界。
按情况选择映射方式
选择与你的单元匹配的行,然后在建表前确认端口和协议细节。
| 情况 | 最佳映射 | 原因 |
|---|---|---|
| 一台 S7 控制器,工厂需要读取访问 | 端口映射,TCP 102 | 一个外部端口足够;不浪费地址 |
| 两台控制器都使用端口 102 | 一对一 NAT | 共享外部端口无法同时服务两者 |
| EtherNet/IP 带隐式 I/O | 一对一 NAT 加 UDP 2222 | 仅 TCP 映射会破坏循环数据 |
| 40 台设备,小型 DMZ 地址段 | 端口映射,使用自定义端口 | 一对一需要 120+ 个外部地址 |
| 跨单元运动同步 | 控制路径上不使用 NAT | 转换延迟会破坏回路 |
| 协议将 IP 嵌入载荷 | 应用网关,而非 NAT | 报文头重写无法修正载荷 |
| 跨网段发现扫描 | 代理或网关 | 广播不跨越边界 |
工程师接下来会问的问题
如果两台控制器都使用端口 102,能否共用一个外部 IP?
普通端口映射不行。外部端口是区分它们的唯一依据,而两台设备在内部都响应 102。
一对一 NAT 为每台控制器分配独立的外部地址,因此两端都保持端口 102。如果地址紧张,规划映射表前先确认客户端是否支持自定义端口。
NAT 增加的延迟会影响使用吗?
对于轮询和文件传输,增加的延迟只有几毫秒,很少产生影响。每秒读取一次的数据记录器不会察觉。
对于循环 I/O、运动同步或安全功能,即使很小的抖动也有影响。将这些保留在设备子网内,只让诊断和程序传输跨越边界。
为什么我的扫描工具只能看到部分设备?
发现通常依赖广播或组播,而这些帧止步于网段边界。另一侧的设备对普通扫描不可见。
如果需要跨网段的完整设备列表,使用代表设备应答的网关或代理。普通 NAT 和映射 IP 不转发广播。
当协议在载荷内携带 IP 地址时,会出现什么问题?
NAT 重写数据包头部,而不是数据字段。远端设备从载荷中读到旧地址,并向一个无法到达的地址回复。
连接通常完成握手后停滞。你需要理解该协议的应用层网关,而不是仅做头部转换的规则。
如何防止映射表过期?
将其作为受控文档管理。每条条目应列出资产标签、内部地址、外部地址、协议和端口。
设备移动或控制器更换时都要审查。过期条目通常看起来像网络故障,会把错误的团队引向错误的问题。
将每个单元隔离在独立子网上值得吗?
在大多数工厂值得。按单元划分子网可让每台设备保留默认地址,并阻止广播流量扩散。
代价是每个单元一个边界设备和一张需要维护的映射表。这通常比重新编号每台控制器以适配全厂地址规划更便宜。
