文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C 语言网络编程 — NAT 网关运行原理

2023-08-31 11:36

关注

文章目录

NAT(Network Address Translation,网络地址转换)是一种 L3 网络层的 IP 地址转换技术,由 IETF 定义标准,最初用于缓解 IPv4 公网地址紧缺的问题。现在广泛被应用于公网 IP(全球唯一可寻址 IP 地址)和私网 IP(10、172、192 网段)之间的转换。

除了解决公网 IP 地址紧缺的问题之外,NAT 技术还常用于支撑以下网络功能:

  1. 数据安全伪装:可以将私网 IP 地址信息统一转换为公网 IP 地址,不让私网主机直接暴露在公网上,以此来提供网络安全性。
  2. 负载均衡:通过修改 srcIP、dstIP、dstPort 将数据包转发到后端 Real Server 进行处理。详细参考 LVS-NAT 技术实现。
  3. 透明代理:将 HTTP request 重定向到指定的 HTTP 代理服务器。
  4. 等等。

在这里插入图片描述

NAT 技术的类型

NAT GW 的基本原理是在转发 IP 数据包时,对其 srcIP/dstIP 甚至是 srcPort/dstPort 进行编辑和转换。

从 IP 映射关系上,可以细分为:

在这里插入图片描述

从 IP 编辑和转换类型上,可以细分为:

NAT 技术的基本原理

在这里插入图片描述

如上图所示,NAT GW 具有对外和对内的 2 类网络端口:

如果此时 NAT GW 已经配置了私网网段和公网 IP 地址之间的动态 NAT 规则,那么当私网中的 ClientA 192.168.1.2 向公网中 Web Server 202.20.65.4 发送了 1 个 IP Packet(srcIP=192.168.1.2、dstIP=202.20.65.4)时会执行以下 NAT 行为。

在这里插入图片描述

NAT 技术的连接跟踪功能

动态 NAT 技术需要依赖 Connection Track(连接跟踪)功能来维护动态的地址映射表,它使得 “回程包“ 知道应该转发给哪个私网 IP 地址。如下图所示:

在这里插入图片描述

NAPT 技术的基本原理

NAPT(Network Address Port Translation)用于实现将一个公网 IP 地址映射到多个私网 IP 上。如下图所示。

在这里插入图片描述

NAPT 技术的连接跟踪功能

NAT GW 的 Connection Track 还用于支持 NAPT 技术,

在这里插入图片描述

NAT Server

NAT Server,顾名思义是一台服务器角色,可以主动接受公网 Client 的请求,并转发到后端私网 IP 地址。实现的原理和上述一致,区别在于由于应用场景的不同,所以 NAT Table Entries 的创建时机不同。

NAT 穿透

NAT 穿透是一种特殊的应用场景,顾名思义就是 “绕过 NAT GW“,实现两个网络间的 P2P(点到点)直接通信。NAT 穿透在多种场景中有用,例如:

Linux iptables NAT 转发操作需要在 filter 表中 FORWARD 链中允许,并且打开 Kernel ip_forwarding 转发功能。

另外,由于 iptables 会主动维护 NAT Table,所以在使用 iptables 配置时往往只需要配置 SNAT 或 DNAT 即可 “回包“,而无需为一个数据流同时创建 2 条规则。同时,Linux iptables 在 Kernel 中会将 Netfilter 和 ConnTrack 组合支撑会话跟踪功能。

SNAT

SNAT 作用于 Egress 流量,所以在 iptables 的 POSTROUTING 链生效。出站路径为:APP => TCP/IP stack 路由子系统 => filter:OUTPUT => nat:POSTROUTING => 出站。

$ iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to 198.51.100.3 

在动态 NAT 场景中,还需要使用 IP 地址伪装模式(MASQUERADE),这是一种动态 SNAT 技术,通常用于家庭网络或移动网络。

$ iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

在这里插入图片描述

DNAT

DNAT 作用于 Ingress 流量,所以在 PREROUTING 链中生效。

$ iptables -t nat -I PREROUTING -p tcp -d 198.51.100.3 --dport 80 -j DNAT --to 192.168.0.2

在这里插入图片描述

NAPT

NAPT 通常和 DNAT 一起使用,例如:将本机公网 IP 的 2222 端口映射到虚拟机内网 IP 的 22 端口。

$ iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22# 测试。$ ssh root@210.14.67.127 -p 2222

来源地址:https://blog.csdn.net/Jmilk/article/details/131905708

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯