如果网页一些图片没加载出来可以尝试刷新网页
之前测试网络时上校园网忘了认证,直接在终端中ping一些常用域名,自然是ping不通,但是令我意外的是ping域名的时候居然解析出来了ip地址,这就说明校园网在没认证时没有禁本地向外发送的dns流量,所以以此突发奇想,如果将普通的流量伪装成dns流量去访问一个伪装的dns服务器,再由伪装的dns服务器代理访问internet,这样就实现了在没有认证的情况下利用dns隧道访问互联网。这个东西去年四月的时候就搞过一回,但是当时搞得知识通过dns端口发送流量,并没有进行流量伪装,校园网会禁止udp53端口的非dns类型流量通过,今年四月过了整整一年,终于实现了。
具体原理的话可以去文章末尾提到的《使用DNS2TCP搭建DNS隧道,绕过网络认证,实现免验证上网》中看看,这篇文章原理讲的比较详细
在开始操作之前,需要检查未认证情况下是否禁用dns以及产生大量dns请求时会不会网路被掐。可以通过在本地上建一个简单的.bat文件测试一下。
在桌面上新建一个文本文档,在文本文档中输入以下内容:
:start
echo starting……
nslookup baidu.com
goto start
然后将文件后缀名改为.bat,双击运行即可测试,建议先测试十分钟看看网路会不会被掐。

测试时的终端
如果被掐了或者直接不通,这篇文章就不再适用,没被掐就可以继续执行以下的步骤。
进行以下操作需要一个公网服务器,建议使用阿里云的服务器,腾讯云的最好不要用,会在最后的阶段可能造成请求不可达。还要有一个域名用来dns跳转。
首先需要在域名解析界面建立两条解析记录:
第一条ns解析,主机记录填写dns2tcp,记录值填写dns.域名
第二条a解析,主机记录谈些dns,记录值写服务器公网IP

之后去服务器防火墙或者安全组中放行udp53端口,用来运行服务器上的dns隧道服务。
服务器最好使用Ubuntu系统,使用centos时出现了dante启动不起来的情况
在服务器面板上远程登陆,登陆进去改为root用户,使用命令在53端口抓包,用来检测dns解析是否成功。
tcpdump -n -i eth0 udp dst port 53
之后在本地运行
nslookup dns2tcp.(域名)
如果服务器命令界面有抓包数据,那么dns解析成功。

按ctrl+c退出珠抓包后开始安装dns2tcp。
在本地电脑访问https://github.com/alex-sector/dns2tcp/releases/tag/v0.5.2下载dns2tcp-0.5.2.tar.gz,下载完后使用winscp登入服务器,将下载的源码复制进服务器主目录中。这一步也可以用wget命令完成:
wget https://github.com/alex-sector/dns2tcp/archive/refs/tags/v0.5.2.tar.gz
传输到服务器后解压,在服务器命令界面输入命令:
tar -zxvf dns2tcp-0.5.2.tar.gz
解压后进入解压出来的文件夹:
cd dns2tcp-0.5.2
使用这两行命令来安装:
./configure
make & make install
安装完成后再安装另一个软件用来运行socks代理,在https://github.com/Lozy/danted中下载dante源码,源码下载出来是zip格式,将解压出来的文件夹用winscp传入服务器主目录,右键传进去的目录,更改文件权限等级

之后在服务器命令面板中输入:
cd danted-master
进入dante源码文件夹,使用bash命令安装dante:
bash install.sh

安装完成后开始软件的配置,首先配置dns2tcp,在winscp中进入/etc/目录,新建一个dns2tcpd.conf配置文件,在文件中输入以下配置:
listen = 0.0.0.0
port = 53
user = nobody
chroot = /tmp
domain = dns2tcp.(域名)
resources = ssh:IP:22,http:IP:8080,socks:(内网IP):1082
内网IP可以在服务器概览中找到
然后再配置dante,winscp进入/etc/danted
再danted中找到sockd.conf配置文件,将里面内容替换为:
logoutput: /var/log/sockd.log
internal: eth0 port = 1082 #这里的端口需要和dns2tcp.conf中的socks:(内网IP):1082 端口一致
external: eth0
socksmethod: username none
user.privileged: proxy
user.unprivileged: nobody
client pass {
from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
protocol: tcp udp
}

之后去/etc/init.d找到sockd,双击打开,将里面内容替换为:
#!/bin/sh
# chkconfig: 2345 20 80
# description: dante SOCKS proxy server
DAEMON=/etc/danted/sbin/sockd
CONFIG=/etc/danted/sockd.conf
PIDFILE=/var/run/danted.pid
case “$1” in
start)
echo “Starting dante SOCKS proxy server…”
$DAEMON -f $CONFIG -D -p $PIDFILE
;;
stop)
echo “Stopping dante SOCKS proxy server…”
kill `cat $PIDFILE`
rm -f $PIDFILE
;;
restart)
$0 stop
$0 start
;;
status)
if [ -f $PIDFILE ]; then
echo “dante SOCKS proxy server is running.”
else
echo “dante SOCKS proxy server is not running.”
fi
;;
*)
echo “Usage: /etc/init.d/danted {start|stop|restart|status}”
exit 1
;;
esac
exit 0
在服务器命令界面使用命令运行dante
/etc/init.d/sockd start
然后安装screen软件
apt install screen
新建一个screen窗口方便dns2tcp在后台运行:
screen -S dns2tcpd
在新建的窗口中运行dns2tcp
dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
退出窗口可以用ctrl+a+d,返回窗口可以用命令:
screen -r dns2tcp

dns2tcp运行起来的提示
至此服务器的配置已经完毕,下面开始配置本地客户端
在https://skydrive.live.com/embedicon.aspx/blog/201107/dns2tcpc%5E_win.7z?cid=6bb458eb3989ece3&sc=documents中下载dns2tcp的Windows客户端,这个链接是csdn中Werneror博主提供的下载链接。
下载好后放到电脑上的随意位置在那个位置中按住shift右键,选择终端或powershell,powershell中输入cmd进入cmd,输入以下命令运行dns2tcp客户端

dns2tcpc -r socks -z dns2tcp.<域名> <服务器公网IP> -l 8888 -d 22
运行之后可以在浏览器中安装Proxy SwitchyOmega插件来局部测试

全局代理可以在控制面板中设置

连接后的效果

本地抓包出来全是dns类型流量

但是网速非常慢,用秒表计时,加载一个十秒的视频就花了将近30分钟

总结:图一乐。
参考文章:
使用DNS2TCP搭建DNS隧道,绕过网络认证,实现免验证上网 https://blog.csdn.net/deng_xj/article/details/88834124
使用dns2tcp搭建DNS隧道 https://blog.csdn.net/wn314/article/details/81430554
DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网 https://www.cnblogs.com/bonelee/p/7927706.html
