AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1001786
Accepted
J. Doe
J. Doe
Asked: 2020-02-05 11:53:19 +0800 CST2020-02-05 11:53:19 +0800 CST 2020-02-05 11:53:19 +0800 CST

NAT 是否在 ICMP 有效负载中欺骗 TCP 或 UDP 端口?

  • 772

当我从对称 nat 下的网络发送 tcp 或 udp 数据包时,我希望端口与我的计算机选择的端口不同,所以它是。但是当我发送一个低 ttl 的 udp 数据包,但它仍然设法离开 ISP 网络时,我收到一个错误 icmp 数据包,其中包含我最初作为有效负载发送的 udp 数据包,但端口由我生成系统 。

在这一点上,我怀疑 NAT 是否也没有掌握 ICMP 数据包的内容。因为我知道有必要更改真正重要的层的标头而不是有效负载。因此,在 ICMP 数据包的情况下,只有源 IP 地址,而不像我认为的那样,还有回显“子数据包”的 ip 和端口。

firewall router networking nat icmp
  • 2 2 个回答
  • 559 Views

2 个回答

  • Voted
  1. Best Answer
    Ron Maupin
    2020-02-05T12:29:25+08:002020-02-05T12:29:25+08:00

    当我从对称 nat 下的网络发送 tcp 或 udp 数据包时,我希望端口与我的计算机选择的端口不同,所以它是。

    那是 NAT 的网络地址端口转换 (NAPT)版本。基本 NAT 对传输协议没有任何作用。NAPT 必须为每个传输协议有不同的表,这就是为什么它只支持 TCP、UDP 和 ICMP,因为 TCP 端口不是 UDP 端口,而 ICMP 不使用端口,它使用查询 ID。

    我收到一个错误 icmp 数据包,其中包含我最初作为有效负载发送的 udp 数据包,但端口由我的系统生成。

    那是正确的。

    在这一点上,我怀疑 NAT 是否也没有掌握 ICMP 数据包的内容。

    对于必须返回发送应用程序的 ICMP 错误消息,是的,NAPT 必须修复 ICMP 错误消息的内容,以便目标应用程序得到错误。ICMP 错误消息将原始数据包的第一部分作为其有效负载,以便可以将其返回给正确的应用程序。如果 NAPT 修改了传出数据包,它必须将返回的 ICMP 错误消息有效负载修改为原始地址,包括端口号。

    因此,在 ICMP 数据包的情况下,只有源 IP 地址,而不像我认为的那样,还有回显“子数据包”的 ip 和端口。

    此行为在RFC 2663,IP 网络地址转换器 (NAT) 术语和注意事项中进行了解释:

    3.3 . ICMP 错误包翻译

    所有 ICMP 错误消息(重定向消息类型除外)在通过 NAT 时都需要修改。需要修改 NAT 的 ICMP 错误消息类型包括 Destination-Unreachable、Source-Quench、Time-Exceeded 和 Parameter-Problem。NAT 不应尝试修改重定向消息类型。

    对 ICMP 错误消息的更改将包括对嵌入在 ICMP 错误消息有效负载中的原始 IP 数据包(或其部分)的更改。为了使 NAT 对终端主机完全透明,必须修改嵌入在 ICMP 数据包负载中的 IP 头的 IP 地址,必须相应修改同一 IP 头的校验和字段,以及随附的传输头。还必须修改 ICMP 标头校验和以反映对有效负载中的 IP 和传输标头所做的更改。此外,还必须修改正常的 IP 标头。


    如您所见,NAT,尤其是 NAPT,非常占用资源,这就是为什么一些供应商(例如 Cisco)只允许在具有 NAT 硬件辅助的设备上进行 NAT。

    • 2
  2. YLearn
    2020-02-05T12:28:13+08:002020-02-05T12:28:13+08:00

    NAT 是否在 ICMP 有效负载中欺骗 TCP 端口?

    由于您指的是 UDP 数据包,因此不会在 ICMP 消息中欺骗 TCP 端口。然而,出于多种原因,它很可能会重写 ICMP 消息以反映原始 UDP 流量(围绕您的主机/应用程序需要知道如何处理并可能在收到此类 ICMP 消息后做出响应)。

    这可能因 NAT 实现而异,但让我们看一下您的示例(相信您在问题中陈述的所有内容都是准确的)。

    1. 您的系统发送一个 UDP 数据包。
    2. 网关对 UDP 数据包进行 NAT。
    3. 在您的网络之外的某个地方,TTL 会递减并使帧老化。执行此操作的路由器发回 ICMP 超时消息。

    停下来想一想。生成 ICMP 超时消息的路由器将没有“我最初发送的 udp 数据包”,因为它通过了您的 NAT 网关并被转换。换句话说,生成 ICMP 消息的路由器怎么会知道要放入 ICMP 消息中的原始信息是什么?

    原始 UDP 数据包可能在 ICMP 消息的有效负载中的唯一方法是您的 NAT 网关重写它。

    • 1

相关问题

  • 用 D-LINK DFL-CPG310 防火墙替换 Cisco Pix 防火墙

  • MSMQ 防火墙端口

  • IP-KVM(在我的例子中是 ADDER Ipeps):轻松防火墙穿越

  • 远程连接 sql server 不工作,但如果防火墙禁用它呢?

  • 服务器 2003 R2 上的 Cisco VPN 客户端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve