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. Jupyter Kernel Error 解决办法

    首先在pycharm的terminal中输入 python -m ipykernel install --user 之后会如下图显示: 这就是kernel的安装路径. 然后输入: jupyter ke ...

  2. ListPopupWindow和Popupwindow的阴影相关问题demo总结

    Popupwindow: 优点:可以通过setBackgroundDrawable()来重新设置阴影. 缺点:当AnchorView是可移动的,比如移动到屏幕的左右边界.左下角.右下角时,Popupw ...

  3. 控制流程之if判断与while、for循环

    一.if判断 1.什么是if判断? 接收用户输入的名字 接受用户输入的密码 如果用户输入的名字=正确的名字 并且 用户输入的密码=正确的密码 告诉用户登录成功 否则, 告诉用户登录失败 2.为何要有i ...

  4. C++STL——vector类

    vector容器 1.1 vector容器的基本概念 Array 是静态空间,一旦配置了就不能改变,要换大一点或者小一 点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的 数据搬 ...

  5. 浅谈Java迭代器

    迭代器Iterator 概述: 迭代器(Iterator):它不是一个容器,它是一种用于访问容器的方法,可用于迭代 List.Set和Map等容器. 迭代:一个一个的往外拿. 作用:帮我们遍历或者拿到 ...

  6. 用expect做自动运行脚本

    下面的脚本演示了在Ubuntu上安装expect,写一个切换用户的expect脚本,并运行脚本看到效果的过程. root@guserver:~# apt-get install expect godu ...

  7. CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记

    CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记 cas服务器的搭建 导出证书(1和2步骤是找了课程,随便写了一下存记录,不过对于自己测试不投入使用应该不影响) C:\Users\D ...

  8. Debian 11 “bullseye” 安装笔记

    作者:gc(at)sysin.org,主页:www.sysin.org Debian 版本:11 代号:bullseye 发布日期:2021.08.14 内核版本:5.10 $ uname -a Li ...

  9. ☕【Java技术指南】「Guava Collections」实战使用相关Guava不一般的集合框架

    Google Guava Collections 使用介绍 简介 Google Guava Collections 是一个对 Java Collections Framework 增强和扩展的一个开源 ...

  10. SQL Server 判断数据库中是否存在表

    使用场景 可以反复的执行相同脚本 方式1:查询sysobjects表 if EXISTS (SELECT * from sysobjects WHERE name='test_table') DROP ...