dns2tcp搭建DNS隧道绕过校园网

2023-05-16

1、问题场景

在学校是如果校园网没钱了,难道就不能上网了????

对于从事技术的人来说尤其是学计算机出身的人来说这是不能容忍的

我们看下面场景:当我们校园网没有认证时,连接百度时会出现下面情景:

并且此时ping baidu.com会发现是ping不通的

但是我们可以发现这个时候DNS查询是好用的,如下所示:

 并且我们发现这个查询是通过我们学校的DNS服务器查询到的,也就是我们可以绕过校园网认证直接去DNS服务器上进行DNS查询,那么我们就有办法通过DNS伪装进行上网了。同理下面的场景。

办公电脑通过防火墙与互联网相连,防火墙被配置为仅允许DNS数据通过。在此场景下,办公电脑显然无法直接访问互联网。现在我们想做的是通过使用dns2tcp建立DNS隧道,使得办公电脑可以访问互联网。

        许多大学的校园网在连接后,打开浏览器会自动跳转到身份认证页面。在认证前,是无法访问互联网的,但一般来说,其DNS解析是可用的。这便是上述问题场景中的一个实例。另一个实例是有些公司的网络出口处有防火墙阻止了普通员工的办公电脑访问互联网的,但有时防火墙的配置会允许DNS数据通过。

2、预备知识

        我们假设读者对DNS有最基本的了解,若不了解可先阅读《百度百科:DNS》。这里要介绍的是NS记录。以下内容摘自《阿里云-用户指南-记录类型》。

NS 记录

(1)什么情况下会用到NS记录?

如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。

(2)NS记录的添加方式

记录类型为NS。

主机记录处填子域名(比如需要将opo.abc.com的解析授权给其他DNS服务器,只需要在主机记录处填写opo即可,NS记录的主机记录(RR值)不能为空,主机记录@不能作为NS记录使用,且NS记录不支持泛解析【将所有子域名解析到同一地址】,授权出去的子域名不会影响其他子域名的正常解析)。

线路类型(默认为必填项,否则会导致部分用户无法解析)。

NS记录值,NS向下授权,请填写DNS域名记录值为要授权的DNS服务器域名,为了保证服务可靠性,建议您添加至少2组DNS服务(例如:ns1.alidns.com, ns2.alidns.com)。

TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。

 

NS记录不是在设置某个域名的DNS服务器,而是在设置某个子域名的DNS服务器。理解这一点对于成功搭建DNS隧道至关重要。

例如我有域名“werner.wiki”,添加NS记录类型的解析,主机记录值为“test”,记录值为“dns.my.com”。则此记录生效后,所有关于“test.werner.wiki”及其子域名的DNS查询,都会找DNS服务器“dns.my.com”。


3、原材料

为了成功搭建DNS隧道,我们需要一台位于互联网中的(而不是在防火墙里的)服务器,我们将要搭建的隧道的一头是办公电脑,另一头便是这台服务器。在实践中,我们常常会买一台云服务器或vps来搭建DNS隧道。由于DNS的敏感性,这台服务器最好是在中国大陆。为了进行演示,我买了一台腾讯云的云服务器(刚好有快要过期的代金券~)。

我们还需要一个可以设置解析的域名。这个域名是什么无所谓,只要能设置解析就行。所以可以买一个很便宜的域名,第一年的价格在几块钱。在这篇文章中,我们以guojun.tk为例

4、开始搭建

1 设置域名解析(两种类型的域名解析非常重要,我本人掉坑很久)

首先添加一条A类解析,主机记录为“dns”,记录值为“118.xx.xx.120”,这个IP地址就是腾讯云服务器的公网IP地址。

然后添加一条NS解析,主机记录为“dns2tcp”,记录值为“dns.werner.wiki”。

这两条域名解析如下图所示。

 这两条域名解析做了什么?(其实就是DNS欺骗)

第一条A类解析是在告诉域名系统,dns.guojun.tk的具体ip地址

第二条NS解析相当于新建一台域名服务器,其实就是在告诉这个域名系统,想要知道“dns2tcp.guojun.tk”的IP地址,就去问这个域名服务器“dns.guojun.tk”(相当于一台域名服务器。),事实上这个域名的服务器的地址前面已经给出了,所以DNS查询数据包就会去dns.guojun.tk这个域名服务器中查询dns2tcp.guojun.tk的ip地址,那么这个DNS查询数据包就会最终到达dns.guojun.tk这个服务器上面,事实上这个只是伪装的DNS数据包。

如何验证域名解析设置是否成功?

在随便一台电脑上ping域名“dns.guojun.tk",若能ping通,且显示的IP地址正确,说明第一条A类解析设置成功并已生效。

在我们自己的服务器上运行抓包,抓目的端口是53的udp包,命令是:

tcpdump -n -i eth0 udp dst port 53

53端口是DNS协议使用的端口。注意上述命令中的参数“eth0”,含义是网卡接口名,在不同的服务器中可能不同。

然后在随便一台电脑上运行命令:

nslookup dns2tcp.guojun.tk

这条命令是在对域名“dns2tcp.guojun.tk”进行查询。如前所述,若我们设置的域名解析生效,则对此域名的DNS查询,会最终被转发到“dns.guojun.tk”,而“dns.guojun.tk”的IP地址是“118.xx.xx.120”,也就是我们自己的服务器上的的公网IP地址。

查看我们自己的云服务器上的抓包情况,若抓到对域名“dns2tcp.guojun.tk”进行查询的DNS请求数据包,则说明第二条NS解析设置成功并已生效。

抓到的数据包如下图所示。图中的目的IP地址是腾讯云服务器的内网IP地址,所以我没有打码。

         仔细分析上面图片,其实就是DNS查询数据包先去学校的DNS服务器上面查询,找不到之后,然后去根域名服务器guojun.tk找到了腾讯的域名服务器,腾讯的域名服务器告诉这个数据包去找dns.guojun.tk这个域名服务器,最终数据包达到了我们自己的服务器上面。

 3、服务器端软件配置

安装配置dns2tcp

在我们自己的云服务器上,我们首先需要安装dns2tcp,命令如下:

sudo apt-get install dns2tcp

安装完成后打开配置文件“/etc/dns2tcpd.conf”,将其中内容修改为:

listen = 192.168.0.143 #这个是内网的ip地址,不能是127.0.0.1这个只能与本机通信
port = 53
user = nobody
chroot = /tmp
domain = dns2tcp.guojun.tk
reources = ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:3128

        内网与外网的理解,记住,其实我们每一台电脑都是在一个内网里面,如果电脑有公网ip的话,那么就会将这个内网ip地址与公网ip地址绑定在一起,应该是有某种方式(具体目前我还不知道,也就是数据包带着的是公网ip,但是进入内网之后有个软件可以实现这个公网ip定位到内网Ip,这个和Net技术有点相似。

启动dns2tcp

输入命令:

dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
#完成后如下所示

 window下载dns2tcpc.exe 该工具

具体连接如下:

https://download.csdn.net/download/a15608445683/79527478

CMD下运行软件 — 运行之后千万不要关闭该命令提示符

dns2tcpc.exe -r ssh -z dns2tcp.guojun.tk -l 8888 -d 2

 

-r 后接服务名称<ssh/socks/http中的任意一个>
-z 后接你设置的NS记录,和你的VPS公网ip
-l 后接本地端口,随便一个常用端口就行
-d 开启 Debug
Xshell 新建会话 IP:127.0.0.1 端口8888 

 

 进行连接,然后会要求你输入服务器的账号密码。选择记住密码,方便下次使用。
然后这个时候。运行dns2tcpc的命令你个提示符会出现大量数据,说明电脑与服务器已经在传输数据了

打开Internet属性,依次选择 连接–局域网(LAN)设置–为LAN使用代理服务器–高级
设置套接字 为 127.0.0.1 端口是1080 ,确认即可 

 

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

dns2tcp搭建DNS隧道绕过校园网 的相关文章

  • 如何在通过代理 (Tor) 浏览时阻止 Java 预解析我的主机?

    我目前正在开发一个java应用程序 它使用在本地主机上运行的tor代理来获取显示请求者ip的脚本 我希望这项工作主要由 Tor 代理完成 以便它在最 自然 的状态下工作 我当前的代码看起来与此类似 SocketAddress TorProx
  • Django 应用程序是否可以知道用户的 Windows 域名?

    我需要制作一个简单的知识库类型应用程序以在公司内部网络中使用 为了使最终用户使用起来简单快捷 我想部分跳过所有登录 因为它只对我们信任的内部网络用户可见 并自动从用户中提取域用户名并放入它进入数据库 不希望人们浪费时间手动输入他们的名字 他
  • 如何在 Windows 中拦截 DNS 查询

    我正在研究如何在 Windows 中拦截 DNS 查询 以一种不需要将 DLL 注入到每个进程中的方式 并且理想情况下能够根据发出查询的进程做出决策 因此简单的 DNS 代理服务器是不够的 从表面上看 DNS 查询所采用的路径如下所示 某些
  • 将多个子域映射到同一个 S3 存储桶

    有没有某种方法可以将多个 数千个 子域映射到一个 s3 存储桶 如果是这样 是否也可以将其映射到每个子域的存储桶中的特定路径 我希望 test1 example com 映射到 mybucket test1 test2 example co
  • DHCP 服务器将任何 url 重定向到登陆页面

    我有一个 Linux DHCP 服务器 我需要将所有网络流量重定向到一个登陆页面 该页面将包含有关如何在网络上注册计算机的说明 无论用户输入什么 URL 都需要将用户重定向到网页 在 DHCP 服务器上 即 用户输入 google com
  • C# Dns.GetHostEntry() - 异常:没有这样的主机已知

    From 文档 https learn microsoft com en us dotnet api system net dns gethostentry view netframework 4 8 Dns GetHostEntry 将主
  • Linux 中 AF_UNIX 数据报消息的最大大小是多少?

    目前我已达到 130688 字节的硬限制 如果我尝试在一条消息中发送更大的内容 我会收到一条消息ENOBUFS error 我已经检查过net core rmem default net core wmem default net core
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • IIS 如何识别请求的是哪个站点?

    如果我在一台服务器上托管多个站点 并且 dns 服务器将不同的域名解析到同一地址 这是服务器的名称 那么 IIS 如何知道最终请求的是哪个站点 因此 客户端输入我的 1 站点地址 gt myrandomsite mydomain com 然
  • AWS Route 53 - 公共子域无法公开访问?

    我已购买域名company com并创建公共子域sales company com 路由53中的公共托管区域 我将子域映射 创建 A 记录 到内部应用程序负载均衡器 ALB 即该 ALB 只能在我的公司网络内访问 我的理解是公共子域可以映射
  • AWS Route 53 如何实现基于延迟的路由?

    AWS Route 53 可以提供基于延迟的路由策略 请参阅AWS Route 53 的延迟路由策略 http docs aws amazon com Route53 latest DeveloperGuide routing policy
  • SSL握手时是否检查服务器域名

    在 SSL 握手期间 是否在 SSL 握手期间检查服务器的域名 我的意思是 是否根据服务器运行的域检查了经过认证的服务器中的域名 示例 假设服务器证书具有域 mydomain com 如果服务器在域 someotherdomain com
  • 将 DNS 名称指向本地计算机上的 IP 地址

    这可能是一个愚蠢的问题 但我真的很感激任何简洁的答案 我已使用静态 IP 地址 例如 213 221 211 111 在本地计算机上上传了 Joomla 网站 我已在 Godaddy com 上注册了一个域名 例如 www example
  • 跨域错误

    什么是跨域错误 当 Javascript 大多数时候 尝试访问不应该访问的内容 例如 如果您尝试读取另一个域的 cookie 那将不起作用 如果您尝试向另一个域或协议 HTTP gt HTTPS 发出 XMLHTTP 请求 则该请求将不起作
  • Heroku 域名注册配置为雪松栈上的竹子

    我在 Cedar Stack 上运行时遇到 Heroku 的 DNS 配置问题 当我的自定义域具有正确的指向 CNAME 记录并正确配置为 Heroku 指令时 它一直认为我正在将 Cedar 堆栈路由到 Bamboo 事情是这样的 我最近
  • 在 dnspython 中返回“A”DNS 记录

    我在用dnspython http www dnspython org 获取 A 记录并返回结果 给定域的 IP 地址 我有这个简单的测试 python 脚本 import dns resolver def resolveDNS domai
  • 如何在node.js解析查询中设置dns服务器?

    我正在尝试设置 Google DNS 服务器8 8 8 8在 Node js 中解析查询 这样做的正确方法是什么 在命令行中通常我们可以执行以下操作 nslookup stackoverflow com 8 8 8 8 Server 8 8
  • CNAME 速度慢吗?

    我将 CNAME 与 S3 CloudFront 一起使用来提供一些静态文件 例如 js css 图像等 我这样做是为了使存储桶的 URL 更漂亮 因为我认为最好将所有内容都定位到我的网站 以防万一将来我想移动这些文件 更改应该是透明的 今
  • AWS ELB 和 GoDaddy 域正在运行

    我已在 goDaddy com 中注册了一个域 并希望将流量发送到 AWS Route53 我创建了一个 ELB 我执行了以下步骤 在 Route 53 中 为我的 godaddy 域名创建一个托管区域 这反过来又为我提供了一条包含 4 个
  • 间歇性“无法解析远程名称”?

    我有一个 ASP NET 应用程序 用它来读取网页的内容HttpWebRequest频繁地 远程地址没有问题 我的应用程序始终工作正常 虽然我没有更改任何内容 但有时 大约每天一次 我会收到此错误 the remote name could

随机推荐

  • JAVA校验SQL语句与格式化语句

    想看实现直接滑倒左下边的工具类 xff0c 前边在说得是解决思路 前言 现在需要向数据库中某张表中的某个字段中 xff0c 插入的值为SQL语句 xff0c 但是要保证插入SQL语句的正确性 xff0c 而且还需要进行格式化 xff0c 就
  • 获取墨墨背单词里面的单词书中的单词

    首先 xff0c 其实是直接尝试抓包获取的 xff0c 不过在抓包的信息中没发现类似的内容 xff0c 然后就去百度了以下 xff0c 发现还是有聪明人 把下载的 apk 文件解压缩一下 xff0c 把里面的 assets 文件夹里面的 m
  • 2021年Redis面试题(持续更新)

    目录 1 redis基础redis 中的数据类型有哪些为什么说redis能够快速执行 2 Redis中的五种数据结构string 字符串 list 列表 set 集合 hash 哈希 zset 有序集合 3 Redis的持久化Redis 的
  • 吐槽一下csdn博客选中文字之后的悬浮窗

    悬浮窗出来的莫名其妙 xff0c 还会挡文字 xff0c 展示一下我框一段文字出现的一百种情况 xff0c csdn是否考虑出一个设置可以自定义把这个功能关闭和开启 看文章很自然的会选中文字一行一行的看 xff0c 我相信很多人都是这样的
  • c语言基础

    基本语法 预定义常量及类型 函数结果状态代码 span class token macro property span class token directive hash span span class token directive k
  • c语言实现基础的排序

    1 插入排序 1 1 直接插入排序 span class token keyword void span span class token function insert sort span span class token punctua
  • 流程图怎么画

    前言 最近在看博客的时候发现很多流程图都不是流程图 xff0c 想画成流程图但是总有些时候会变了样子 xff0c 所以我就想说说流程图到底因该怎么画 组成 流程图一般由由圆角矩形 矩形 菱形 平行四边形 箭头组成 作用 流程图一般都是用圆角
  • mybatis-plus使用中遇到的问题

    mybatis plus使用中遇到的问题 mapper配置问题mybatis plus与mybatis冲突mybatis plus与pagehelper冲突 最近新搭一个测试项目 xff0c 使用了 mybatis plus当前的最新版本
  • 解决“将截断字符串或二进制数据。语句已终止。”的问题

    在EF中 xff0c 使用CodeFirst给实体添加约束的时候 xff0c 使用NeGut控制台进行更新到数据库中 xff0c 先使用add migration migrationName命令进行创建 xff08 migrationNam
  • Struts2的基本原理与实现

    Struts2是什么 百度说的 Struts2是一个基于MVC设计模式的Web应用框架 xff0c 它本质上相当于一个servlet xff0c 在MVC设计模式中 xff0c Struts2作为控制器 Controller 来建立模型与视
  • 如何用EA优雅的画流程图

    绘制流程图 1 首先在EA中新建一个流程图 xff1a 2 添加图形 添加需要的图形 xff0c 同时每个图形上面有附加的说明 xff0c 说明和图形之间的相对位置是可以移动的 不过对于画流程图来说 xff0c 还是建议将说明放在图形的正中
  • Android获得手机唯一设备ID号

    在安卓的工程中 xff0c 往往需要获得手机设备唯一的ID号 xff0c 我们可以用TelephonyManager类来获得 xff1a 首先声明一个TelephonyManager类的对象 xff1a 接着声明一个String类型的变量
  • (综合)xorg-xserver相关完全解析

    本文主要是从以下几个方面介绍xorg xserver 相关的知识 1 linux系统图形界面框架 2 xserver 和x client启动过程 3 图形2d xff0c 3d加速原理简介 4 xserver主分支代码解析 5 xserve
  • 小新 Pro 13‘ 2020 macOS 安装教程

    小新 Pro 13 2020 macOS 安装教程 电脑配置 CPU xff1a Intel Core i5 10210U CPU 64 1 60GHz 4C8T RAM xff1a 板载 16 GB 2666 MHz DDR4 硬盘 xf
  • IDEA社区版创建spring boot项目的安装插件

    由于最近idea的官方查的有点严 xff0c pojie的企业版idea总失效 xff0c 现在给大家说一下社区版idea创建spring项目的一个方法 xff01 xff01 xff01 在项目实战中了解到的IDEA创建springboo
  • 软件工程论述题:衡量模块独立性的两个标准是什么?各表示什么含义?

    8 衡量模块独立性的两个标准是什么 各表示什么含义 内聚和耦合 内聚 又称为块内联系 指模块内部各成分之间相互关联的程度 以高内聚为设计目标 耦合 也称块间联系 模块之间相互联系程度的度量 联系越紧密 耦合性越强 独立性越差 以低耦合为设计
  • linux如何查看wifi信号强弱

    在linux中观察wifi信号强弱 xff0c 可以通过dBm数值来判断 现在来看这个所谓的dBm xff0c 数值范围在 XX 0之间 这个数越大 xff0c 信号强度越高 50dBm 0dBm范围内 xff0c 恭喜你 xff0c 你的
  • Edge浏览器的书签(收藏夹)文件夹地址在哪?

    最近因为工作电脑经常重装系统 xff0c 所以每次重装系统之前都要备份一些数据 xff0c Edge浏览器这两年突然香了起来 xff0c 插件yyds xff01 所以平时生活还是使用Edge会多一点 xff0c 但是收藏夹备份却吃了大亏
  • CCS5.4+Proteus8的F28027实践课二、定时器0控制LED流水灯

    刚游泳回来 xff0c 看到昨晚那篇博客访问量比较高 xff0c 对我是莫大的鼓励 xff0c 所以马不停蹄的去找了相关的手册准备我们今天的课程 今天我们要说的是用定时器0产生的定时中断让LED闪烁 大家都是大部分都是工科出身 xff0c
  • dns2tcp搭建DNS隧道绕过校园网

    1 问题场景 在学校是如果校园网没钱了 xff0c 难道就不能上网了 xff1f xff1f xff1f xff1f 对于从事技术的人来说尤其是学计算机出身的人来说这是不能容忍的 我们看下面场景 xff1a 当我们校园网没有认证时 xff0