全 NAT 日志作为安全审计和网络日志对于企业来说是必不可少的。国内运营商和大型互联网企业也是重要的数据审计日志内容,对于网络安全来说要求至少保存半年的数据。
讨论 IPFIX 代替全 NAT 日志,是因为之前配置过 RouterOS 全 nat 日志的记录,我的操作是在配置 srcnat 时打开 log,会把每次 nat 转换的 IP 包做做日志记录下来,并通过 /system logging 设置 remote 发送到远端的 syslog 服务器并记录到数据库,但这样的操作即消耗 RoueterOS 本地 CPU 性能,又使得 syslog 服务器的日志量非常大,普通的 1G 流量全 nat 日志1天不少于 50GB。对于普通企业来说存储压力是非常大。


可以看到每一次的 IP 的 srcnat 转换包都会被记录下来,但这样记录的效率低,存储空间大。但适合有逐包/逐连接防火墙日志、审计日志或需要绝对可靠投递的合规日志。
RouterOS Traffic Flow + IPFIX 可以显著减少 NAT 日志体积,也能记录 NAT 前后地址/端口映射,如果对IPFIX字段进行合理的取舍,1GB流量的出口,1个月的日志存储估计可以控制在 15-20 GB(不同企业环境不同);
MikroTik 的说明里也明确解释了 NAT 相关字段:nat-src-address / nat-src-port 是源 NAT 后的地址和端口,nat-dst-address / nat-dst-port 是目的 NAT 后的地址和端口,nat-events 是和 NAT 相关的事件字段。可以替代一大部分“连接级 NAT 映射日志”。
如果你的“全 NAT 日志”主要用于回答这类问题:某个时间点,内网 IP:port 经过 NAT 后变成了哪个公网 IP:port
那么 IPFIX 基本具备关键字段:
first-forwarded / last-forwarded
src-address / src-port
nat-src-address / nat-src-port
dst-address / dst-port
protocol
packets / bytes
in-interface / out-interface这已经可以覆盖大多数溯源、计费、流量分析、CGNAT 映射查询需求。IETF 的 RFC 8158 也说明,IPFIX NAT logging 的目标就是记录 NAT translation 的创建/删除事件,以及 NAT 设备管理的资源信息;同时指出 IPFIX 二进制编码适合高日志量环境,例如 per-flow logging 或 CGNAT
CGNAT 的英文全称是 Carrier-Grade Network Address Translation。强调这是由网络服务提供商(ISP)在其网络基础设施层面实施的大规模 NAT 技术,以区别于普通家庭路由器上运行的 NAT。
但是它和“全 NAT 日志”有几个关键差异:
不能保证等价的地方
- Traffic Flow 是流记录,不是逐包日志。
它会按 flow 聚合,记录首包/末包时间、包数、字节数,而不是每个包都打一条日志。 - RouterOS Traffic Flow 只处理经过 CPU 的流量。
MikroTik 官方说明:硬件 offload 的流量不会出现在 Traffic Flow 里,例如Hardware-offloading硬件卸载的桥接流量。 这点非常关键,如果开启 FastTrack、HW offload、交换芯片转发,可能导致记录不完整。 - 导出通常走 UDP,存在丢包风险。
IPFIX 标准本身支持作为高效日志机制,但 RFC 8158 也提醒 NAT 日志应可靠发送到 Collector,具体传输可靠性取决于实现和部署。 RouterOS Traffic Flow target 常见配置是 UDP 2055/4739 类端口,Collector、链路或路由器 CPU 压力大时需要评估丢包。 - cache 溢出会丢 flow。
RouterOS 有 cache-entries 限制,同时官方 monitor 里有 unmanaged-packets / unmanaged-bytes 这类指标,需要持续监控。 - 采样不能用于合规 NAT 溯源。
RouterOS v7 支持 packet sampling。官方说明采样会按 sampling-interval 和 sampling-space 周期采样/跳过数据包。 如果目标是 NAT 溯源,建议关闭采样。
推荐字段模板:用于替代 NAT 映射日志
建议先只开必要字段,避免 IPFIX 记录过大:
/ip traffic-flow ipfix
set nat-events=yes \
first-forwarded=yes last-forwarded=yes \
packets=yes bytes=yes \
src-address=yes src-port=yes \
dst-address=yes dst-port=yes \
protocol=yes \
nat-src-address=yes nat-src-port=yes \
nat-dst-address=yes nat-dst-port=yes \
in-interface=yes out-interface=yes \
tcp-flags=yes

启用 traffic-flow 配置,所以你要准备一台支持 IPFIX 的服务器接收 RouterOS 发出的 traffic-flow 数据
/ip traffic-flow
set enabled=yes interfaces=all cache-entries=128k \
active-flow-timeout=5m inactive-flow-timeout=15s \
packet-sampling=no/ip traffic-flow target
add dst-address=<traffic-flow服务器_ip> port=2055 version=ipfix官方文档里 active-flow-timeout 是 flow 最大生命周期,inactive-flow-timeout 是空闲多久后导出 flow;默认分别是 30m 和 15s。 如果用于 NAT 溯源,可以考虑把 active-flow-timeout 从 30分钟 降到 5-10 分钟,避免长连接长时间不落库,但会增加 flow 条数。
传统 NAT 日志如果按防火墙规则 log=yes 或 syslog 逐连接/逐包记录,文本日志会非常大。IPFIX 的优势是:
- 二进制格式,比 syslog 文本紧凑。
- 按 flow 聚合,减少重复记录。
- 字段可裁剪,只保留溯源所需字段。
- 可以由 Collector 做压缩、分区、索引和生命周期管理。
RFC 8158 也指出,记录 destination information 会显著增加每条记录大小和存储需求。 所以如果合规或业务不要求保存目的地址,可以只保留 NAT 映射关系;但如果需要“某用户访问了哪个公网 IP/端口”的溯源能力,目的地址/端口仍然要保留。
cache-entries
如果 cache-entries 设置太小,高峰期同时活跃连接数超过 cache 容量,会出现:
- 部分新 flow 无法进入 Traffic Flow cache
- IPFIX 记录不完整
- /ip traffic-flow monitor 中可能看到 unmanaged-packets / unmanaged-bytes 增长
- NAT 溯源时可能查不到部分连接
所以,如果你准备用 IPFIX 替代 NAT 日志,cache-entries 不能太保守
核心原则是:
cache-entries >= 高峰期同时活跃 flow 数 × 安全系数安全系数建议取 1.5~3 倍。
| 场景 | 建议 cache-entries |
|---|---|
| 小型办公室,几十到几百终端 | 16k 或 32k |
| 中型网络,几百到一两千终端 | 64k 或 128k |
| 大型 NAT / CGNAT / 高并发出口 | 256k、512k,甚至更高 |
| 低端设备、内存紧张 | 从 4k、8k、16k 逐步测试 |
如果是为了替代 NAT 日志,且出口并发连接较高,我建议初始不要低于:
/ip traffic-flow
set cache-entries=128kIPFIX 在不同厂商功能名称
下面列表给出了不同厂商 IPFIX 的功能名称
| 厂商/系统 | 功能名称 | 可导出格式 |
| MikroTik | Traffic Flow | NetFlow v5/v9、IPFIX |
| Huawei | NetStream | NetStream v5/v8/v9、IPFIX,视型号/版本而定 |
| H3C | NetStream | NetStream v5/v9、IPFIX,视型号/版本而定 |
| Cisco | NetFlow / Flexible NetFlow | NetFlow v5/v9、IPFIX |
| 通用标准 | IPFIX | IETF 标准模板化 flow 协议 |