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

相关文章

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五