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

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解