博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NAT及跨网络命名空间的网络地址转换
阅读量:4179 次
发布时间:2019-05-26

本文共 2026 字,大约阅读时间需要 6 分钟。

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

 

转载地址:http://zhlai.baihongyu.com/

你可能感兴趣的文章
菜鸟文科生的java之路:流程控制语句
查看>>
北海糖:Java初阶练习题
查看>>
不知道什么是数组?看这里就好了
查看>>
文科生北海唐的Java之路:方法(慕课)
查看>>
自学Java的轨迹线路
查看>>
如何更好的隐藏你自己,让我们谈谈什么是封装?
查看>>
文科生北海糖的:Java之路——继承
查看>>
Makefile 中:= ?= += =的区别
查看>>
消灭编译警告(Warning)
查看>>
(GCC) How can I hide "defined but not used" warnings in GCC?
查看>>
错误: 隐式声明函数‘kmalloc’ [-Werror=implicit-function-declaration]
查看>>
error: two or more data types in declaration specifiers原因及解决方法
查看>>
Linux驱动基础开发2
查看>>
ioctl在socket中的一些用法及示例
查看>>
Linux设备驱动--块设备(二)之相关结构体
查看>>
Linux设备驱动--块设备(四)之“自造请求”
查看>>
Nand Flash和Nor Flash相关知识
查看>>
NAND flash和NOR flash的区别
查看>>
writeb(), writew(), writel(),readb(), readw(), readl() 宏函数
查看>>
NOR Flash擦写和原理分析
查看>>