PPTP穿透NAT之深入分析

2023-11-01

PPTP穿透NAT之深入分析_bytxl的专栏-CSDN博客大家好,现在是人静时分,我公司人员都以溜光,只有我还在面对computer,在经过不解、迷惑、结论之后,现与大家分享结果,感谢朋友Zyliday,见贤思齐的实验帮助。在研究技术原理之前,让我们先了解几个基本的概念。我们要了解NAT技术,这个就不用多说了吧!我们的主机大部分存在于一个内部网络中,有一个私有ip地址,所以所有去往Internet的数据包,都要将其源ip与端口转换,来实现数据通信https://blog.csdn.net/bytxl/article/details/45247199

大家好,现在是人静时分,我公司人员都已溜光,只有我还在面对computer, 在经过不解、迷惑、结论之后,现与大家分享结果,感谢朋友Zyliday,见贤思齐的实验帮助。

在研究技术原理之前,让我们先了解几个基本的概念。我们要了解NAT技术,这个就不用多说了吧!我们的主机大部分存在于一个内部网络中,有一个私有ip地址,所以所有去往Internet的数据包,都要将其源ip与端口转换,来实现数据通信。让我们感到幸运的是,我们对于互联网的服务应用,大部分用tcp与udp协议来传输,由于tcp与udp协议中含有端口,所以往返的数据包很容易找到归宿。但难免会有特殊出现,pptp协议,l2tp协议,ftp 协议,ipsec 协议等,根据其各自协议特殊原因,均无法顺利通过nat,俗话说兵来将挡水来土掩,nat该怎么办?

今天重点我们放到pptp协议身上。pptp是什么?pptp是其vpn隧道协议中的一种,加以其它协议的配合,成功实现了身份验证、加密数据和协议配置等问题,为远程用户创建了一条穿越公网的安全连接,下面让我们去了解PPTP协议。

PPTP流量由两条连接产生:

• PPTP控制连接

这是一个逻辑连接,表示必须通过一系列PPTP消息创建、维持和终止的PPTP隧道。 PPTP控制连接流量使用PPTP客户端上动态分配的TCP端口,以及PPTP服务器上由IANA保留的TCP端口1723。

• PPTP数据连接

当数据通过PPTP连接发送时,PPP帧将使用通用路由封装(Generic Routing Encapsulation,GRE)报头进行封装,报头包含用于识别该数据包的特定PPTP隧道的信息。

现在来分析下,由于控制连接用了端口1723,所以这条连接我们就大可放心了,根据nat发送原则,会成功将数据包转发到pptp 服务器,如果你的vpn 服务器建立于内网中,在路由上映射其1723端口到服务器就OK.

让我们看下数据连接,我们发现以经没有了tcp协议参与,反而成了GRE协议包与PPP协议包,为什么它无法通过nat呢?来看下GRE协议格式:

每个字段的详解:

我们发现根本没有发现有端口这个字段,怎么映射?没有就不做端口映射呗~~~就转换ip不就得了。哈哈其实远远不是这样的,这种非常理的数据包格式,对于nat是个问题,对于防火墙也是个问题。今天我们先论nat:先来分析如果一个位于内部网络中( 公网IP 2.2.2.2)的主机A 192.168.1.2与pptp服务器5.5.5.5建立连接,控制连接成功建立,数据连接于由没有端口,nat只做其ip的转换,于是在2.2.2.2这个网络的nat设备上有这样的一个nat表:

ip

port

协议

公网ip

公网port

目标ip

目标port

192.168.1.2

GRE

2.2.2.2

5.5.5.5

192.168.1.3

GRE

2.2.2.2

5.5.5.5

当2.2.2.2这个网络收到来自于pptp服务器的数据流包时,2.2.2.2网络的nat设备发现来自于网络5.5.5.5的gre协议数据包,是给内部主机192.168.1.2的,所以成功通信。分析如果位于2.2.2.2这个网络中的主机B 192.168.1.3 也与5.5.5.5网络中的pptp服务器通信,结果就不太理想了~~如果在nat表中还有一条到达主机192.168.1.3的gre通信,到收到一个gre协议数据包时,2.2.2.2网络中的nat设备犹豫了,这个包给谁呢?192.168.1.2?还是192.168.1.3呢?在此大家也不要忘了,我们的实验环境是只有一个公网ip,内部主机A与B出去的时候,源ip都转换成了公网的ip 2.2.2.2,所以收到的数据包都是目标ip为2.2.2.2,然后nat设备根据端口的不同转发到不同的主机。有两个客户端就无法通信,这就是网上说的位于内部的主机只能与同一服务器之间建立一个会话,不能有第二个客户端。

vpn技术的流行,但技术上有约束,人们想办法开发能穿透nat的设备,实现多路复用。在细分析gre协议后,人们发现gre协议中有一个字段,可以拿来利用,那就是这个call id值,这个值并不固定,可以改变。这个值是怎么回事呢?用来标识唯一会话的。这个值最早出现在控制连接中,客户端与服务器互相通告彼此的call id值,然后在其数据连接中,服务器call id值写上客户端的,客户端写上服务器的call id值。nat引入了一种技术nat编辑器,大家可以去看下我们的路由器,大部分自动开启了对ipsec隧道与pptp隧道协议的支持。路由器对pptp隧道的建立实施全程监控,并在每一台PPTP客户机的私有IP地址、CALL ID和公共IP地址以及PPTP服务器接收的CALL ID之间建立单独的映射关系。我可以把call id值当做端口来看,然后添加到nat表中。

让大家看一个今天做的一个实例图(pptp客户端路由器NAT表):pptp数据连接我们可以认为它有两条nat映射记录,一个用于数据包的发送,一个用于数据包的接收。

ip

port

协议

公网ip

公网port

目标ip

目标port

192.168.1.10

5000

TCP

59.173.163.119

50001

221.217.151.68

1723

192.168.1.10

30061

GRE

59.173.163.119

32769

221.217.151.68

192.168.1.10

256

GRE

59.173.163.119

256

221.217.151.68

192.168.1.11

10000

TCP

59.173.163.119

50002

221.217.151.68

1723

192.168.1.11

5868

GRE

59.173.163.119

32770

221.217.151.68

192.168.1.11

512

GRE

59.173.163.119

512

221.217.151.68

nat把客户端的call id值当做源端口,然后告诉服务器一个假的call id(应该叫转换后的call id,客户端跟端口转换一样)来充当转换后的端口。这个修改是在控制连接中修改的,然后做nat记录后发送给服务器。(说到此我说下,前两天在弯曲评论上看到了一文章,作者写到nat对其服务器的call id也转换)我认为不转换服务器的call id值

在我们实验的时候,一开始我让多个不同外网的朋友建立vpn连接,连接我这边内部vpn服务器主机,抓包发现服务器通告的call id都一样,不解?如果在同一个内部网络中,有两个客户端连接进来,服务器通告的call id不改变,通信将出故障?今天又与见贤思齐做了一个同一内部网络中,多个客户端连接情况,抓包发现服务器对于同一个ip多个客户机的连接分配了不同的call id值,所以直接修改其客户端call id便可实现流量多路复用,vpn服务器自动解决了这个同一ip不同call  id值问题。

客户端192.168.1.10的连接:

服务器方抓包分析如下:

上图:客户端在控制连接中,告诉服务器它的call id值为32769。

上图:服务器控制连接中告诉客户端它的call id值为256。

客户端抓包分析如下:

上面客户端告诉服务器它的call id为30061。

服务器告诉客户端它的call id值为256。

看了以后大家知道nat做数据包做了什么处理了吧,客户端12的连接我就不贴图了,道理一样。这样的端口改变还可以避免不同的客户端告诉服务器相同的call id,因为它无法意识到另一个主机也用了此call id ,如果nat不加转换,将出现问题。

好了不说了,明天是十一,祝大家玩的愉快。

 发表于 攻防安全   标签:  WildLee原创

«  邮件安全之PGP加密技术

ARP攻击源查找之原理分析 »

欢迎您发表高见,如果有什么错误欢迎指正,期待与您交流学习。

3 回复 到 “PPTP穿透NAT之深入分析”

  1. bigstone1998  says:

    2011年12月24日 at am9:35

    看了感觉有用,所以顶一下。

  2. zyliday  says:

    2010年10月15日 at pm2:51

    哈哈

  3. phetler  says:

    2010年10月1日 at pm2:54

    嘿嘿 注意到一个小地方没 request包的call id是变化的 reply包的call id是不变的

http://www.wildlee.org/2010_09_1087.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PPTP穿透NAT之深入分析 的相关文章

随机推荐

  • 关于WiFi和信号图标出现感叹号消除办法

    谷歌原生安卓系统当连接到移动数据网络或者WIFI网络的时候 其NetworkMonitor模块会向特定的服务器发起一个http的请求并利用收到的响应进行网络状态判断 由于谷歌的服务器被天朝屏蔽 所以导致没有返回值 这个时候谷歌安卓系统就会在
  • linux权限管理

    权限管理 文件的权限针对三类对象进行定义 user属主 缩写u group属组 缩写g other其他 缩写o 1 文件的一般权限 1 r w x的作用及含义 权限 对文件影响 对目录影响 r read 读 可以读取文件内容 可以列出目录的
  • 微信小程序导出zip、excel、word、png到手机

    1 需要使用的方法 wx request 发请求调用接口 wx showModal 打开弹框进行展示 wx setClipboardData 复制文本的数据 wx downloadFile 文件下载的方法 wx getFileSystemM
  • 互联网摸鱼日报(2023-02-26)

    互联网摸鱼日报 2023 02 26 InfoQ 热门话题 迁移工具 Air2phin 宣布开源 2 步迁移 Airflow 至 Dolphinscheduler 专访奇安信董国伟博士 目前开源安全的现状并不乐观 但其重要性已成各方共识 专
  • golang 分布式框架Origin学习笔记

    最近项目的后端需求是全球同服的 在使用语言方面确定了为golang之后 了解了一下当前的一些goalng游戏服务器框架 终于在leaf pitaya 等众多框架中选择了 Origin 主要是因为它是分布式框架 微服务架构 比较匹配做全球同服
  • curl: (3) [globbing] error: bad range specification after pos 150的解决方法

    在线上服务器上执行下面的命令 curl vo dev null http 120 52 72 46 80 fileshare3010 dfiles eu c3pr90ntcsf0 auth 1375626538db3c073c81647e8
  • 拨号软件隐藏手机号码_华为手机的拨号键有大用处,不仅能用来打电话,还有4个隐藏功能...

    手机最本质的作用就是用来与别人进行通话 所以每一部手机都拥有拨号按键 但你知道吗 华为手机的拨号按键除了能够进行拨打电话以外 还隐藏着5个功能 那么是哪些隐藏的功能呢 笔者就来为大家讲解下吧 手机的入网串码 很多人都不知道如何查找手机的入网
  • 猿如意|手把手教你下载、安装和配置PyCharm社区版

    手把手教你使用猿如意下载 安装和配置PyCharm社区版 希望能帮助到有需要的童鞋 文章目录 前言 一 下载安装猿如意 二 安装PyCharm社区版 1 通过猿如意找到PyCharm下载位置 2 安装PyCharm 三 对PyCharm社区
  • idea调试如何回退到上个断点

    我们使用idea运行java代码时 打了几个断点 想看参数 但是一不小心 手一抖 就过去了 此时如何回退到上一步呢 看图说话 如下 我有两个方法 分别有两个断点 1 此时我们的断点已经到getTest方法了 如何回到上一个method方法中
  • 我要进大厂第二讲:如何准备好一场大厂面试

    我要进大厂第二讲 如何准备好一场大厂面试 本文是我要进大厂第二讲 如何准备好一场大厂面试 4年经验 我有个同事跟我说过 他曾经的老大告诉他们 无论是否跳槽 每年都应该出去面试一下 我个人对这个想法持支持态度 至少在我们还年轻的时候应该尽量这
  • 求数组最小值和最小值的下标

    描述 定义一个含10个元素的整型数组 从键盘输入数组所有元素的值 并求该数组中的最小值和最小值的下标 如果最小值在数组中出现多次 输出最小的那个下标 输入 10个整数 输出 最小值和最小值的下标 如果最小值在数组中出现多次 输出最小的那个下
  • (U+FF1A)

    Package inputenc Error Unicode character U FF1A 错误原因 冒号 是中文格式
  • anaconda的envs的其中一个环境目录下,没有python.exe文件,只有conda-meta和scripts

    进入Anaconda软件中 删除该环境 左下角create重新创建环境 系统就会重新配置python等相关文件
  • 19-jQuery快速开发②

    jQuery快速开发 1 jQuery 属性操作 1 1 元素固有属性值 prop 1 2 元素自定义属性值 attr 1 3 数据缓存 data 1 4 案例 购物车案例模块 全选 2 jQuery 文本属性值 2 1 jQuery内容文
  • 数据库空闲连接超过最大wai_timemout时间,数据库会强行断开空闲的链接,dbcp解决方案

    虚拟空间的mysql数据库常设得很低 如wait timeout 100 在java web 应用中使用dbcp做为连接池 当数据库重启或数据库连接超过设置的最大timemout时间 数据库会强行断开已有的链接 此时当web程序访问数据库时
  • Qt5 学习之路及嵌入式开发教程18:Qt5主窗口---字体字号状态栏

    Qt5 学习之路及嵌入式开发教程18 Qt5主窗口 字体字号状态栏 这次任务要完成Qt5主窗口的界面设计第五部分 字体字号状态栏功能实现 无法用控件完成 只能用代码完成 步骤 1 在mainwidow h中添加代码 include
  • 政策效应,基于反事实框架

    政策效应 基于反事实框架 一 Edited by Linhao Cui 根据陈强高级计量经济学及stata应用等书籍自己整理得到 仅供学习交流使用 从一个基准的理想政策评价模型出发 Y i
  • Oracle插入或修改数据怎么也不行的解决方法

    今天在公司操作数据库 在删除一条数据的时候忘记提交事务了 之后就去添加别的了 但是后来发现怎么也添加不上 所以觉的是事务锁住了 1 直接判断未提交事务引起的表的行锁 1 1判断哪个SESSION执行了DML Insert Update De
  • C语言-蓝桥杯-算法训练 印章

    问题描述 共有 n 种图案的印章 每种图案的出现概率相同 小A买了 m 张印章 求小A集齐 n 种印章的概率 输入格式 一行两个正整数n和m 输出格式 一个实数P表示答案 保留4位小数 样例输入 2 3 样例输出 0 7500 解题思路 共
  • PPTP穿透NAT之深入分析

    PPTP穿透NAT之深入分析 bytxl的专栏 CSDN博客大家好 现在是人静时分 我公司人员都以溜光 只有我还在面对computer 在经过不解 迷惑 结论之后 现与大家分享结果 感谢朋友Zyliday 见贤思齐的实验帮助 在研究技术原理