1. IPsec与NAT的关系

NAT作为一个IPV4的地址转换协议,它最初的目的是用来最解决IPv4地址不足的问题。通过NAT协议,局域网内的多个主机可以共同使用一个公网地址,这在很大程度上减轻了IPV4地址短缺的问题。但是随着NAT的发展,它也用来实现屏蔽一个公司或者企业的内部网络,从而可以对外隐藏真实的内部IP地址,从而降低被攻击的风险,如果从这方面考虑,就算互联网已经过渡到IPV6时代,NAT可能还是会存在的。广义的NAT设备根据转换的对象不同可以分为两种:NAT和NAPT。

1.1 狭义NAT:只转换IP地址

根据转换的地址的不同又可以分为:

  • 源NAT::只转换源IP地址。一般说来源NAT主要用在报文接入互联网时,将本地私网地址转换为公网地址;
  • 目的NAT:只转换目的IP地址。一般说来目的NAT用在报文从公网进入私网地址时,将目的地址由公网地址转换为本地私网地址。
  • 双向NAT:同时转换源IP和目的IP地址。

1.2 NAPT:转换IP地址和端口

NAPT与上述的几种类型的NAT最主要的区别就是把报文中的端口也做映射(转换),这种应用也是比较常见的。转换端口的主要原因,个人认为为了通过端口来实现多路分解和复用,后面会对这种情景做一个详细的描述。

1.3 IPsec与NAT

在RFC3715中,已经比较详细的说明了IPSec与NAT存在的问题。这里做一个简单的描述:
IPsec的封装协议包括AH(认证头协议)ESP(封装安全载荷协议)

  • AH协议由于对整个IP报文进行完整性检验,而通过NAT设备时会修改IP地址(可能还有端口),因此修改后的报文在对端解析时会产生错误,从而导致协商失败,这种矛盾是不可调和的;
  • ESP协议制作IP数据部分做加密和完整性检验,而不包括IP头部信息,因此ESP协议可以应用在NAT环境中,但是也存在其他的问题:例如传输模式下计算传输层校验和时需要伪头部,这是需要真实的IP地址等,这些问题可以通过特定的方式来解决和克服,后来就出现了一个解决方案:NAT穿越(简称NAT-T)。

2. NAT-T环境搭建

关于NAT-T环境的搭建,下面只做原理性介绍,不做具体的配置操作。
下面的拓扑中,两台隧道节点均位于NAT设备之后:FW1作为发起端

上述拓扑中,防火墙FW1和FW2分别位于两个不同的网络中,并且都位于企业的NAT网关之后,用来保护不同的子网,通过IPSec协议创建的隧道用来实现主机10.151.18.14和主机172.17.144.129之间的通信。
通讯点:10.151.18.14 和 172.17.144.129
加密点: FW1和FW2

2.1 FW1配置说明

  • 首先由于通信点和加密点位于不同的设备上,因此我们使用隧道模式进行通信
  • IPsec隧道参数:
    对端IP为:103.22.254.200
    本段IP为:172.21.1.1

    说明: 一般情况下通过互联网建立IPsec隧道,对端的IP地址应该为对端的公网IP地址,私网地址我们是无法得知的(这边是NAT用来保护内部网络地址的情景)。对端的设备可能为隧道的一个节点,也可能为一个NAT设备,它在收到报文后通过目的NAT将报文目的地址由公网地址(比如102.22.254.200)转换为私网地址(如10.28.1.2),这样FW2便可以收到并处理响应的IPsec报文。
  • 添加到103.22.254.0/24的静态路由,下一跳为172.21.1.2; 否则由于缺少下一跳导致报文无法成功发送

2.2 FW2配置说明

FW2的配置于FW1相类似,只是隧道节点不同:

  • 首先由于通信点和加密点位于不同的设备上,因此我们使用隧道模式进行通信
  • IPsec隧道参数:
    对端IP为:10.28.1.1
    本段IP为:103.22.254.1
  • 添加到103.22.254.0/24的静态路由,下一跳为10.28.1.1。 否则由于缺少下一跳导致报文无法成功发送

2.3 NAT网关1配置说明

如果只考虑FW1作为隧道的发起端,那么只需要配置一个源NAT转换即可:

操作 源IP 目的IP
转换前 172.21.1.1 103.22.254.200
转换后 103.22.254.1 102.22.254.200

2.4 NAT网关2配置说明

如果只考虑FW1作为隧道的发起端,那么只需要配置一个目的NAT转换即可:

操作 源IP 目的IP
转换前 103.22.254.1 102.22.254.200
转换后 103.22.254.1 10.28.1.2

3. NAT-T环境小结

上述NAT-T环境中虽然两台FW设备IPsec隧道节点信息配置完全不同,但是通过NAT转换后就会完成FW1与FW2隧道的建立,这便是NAT存在的结果。关于NAT-T的其他知识后续继续更新,其中包括端口滑动、NAT-T类型、openswan中NAT-T的协商流程等

IPsec NAT-T说明和环境搭建的更多相关文章

  1. hadoop环境搭建之关于NAT模式静态IP的设置 ---VMware12+CentOs7

    很久没有更新了,主要是没有时间,今天挤出时间验证了一下,果然还是有些问题的,不过已经解决了,就发上来吧. PS:小豆腐看仔细了哦~ 关于hadoop环境搭建,从单机模式,到伪分布式,再到完全分布式,我 ...

  2. openswan源码ubantu下编译、安装、基本环境搭建

    openswan的编译过程 文章目录 openswan的编译过程 1. 下载源码: 2. 在虚拟机上解压后编译: 2.1 查看INSTALL文件 2.2 查看文件buildlin.sh文件 3. 查看 ...

  3. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  4. Linux环境搭建-在虚拟机中安装Centos7.0

    最近在空闲时间学习Linux环境中各种服务的安装与配置,都属于入门级别的,这里把所有的学习过程记录下来,和大家一起分享. 我的电脑系统是win7,所以我需要在win7上安装一个虚拟机-VMware,然 ...

  5. node.js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

  6. Linux交叉开发环境搭建 —— 效率之源

    楼主今天终于把所有Linux开发环境需要的软件下载完毕了.虽然以前也是搭建过的,时间久了又折腾了一晚上. 交叉环境: Windows.Linux文件共享 SecureCRT 连接虚拟机终端 工具: V ...

  7. Hadoop基础教程之分布式环境搭建

    前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里,我们采用这样的策略来模拟环境,我们使用3台ubu ...

  8. Hadoop学习笔记(3)——分布式环境搭建

    Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...

  9. Unix/Linux环境C编程入门教程(9) unbntu CCPP开发环境搭建

    1.      首先启动VMware,如果没有安装,请查看前面VMware的安装视频 2 启动虚拟机向导,选择自定义 3 单击下一步 4 选择稍后安装操作系统 5 .选择unbntu 64linux ...

随机推荐

  1. Spring Cloud分区发布实践(4) FeignClient

    上面看到直接通过网关访问微服务是可以实现按区域调用的, 那么微服务之间调用是否也能按区域划分哪? 下面我们使用FeignClient来调用微服务, 就可以配合LoadBalancer实现按区域调用. ...

  2. Docker 网络解读

    Docker 容器在运行时,会涉及多个容器相互连接,甚至与宿主机上的应用连接的问题.既然需要产生连接,那么就必然要依赖网络. 网络在Docker的技术体系中,是一个不容易搞清楚的要点.因此,希望您读完 ...

  3. [Ynoi2011]初始化 题解

    第一道Ynoi,纪念一下. 众所周知,Ynoi会进行惨无人道的卡常操作,所以我们可以使用暴力去做Ynoi. 于是乎,我们考虑分块+暴力. 对于操作2,不难发现是道裸的分块,可以抄P3372的代码. 对 ...

  4. Sqli-labs 注入靶场(1-22)

    Sqli-labs靶场1-22 Sql注入的本质是代码和数据的未分离,导致用户的输入可以对数据库产生恶意的输入或输出. 本篇博客旨在通过Sqli-labs的第1-22关,详细的描述Sql注入的相关场景 ...

  5. finalize() 方法——Java中垃圾回收提醒方法

    finalize() Java 允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用来清除回收对象. 例如,你可以使用 finalize() 来确保 ...

  6. Spring源码阅读-BeanFactory体系结构分析

    BeanFactory是Spring中非常重要的一个类,搞懂了它,你就知道了bean的初始化和摧毁过程,对于深入理解IOC有很大的帮助. BeanFactory体系结构 首先看一下使用IDEA生成的继 ...

  7. Docker部署Zookeeper部署实践(1)

    Zookeeper可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等 1. 抓取Zookeeper镜像 命令:docker pull zookeeper 2. 将Zookeeper镜像保存为 ...

  8. Linux线程简单介绍

    1.进程与线程 2.使用线程的理由 3.有关线程操作的函数 4.线程之间的互斥 5.线程之间的同步 6.试题最终代码 1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构 ...

  9. Map的putAll方法验证

    下面的程序验证了Map的putAll方法的行为特性,代码如下: import java.util.HashMap; public class Map_putAllTest { public stati ...

  10. 区块链-NFT 的实现原理

    作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. 博客:http://www.cnblogs.com/linguanh/ 掘金:https://juejin.im/user/1785262 ...