通过dns2tcp搭建tcp隧道绕过校园网认证进行免费上网

jupiter
2021-10-04 / 0 评论 / 1,357 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年12月07日,已超过1096天没有更新,若内容或图片失效,请留言反馈。

原理介绍

dns2tcp工作原理

正常情况下,当我们连上酒店或者其他需要验证才可以使用的网络后,虽然上不了网,但是我们的计算机却分配到了IP地址(不分配IP地址web认证就实现不了),此时若我们进行一些上网的操作,那么计算机的数据包将从TCP443端口上发出,校园网、酒店等网关就会拦截从这个端口上发出的数据包。同理从其它端口上发出的数据包也会遭到拦截。
但是有一个神奇的端口,从这个端口发出的数据包不会遭到网关拦截,它就是UDP53端口(UDP53端口上运行的协议是DNS协议(域名解析协议))。

常见的内网环境中 , 防火墙可能会限制只允许 udp 53 端口出站,这样我们可以利用 DNS 查询流量来封装 TCP 流量 , 达到绕过防火墙的目的。

DNS隧道。从名字上来看就是利用DNS查询过程建立起隧道,传输数据。

dns2tcp工具介绍

dns2tcp 是一个使用C语言开发的利用DNS隧道转发TCP连接的工具。

客户端会在本地监听一个端口,并指定:要使用服务端上面的哪个资源(如ssh、socket、http)

我们只需把数据扔进本地的该端口,dns2tcpc将使用DNS隧道传送到服务端。

随后,服务端根据客户端指定要使用的资源,将数据转发到其本机的相应端口中去。

这里的相应端口,可通过配置文件(/etc/dns2tcpd.conf)配置。

准备工作

判断DNS解析的53端口是否开放

连接校园网,测速在未认证状态下是否可以正常dns解析

$ nslookup www.baidu.com
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 110.242.68.3
Name:   www.a.shifen.com
Address: 110.242.68.4

可以看到,nslookup解析域名正常,代表DNS解析的53端口正常开放,从这个端口发出的数据包不会遭到网关拦截 ,也就是UDP53端口。

云服务器与域名

  • 具有公网ip的云服务1台
  • 域名一个

搭建步骤(ubuntu16.04为例)

设置域名解析

登录你的域名服务器商如:DNSpod
在域名下面添加一个A记录,A记录的名字可以任意,如ns1.vvvtimes.com,A记录的值为你VPS服务器的IP地址。
最后,再添加一个NS记录,这个NS的名字可以任意,比如tcp.vvvtimes.com,NS记录的值为你上面添加的A记录的名字,即ns1.vvvtimes.com。

服务器端

安装DNS2TCP

sudo apt update
sudo apt install dns2tcp

编辑DNS2TCP配置文件

在 /etc 建立一个名为 dns2tcpd.conf 的文件, 然后输入以下配置:

listen = 0.0.0.0
port = 53    
user = nobody    
chroot = /tmp    
domain = tcp.vvvtimes.com(上面配置NS记录的域名)    
key = fuckoff (密码,可选)
resources = ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:3128 

启动 DNS2TCP(建议使用screen启动)

dns2tcpd -f /etc/dns2tcpd.conf -F -d 2  

注意:腾讯云服务器不给实际网卡分配公网IP,所以要监听0.0.0.0

客户端

安装DNS2TCP

sudo apt update
sudo apt install dns2tcp

启动 DNS2TCP(建议使用screen启动)

dns2tcpc  -c -k fuckoff   -r ssh -z tcp.vvvtimes.com 1.2.3.4 -l 2222 -d 2  

-k 后接密码,与服务器端的配置保持一致即可
-r 后接服务名称, 这里我们用ssh
-z 后接NS记录的网址, ip, 注意IP地址最好写上, 可以不写
-l 后接本地端口
-d 开启 Debug

测试

ssh连接测试

ssh root@127.0.0.1 -p 2222

可以直接登陆你的server ssh。

设置ssh隧道(偶尔会提示reset peer或许要多试几次):

ssh -CfNg root@127.0.0.1 -p 2222 -D 7002

查看端口是否开放

$ lsof -i:2222
COMMAND    PID    USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
dns2tcpc 28938 bonelee    4u  IPv4 11154775      0t0  TCP localhost:2222 (LISTEN)
dns2tcpc 28938 bonelee    5u  IPv4 11157735      0t0  TCP localhost:2222->localhost:46296 (ESTABLISHED)
ssh      28953 bonelee    3u  IPv4 11157734      0t0  TCP localhost:46296->localhost:2222 (ESTABLISHED)
$ lsof -i:7002
COMMAND   PID    USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
ssh     28953 bonelee    4u  IPv4 11160083      0t0  TCP *:afs3-prserver (LISTEN)
ssh     28953 bonelee    5u  IPv6 11160084      0t0  TCP *:afs3-prserver (LISTEN)

浏览器里直接socks5代理127.0.0.1 7002端口即可上网了!上谷歌也是可以的。。。不过速度就不咋地。。。

参考资料

  1. 通过dns2tcp绕过校园网认证进行免费上网
  2. [DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网]
  3. 使用DNS2TCP搭建DNS隧道,绕过网络认证,实现免验证上网
0

评论 (0)

打卡
取消