×

DNAT 目标网络地址转换(Destination Network Address Translation) 修改正在传输的数据包的目标地址 进行端口映射通常需要使用网络地址转换(NAT)规则或端口转

hqy hqy 发表于2025-02-07 22:54:34 浏览13 评论0

抢沙发发表评论

DNAT 目标网络地址转换(Destination Network Address Translation) 修改正在传输的数据包的目标地址 进行端口映射通常需要使用网络地址转换(NAT)规则或端口转发来实现。New-NetNat 进行配置和管理;Add-NetNatStaticMapping 命令的常用参数和功能分类表;Get-NetNatStaticMapping 命令

DNAT 代表 目标网络地址转换(Destination Network Address Translation)。

它是一种用于计算机网络的技术,用于修改正在传输的数据包的目标地址,通常由路由器或防火墙执行。DNAT 通常用于将来自外部网络的流量重定向到特定的内部 IP 地址,特别是在防火墙或路由器后面设置 web 服务器、邮件服务器或 FTP 服务器等服务时。

DNAT 的关键点:

  • 目的:将传入的流量(目标)重定向到私有网络中的内部服务器。

  • 常见用途:通常用于端口转发,其中将公共 IP 地址映射到网络中服务器或设备的私有 IP 地址。

  • 典型应用场景:用户访问公共 IP 上的 web 服务时,可能会被引导到内部服务器,例如具有私有 IP 的 web 服务器。

示例场景:

  • 一家公司有一个 web 服务器,内部 IP 地址是 192.168.1.100,但外部世界通过公共 IP(例如 203.0.113.5)访问该服务器。

  • 防火墙或路由器执行 DNAT,将传入请求的目标地址从 203.0.113.5 转换为 192.168.1.100,从而允许服务器响应请求。

这种技术在负载均衡或提供外部访问内部资源等场景中非常有用。

端口映射通常与目的网络地址转换(DNAT)概念相关联。在网络中,DNAT 是一种技术,用于将传入的数据包的目的 IP 地址和/或端口号修改为内部网络中另一台计算机的 IP 地址和端口号。这样可以实现将外部流量导向内部特定计算机或服务的功能。因此,端口映射通常涉及 DNAT 技术,用于在网络中重定向特定端口的流量。


目标网络地址转换(DNAT,Destination Network Address Translation) 是一种常见的网络地址转换技术,它在网络层上工作,主要用于修改数据包的目标地址,以便将外部请求转发到内部网络中的不同设备。DNAT 通常用于解决内部网络与外部网络之间的通信问题,尤其是在防火墙、路由器或网关中使用,它在公网与私网之间进行地址转换。

DNAT 的底层原理:

  1. 基本概念: DNAT 是 NAT(网络地址转换)的一种形式,它专注于修改数据包的目标地址,即改变进入网络的请求的目标 IP 地址。在 DNAT 中,原始数据包的目标 IP 地址被修改为另一个地址,从而将请求转发到另一个机器。

  2. 工作流程: 当外部网络(通常是互联网)发送请求到内网服务器时,数据包会首先到达边界路由器或防火墙设备。这个设备通过 DNAT 技术将数据包的目标 IP 地址从公网上的 IP 地址修改为私网的 IP 地址,并将请求转发到正确的内网主机。

    例如,假设:

    • 公网 IP 地址 mportant;">203.0.113.1 被配置为防火墙上的入口。

    • 防火墙会将访问 203.0.113.1:80 的请求转发到内网服务器 192.168.1.10:80 上。

  3. 转换过程

    • 原始数据包:外部客户端发送请求,目标地址是防火墙的公网 IP(例如 203.0.113.1:80)。

    • NAT 设备(如路由器、防火墙):设备接收到数据包后,查看目标端口并进行匹配,查找相应的转换规则。例如,防火墙可能有一条规则,指示将 203.0.113.1:80 转发到内网服务器 192.168.1.10:80

    • 目标地址修改:设备修改目标 IP 地址,将其从公网地址 203.0.113.1 改为私网地址 192.168.1.10,并保持端口号不变(如果有端口号映射)。

    • 转发数据包:经过修改后的数据包被转发到目标地址,即 192.168.1.10 上,目标主机接收到该请求并做出响应。

  4. DNAT 与 SNAT 的区别

    • DNAT(目标网络地址转换):主要用于修改数据包的目标地址,通常用于将外部请求转发到内部网络中的服务器或服务。DNAT 主要解决外部到内部的连接问题。

    • SNAT(源网络地址转换):与 DNAT 相对,SNAT 主要用于修改数据包的源地址,通常用于内部网络设备发出的请求访问外部网络。SNAT 主要解决内部到外部的连接问题。

  5. 常见应用场景

    • Web 服务器负载均衡:多个内网 Web 服务器可能共享一个公网 IP 地址,外部用户访问某个公网 IP 时,DNAT 可以将请求根据负载均衡算法转发到不同的服务器。

    • 端口转发:某些服务(如 Web 服务、SSH 等)可能位于内部网络中,通过 DNAT 可以将外部的特定端口(如 80 或 443)转发到内部网络中的特定服务器。

    • 远程访问:为外部用户提供对内部网络特定服务的访问,例如通过 DNAT 将外部访问请求转发到内网中的远程桌面服务(RDP)或数据库服务。

  6. 配置示例: 在 Linux 系统上,使用 iptables 配置 DNAT 时,可以使用如下命令:

    bashCopy Code
    iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80

    这条命令的意思是:当目标地址是 203.0.113.1 且目标端口是 80 的 TCP 请求到达时,将目标地址转换为 192.168.1.10 且目标端口保持为 80,并将数据包转发到该内部服务器。

DNAT 的优势与挑战:

优势:

  1. 简化网络架构:通过 DNAT,多个内部服务器可以共享同一个公网 IP 地址,减少了公网 IP 的消耗。

  2. 安全性:内部网络的私有 IP 地址对外部用户不可见,增加了网络的安全性。

  3. 高可用性:通过配置负载均衡等规则,DNAT 可以帮助实现高可用性和冗余。

挑战:

  1. 状态跟踪:由于 DNAT 处理的是目标地址,因此设备需要准确地跟踪每个连接的状态,确保请求的正确转发。

  2. 性能:对于高流量环境,NAT 设备可能成为瓶颈,影响整体网络性能。

  3. 端口限制:某些应用程序可能需要使用特定的端口,DNAT 可能需要额外的配置来处理端口映射。

总之,DNAT 是解决内外网通信问题的有效技术,通过修改数据包的目标地址,将外部流量安全、准确地转发到内部网络中的目标主机上。


Windows操作系统上进行端口映射通常需要使用网络地址转换(NAT)规则或端口转发来实现。下面是使用netsh命令进行端口映射的示例:

使用 netsh 命令进行端口映射

  1. 添加端口映射规则

powershellCopy Code
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
  • listenaddress: 本地地址,通常为 0.0.0.0(所有接口)

  • listenport: 本地端口,你想要映射的端口

  • connectaddress: 目标地址,映射到的目标服务器地址

  • connectport: 目标端口,映射到的目标服务器端口

  1. 查看已添加的端口映射规则

powershellCopy Code
netsh interface portproxy show all
  1. 删除特定端口映射规则

powershellCopy Code
netsh interface portproxy delete v4tov4 listenaddress=localaddress listenport=localport

注意:在运行这些命令之前,请确保以管理员权限打开PowerShell或命令提示符。

示例

假设你想将本地端口80映射到远程服务器的端口8080,示例如下:

powershellCopy Code
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=destaddress connectport=8080

这样就会将本地计算机上的所有流量发送到本地端口80,并将其转发到远程服务器的端口8080上。

通过使用netsh命令,你可以在Windows上设置简单的端口映射规则。


通过 PowerShell 的其他相关命令和参数来进一步对 New-NetNat 进行配置和管理。以下是一些 New-NetNat 的参数功能分类表:

功能类别参数/选项功能描述
创建 NAT 实例-Name设置 NAT 实例的名称。
配置内外部网络-InternalIPInterfaceAddressPrefix设置 NAT 规则适用的内部网络 IP 地址范围。例如:192.168.1.0/24

-ExternalIPAddress设置 NAT 规则适用的外部 IP 地址。通常是公共 IP 地址。
NAT 类型设置-NATType配置 NAT 类型,支持的选项包括 Static(静态 NAT)和 Dynamic(动态 NAT)。
启用或禁用 NAT-Enabled启用或禁用 NAT 实例。值为 True 或 False
配置网络接口-InternalInterface指定内部网络接口。如果你有多个网络接口,使用此参数来选择一个接口。

-ExternalInterface指定外部网络接口,用于与互联网或其他网络连接。
设置端口转发-StaticMapping创建静态映射,用于指定通过外部 IP 地址进行端口转发。
指定网络类型-IPv4Address为 IPv4 配置 IP 地址范围。

-IPv6Address为 IPv6 配置 IP 地址范围。
验证和调试功能-PassThru返回命令的结果,可以用于后续验证或调试。
描述和备注-Description为 NAT 实例添加描述,以便管理员识别。
高级配置-InboundConnections配置允许或拒绝入站连接。此参数可控制入站流量的处理方式。

示例:

  1. 创建一个新的 NAT 实例并启用:

    powershellCopy Code
    New-NetNat -Name "MyNat" -InternalIPInterfaceAddressPrefix "192.168.1.0/24" -ExternalIPAddress "203.0.113.5" -Enabled $true
  2. 创建静态端口转发规则:

    powershellCopy Code
    New-NetNat -Name "MyNat" -InternalIPInterfaceAddressPrefix "192.168.1.0/24" -ExternalIPAddress "203.0.113.5" -StaticMapping "80:80,443:443"

通过这些参数,您可以灵活地配置和管理网络的地址转换策略,从而优化和控制流量的路由。


Add-NetNatStaticMapping 是 PowerShell 中用于在现有的 NAT 实例中添加静态端口映射的命令。它并没有子命令,但可以通过各种参数来配置静态端口映射规则。下面是 Add-NetNatStaticMapping 命令的常用参数和功能分类表:

功能类别参数/选项功能描述
基础配置-NatName指定已有的 NAT 实例名称。

-InternalIPAddress内部网络的 IP 地址。此地址将用于端口映射的目标。

-InternalPort内部网络上目标主机的端口。
外部网络配置-ExternalIPAddress外部网络的 IP 地址。该地址是映射的公共地址。

-ExternalPort外部端口,通过此端口访问内部端口。
协议配置-Protocol指定协议类型。支持的选项有 TCP 和 UDP
映射类型配置-TranslationType映射类型,支持 Dynamic(动态映射)或 Static(静态映射)。
网络接口配置-InterfaceIndex指定网络接口的索引。可用于指定使用的网络接口。
描述信息-Description给静态端口映射添加描述信息。
启用或禁用映射-Enabled控制该静态映射是否启用。$true 表示启用,$false 表示禁用。
备用配置-PassThru返回命令的输出对象,以便进行进一步的操作或验证。

示例:

  1. 在现有的 NAT 实例中添加静态映射:

    powershellCopy Code
    Add-NetNatStaticMapping -NatName "MyNat" -InternalIPAddress "192.168.1.10" -InternalPort 8080 -ExternalIPAddress "203.0.113.5" -ExternalPort 8080 -Protocol TCP -Description "Web Server"
  2. 添加多个静态映射并启用:

    powershellCopy Code
    Add-NetNatStaticMapping -NatName "MyNat" -InternalIPAddress "192.168.1.10" -InternalPort 8080 -ExternalIPAddress "203.0.113.5" -ExternalPort 8080 -Protocol TCP -Enabled $trueAdd-NetNatStaticMapping -NatName "MyNat" -InternalIPAddress "192.168.1.10" -InternalPort 443 -ExternalIPAddress "203.0.113.5" -ExternalPort 443 -Protocol TCP -Enabled $true

通过这些参数,Add-NetNatStaticMapping 使你能够将外部端口请求路由到内部网络的特定 IP 地址和端口上。这对于配置网络中的端口转发和静态路由非常有用。


Get-NetNatStaticMapping 是 PowerShell 中用于获取当前 NAT 实例中已配置的静态端口映射规则的命令。它没有子命令,但是可以通过多种参数来过滤、选择和查看 NAT 静态映射的详细信息。下面是 Get-NetNatStaticMapping 命令的常用参数及功能的分类表:

功能类别参数/选项功能描述
基础配置-NatName指定 NAT 实例的名称,筛选特定 NAT 实例下的静态映射。
过滤配置-InternalIPAddress过滤并仅显示匹配指定内部 IP 地址的静态映射。

-InternalPort过滤并仅显示匹配指定内部端口号的静态映射。
外部网络配置-ExternalIPAddress过滤并仅显示匹配指定外部 IP 地址的静态映射。

-ExternalPort过滤并仅显示匹配指定外部端口号的静态映射。
协议配置-Protocol过滤并仅显示匹配指定协议(如 TCP 或 UDP)的静态映射。
状态配置-Enabled过滤并显示启用($true)或禁用($false)的静态映射。
详细输出配置-PassThru返回命令的输出对象,以便进一步操作或验证。
接口配置-InterfaceIndex过滤并显示在指定网络接口上的静态映射。
描述信息-Description过滤并仅显示包含指定描述的静态映射。

示例:

  1. 获取所有静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping
  2. 获取特定 NAT 实例下的所有静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -NatName "MyNat"
  3. 获取特定内部 IP 和端口的静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -InternalIPAddress "192.168.1.10" -InternalPort 8080
  4. 获取所有启用的静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -Enabled $true
  5. 获取特定外部 IP 的静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -ExternalIPAddress "203.0.113.5"
  6. 获取所有协议为 TCP 的静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -Protocol TCP

通过这些参数,Get-NetNatStaticMapping 可以帮助你过滤和查看当前网络上 NAT 实例中的端口映射配置,便于管理和调试。


在PowerShell中进行端口映射可以使用New-NetNatAdd-NetNatStaticMapping命令来实现。以下是在PowerShell中进行端口映射的示例:

使用 New-NetNat 和 Add-NetNatStaticMapping 命令进行端口映射

  1. 创建一个新的网络地址转换(NAT)

powershellCopy Code
New-NetNat -Name "MyNAT" -InternalIPInterfaceAddressPrefix "192.168.0.0/24"

这将创建一个名为"MyNAT"的新NAT,并指定内部IP接口的地址前缀。

  1. 添加静态映射规则

powershellCopy Code
Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0" -ExternalPort 8080 -InternalIPAddress "192.168.0.10" -InternalPort 80 -Protocol TCP
  • ExternalIPAddress: 外部IP地址,通常为0.0.0.0(所有外部地址)

  • ExternalPort: 外部端口,映射到的外部端口

  • InternalIPAddress: 内部IP地址,映射到的目标服务器地址

  • InternalPort: 内部端口,映射到的目标服务器端口

  • Protocol: 协议类型,如TCP或UDP

示例

假设你想将外部端口8080映射到内部服务器的端口80,示例如下:

powershellCopy Code
New-NetNat -Name "MyNAT" -InternalIPInterfaceAddressPrefix "192.168.0.0/24"Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0" -ExternalPort 8080 -InternalIPAddress "192.168.0.10" -InternalPort 80 -Protocol TCP

这将创建一个名为"MyNAT"的NAT,并将外部端口8080映射到内部服务器的端口80上。

通过使用New-NetNatAdd-NetNatStaticMapping命令,你可以在PowerShell中设置端口映射规则。

在PowerShell中查看端口映射规则可以使用Get-NetNatStaticMapping命令。这个命令可以列出当前配置的所有静态映射规则。以下是如何在PowerShell中查看端口映射规则的示例:

使用 Get-NetNatStaticMapping 命令查看端口映射规则

  1. 查看所有端口映射规则

powershellCopy Code
Get-NetNatStaticMapping

此命令将列出所有当前配置的端口映射规则,包括外部IP地址、外部端口、内部IP地址、内部端口和协议等信息。

  1. 查看特定端口映射规则

如果你只想查看特定的端口映射规则,可以使用筛选参数来限制结果。例如,查看外部端口为8080的映射规则:

powershellCopy Code
Get-NetNatStaticMapping | Where-Object {$_.ExternalPort -eq 8080}

这将显示外部端口为8080的端口映射规则的详细信息。

通过使用Get-NetNatStaticMapping命令,你可以轻松查看当前配置的端口映射规则,以便进行监控和管理。根据需要,你还可以结合其他命令和过滤条件,对端口映射规则进行进一步的筛选和操作。


打赏

本文链接:https://www.kinber.cn/post/4749.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客