SNAT和DNAT

NAT介绍

NAT网络地址转换(Network Address Translation)是一种常见的网络技术,主要用于私有网络和公共网络之间通信。

DNAT

DNAT介绍

DNAT目标地址转换(Destination Network Address Translation)是NAT的一种形式,主要将外部网络的目标IP地址转换为内部网络中的IP地址

DNAT示例

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80

SNAT

SNAT介绍

SNAT原网络地址转换(Source Network Address Translation)是NAT的一种形式,主要将内部网络的源IP地址转换为外部网络中的IP地址

SNAT示例

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.10

Kubernetes网络问题分析

问题现象

Pod访问外部服务时,在宿主机抓包发现同一请求出现两次:

  • Pod IP (100.64.25.264) → 外部服务
  • 节点 IP (xx.xx.22.38) → 外部服务

时间戳显示两次请求间隔32微秒,响应也有对应的两次。

排查过程

  1. 确认100.64.x.x为Pod IP,非Service IP
  2. 检查应用层无重复请求逻辑
  3. 排除负载均衡和Ingress转发问题
  4. 分析iptables规则发现SNAT配置

Iptable命令返回结果

根本原因

Kubernetes SNAT机制导致

Pod访问外部服务时自动触发源地址转换,原始请求(Pod IP)经SNAT转为节点IP,宿主机抓包能看到NAT前后的两个数据包,32微秒延迟为SNAT处理时间,属正常范围

结论

此为Kubernetes网络正常行为,并非故障,SNAT确保外部服务流量能正确返回到集群内部




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • Clickhouse Drop表过大异常
  • Jmeter使用指南
  • Excel导入图片URL并显示图片
  • Shell命令汇总
  • Minio Client 命令