NAT及跨网络命名空间的网络地址转换

2024-03-11 11:18

本文主要是介绍NAT及跨网络命名空间的网络地址转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NAT (Network Address Translation)即网络地址转换,最初的目的是在路由器上,修改IP报文头中的源地址(source address)或目标地址(destination address),以转发报文。通过NAT,实现了私有子网中与公共网络的连接,也间接延续了IPv4的生命,推迟了IPv6的到来。

1. NAT可以分为如下几类

1) Source NAT (SNAT),也被称为Port Address Translation (PAT)

原始请求的源地址与目标地址是不可直达的,进行SNAT转换的路由器的地址与目标地址是可达的。

SNAT改变IP报文头中的源地址为当前路由器的地址,目标地址不变。而应答的目标地址就是被转换以后的源地址,也非原始请求的源地址。

对内部私有IP的服务器,SNAT使之能够访问外部公共IP的服务器(Internet)。

2) Destination NAT (DNAT)

原始请求的源地址与目标地址是不可直达的,进行DNAT转换的路由器的地址与目标地址是可达的。

DNAT改变IP报文头中的目标地址为当前路由器的地址,源地址不变。而应答的源地址就是被转换以后的目标地址,也非原始请求的目标地址。

对内部私有IP的服务器,DNAT使之能够被外部公共IP的服务器(Internet)访问。

3) one-to-one NAT

只是跨不同类型网络的桥接转换。

与之相对,SNAT和DNAT都被称为one-to-many NAT。

2. Linux通过iptables/ip6tables扩展模块实现NAT

iptables/ip6tables提供了nat表,用以实现各种NAT。nat表中提供如下chains:

  • PREROUTING,在数据包被交给路由表之前或交给iptables filter表之前,对数据包进行NAT。该Chain常用于DNAT
  • POSTROUTING,在数据包交给路由表之后,而且没有被iptables filter表过滤掉,再对数据包进行NAT。该Chain常用于SNAT
  • INPUT,没有使用
  • OUTPUT,很少使用,仅为本地机器发出的数据包而设计,但是这样的数据包往往无需NAT

3. IP Masquerade(MASQ)

IP Masquerade是Linux中的一个网络功能,是一种特殊的SNAT,也被称为hide-NAT或overlap-NAT。

开启了IP Masquerade功能的Linux主机,可以被视为IP Masquerade网关。隐藏在IP Masquerade网关之后的主机可以通过该网关访问外部Internet,而同时不暴露自己。即,从Internet只能够看到IP Masquerade网关,而无法访问隐藏在其后的主机。IP Masquerade的该特性使高度安全的网络环境成为可能。

4. 跨网络命名空间的访问

1) 从default网络命名空间,通过oam网络命名空间访问外部网络

在oam网络命名空间中配置NAT如下:

ip netns exec oam iptables -t nat -A POSTROUTING -s 192.168.1.0/30 -j SNAT --to-source 10.0.1.12
或
ip netns exec oam iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADEip netns exec oam ip6tables -t nat -A POSTROUTING -s fd00::/64 -j SNAT --to-source 2001:abcd:dabc:1::12
或
ip netns exec oam ip6tables -t nat -A POSTROUTING -o ens192 -j MASQUERADE

2) 从oam网络命名空间,通过default网络命名空间访问外部网络

在default网络命名空间中配置NAT如下:

iptables -t nat -A POSTROUTING -s 192.168.1.0/30 -j SNAT --to-source 10.0.0.12
或
iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADEip6tables -t nat -A POSTROUTING -s fd00::/64 -j SNAT --to-source 2001:abcd:dabc:2::12
或
ip6tables -t nat -A POSTROUTING -o ens160 -j MASQUERADE

参考链接:

http://www.tldp.org/HOWTO/IP-Masquerade-HOWTO/ipmasq-background2.1.html
 

这篇关于NAT及跨网络命名空间的网络地址转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797647

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON: