VPN DNS leak 问题的解决
前一段时间遇到一个问题。customer说发现连接VPN后在PPP端发现security leak,整个转了好大一个圈子才把问题解决了。之所以费这么大周折,倒不是因为很难解决,只是费了很大劲儿才定位了root cause。
1. 到底是不是security leak?
customer说连到VPN server,然后ping的过程中就发生了DNS leak,因为他们在PPP看到了明码。我跟他们一顿解释,在发送端,数据是在PPP以下的层次中的数据都是加密的。在接收端是在PPP以上的层次看到的数据都是解密的,这是正常的,不是security leak。
图1 VPN 在stack中的位置
他说不好意思,听不懂你在说什么,我只好继续发图解释。Tunnel保护数据在internet中的传输,到达corpnet后就被解密了。在接收端的PPP以上的层次接收到的肯定是明码,因为已经被解密过了。
图2 网络结构
对方是一个印度的大概是在线支持之类的角色吧。经过一轮沟通,他还是不清楚我在说什么。最后只好吐血画了张大图继续和他解释。在中间的绿色部分是处在VPN tunnel中的,如果在这儿的任意一层发现明码肯定是leak,但是到达VPN server后,上升到绿色部分以上之后就不再是VPN的保护范围了,应该所以能看到明码。
图3 网络结构
他说好像是懂了,他说customer的拓扑要比这个复杂。是client先通过ISP连到internet,然后再通过internet连到VPN sever的。这就有点麻烦了,因为他描述的scenario中包含两个PPP,我问他是在哪个PPP上发现了security leak。他说在两个PPP处都发现了明码DNS。
图4 customer的网络结构
好的,这下算是说到根上了。VPN server的PPP上发现DNS明码是正常的,但如果是在PPPoE的PPP上发现了明码,那基本就是security leak了。为了确认真的是这样,我在本地搭建环境重现了一下,在PPPoE server中抓到了这个结果,可以肯定DNS leak确实发生了。
图5 抓到的数据包
2. 问题的定位
印度同事终于提供了全套数据给我,可以详细分析一下问题背后的原因了。首先查路由相关信息。在他们提供的信息中我没有看到PPPoE的信息,但确实看到了DNS leak。看来leak和网络拓扑没有关系。路由表也没有发现明显问题,根据路由表,即使发给11.22.33.44 DNS Server的数据报也应被发送到VPN Server才对。
图6 client端路由表
图7 client端IP
图8 client端DNS leak query
这就有点麻烦了,问题可能是有几个原因导致的:
(1) 路由代码有问题;
(2) 路由查找中使用cache导致的;
(3) DNS代码的问题。
经研究发现,这个问题在IP层是解决不了的。因为有一种特殊情况,就是如果DNS Server和client是在同一网段的话,按照路由表,DNS query是一定要被直接路由到物理网卡而不是PPP的网卡。因此最终决定在应用层搞定,当发送DNS query时,首先判断是否存在VPN interface,如果有则所有DNS query都经过VPN interface发送,否则正常发送。
VPN DNS leak 问题的解决的更多相关文章
- 如何修改VPN连接的MTU,解决频繁断线和页面打不开的问题
如何修改VPN连接的MTU,解决频繁断线和页面打不开的问题 MTU 介绍:MTU 即最大传输单元,它是指一种通信协议的某一层上面所能通过的最大数据包大小.为什么需要修改 MTU大多数设备原本支持通过 ...
- OneDrive不能上了?DNS被污染,解决方法很简单
http://www.expreview.com/34434.html 除了LINE以外,最近微软的OneDrive云存储服务也出现访问故障,不过@月光博客 表示它只是受到DNS污染,被解析为无法访问 ...
- CentOS6重启后DNS被还原的解决办法
CentOS6重启后DNS被还原的解决办法 http://luyx30.blog.51cto.com/1029851/1070765/ centos6.5的64位系统,修改完/etc/sysconfi ...
- Android 常见 Memory Leak 原因及解决办法总结
待整理: http://geek.csdn.net/news/detail/50692 背景 在Android开发过程中,我们经常碰到的情况就是在我们不清楚为什么情况下,程序突然出现Crash了.其中 ...
- 强烈建议使用国外DNS解析域名,解决访问速度和某些访问故障!
域名解析的基本原理是把域名翻译成IP地址,以便计算机能够进一步通信,传递网址和内容等. 域名劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则直接返回假的IP ...
- 验证DNS解析失败:解决办法之一
今天晚上练习简单的DNS解析验证: 环境是在一台虚拟机上搭建,另一台虚拟机验证,步骤如下: 虚拟机A: 1.安装软件包 bind 和bind-chroot[root@svr7 ~]# yum -y ...
- VPN连接错误800的解决办法
1,IP填错.2,防火墙太严.3,使用过别的VPN软件.4,服务器上服务里Protected Sqwerrage和Routing and Remote Access这两项是否启动.5,重启电脑,删除原 ...
- Android Handler leak 分析及解决办法
In Android, Handler classes should be static or leaks might occur, Messages enqueued on the applicat ...
- Centos DNS重启失效的解决
在KT的毒妇配置的时候,通过yum安装了桌面,默认安装了Gnome,在没重启前还一切正常,重启以后接着配置的时候,发现没法网络访问了,ping测试一 下,host unkown;基本可以确定是DNS的 ...
随机推荐
- winForm 打印预览
自己很少写技术博客,虽然已经干程序员两年多了,winform开发,web开发都干过,不论项目大小对于.net的相关技术也是了解的,如mvc,wcf,wpf,silverlight,socekt通讯,n ...
- apache-2.4.12之虚拟主机配置问题与觖决办法
apache-2.4.12基于域名访问的多虚拟主机配置 原始配置: <VirtualHost *:80> ServerAdmin kk@etiantian.org DocumentRoot ...
- Python遍历文件夹枚举所有文件类型
>>> import os >>> def enumfiles(path, dest): files = os.listdir(path) for f in fil ...
- Kinetic使用注意点--circle
new Circle(config) 参数: config:包含所有配置项的对象. { radius: "半径", fill: "填充色", fillRGB: ...
- 2016 系统设计第一期 (档案一)MVC 引用 js css
@Styles.Render("~/Bootstrap/css/bootstrap-theme.css") @Scripts.Render("~/jQuery/jquer ...
- MINA快速传输文件
最近的项目使用MNA进行文件传输,只能传输到5~7MB/s:但是使用FTP等软件其实可以达到11MB/s,后来使用MINA原生传输,发现可以达到11MB/s,后来发现有以下两点可以需要注意优化: 1. ...
- Python拷贝及多进程与类的问题
最近写python写的尤其不顺利,更多的debug,逐渐的深入,产出却比较少.应该是个瓶颈期,坚持坚持,厚着脸皮也要坚持下去. 0x00 拷贝问题 程序中涉及到多进程和协程,大致的模型是开了2+个进程 ...
- Xcode文档下载与安装路径
https://developer.apple.com/library/downloads/docset-index.dvtdownloadableindex ~/Library/Developer/ ...
- dnf脚本的研究
[player number] 2 8 [pvp start area]0 0 0 00 0 0 00 0 0 0[dungeon]62[/dungeon][type] `[normal]`[gre ...
- C# 的轻量级 RPC 框架
Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Comple ...