简介 :
常见的内网环境中 , 防火墙可能会限制只允许 udp 53 端口出站
这样就可以利用 DNS 查询流量来封装 TCP 流量 , 达到绕过防火墙的目的
例如 :
CMCC / 机场 / 火车站 等需要认证才可以链接互联网的网络环境
准备 :
1. 一台公网VPS
2. 一个可控域名
方法一 (dns2tcp)
Client
dns2tcpc -z dns.domain.com -d 2 -k password -l 4444 -r ssh
-d Debug level
-k 密码
-l 本地监听端口
-r 请求的资源
-z 指定可控的域名
Server
==================================
listen = 0.0.0.0
port = 53
# If you change this value, also change the USER variable in /etc/default/dns2tcpd
user = nobody
key = password
chroot = /tmp
domain = dns.domain.com
resources = ssh:127.0.0.1:22
==================================
dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf
Domain
1. 新建一条 A 记录例如 ns1 , 指向之后要作为 DNS 服务器的 VPS (8.8.8.8)
记录类型 A , 记录值 ns1 , 指向 8.8.8.8
2. 新建一条 NS 记录
记录类型 NS , 记录值 dns , 指向 ns1.domain.com
Screen shot cut
方法二 : (iodine)
特点 :
1. 直接在本地和服务器分别模拟出两张虚拟网卡 , 直接通过虚拟网卡通信
2. 下行流量不加密 , 效率更高
Server
iodined -c -f -D 10.0.0.1 dns.domain.com
-c 启用压缩
-f 前端运行
-D debug 模式
Client :
iodine -f dns.domain.com
Domain
同方法一
参考资料 :
http://www.adeptus-mechanicus.com/codex/dnstun/dnstun.php
http://code.kryo.se/iodine/README.html
http://www.hsc.fr/ressources/outils/dns2tcp/