我们来打洞:转发DNS包

基于某些众所周知的原因,在天朝上网非常需要勇气和技术。 今天在跟某人聊天时了解到Chrome竟然没办法使用proxy进行DNS查询<1>, 导致DNS查询结果持续被污染。 虽然用proxychains能把一切流量塞进代理里面, 不过用proxychains启动浏览器的话,各种自动代理插件就失效了,所以这是个得不偿失的方法。 青蛙晚上的时候突然想到iptables是不是可以把DNS查询流量转发进ssh tunnel呢? 上网google一番之后,发现这是可行的,而且其实用不到iptables,只要nc就够了。

要用SSH Tunnel转发DNS流量,最大的问题是要把DNS协议使用的UDP协议转换为TCP协议,然后在proxy端还要转换回来。 所以目前青蛙想到的方案有一个很大的缺陷,就是如果ssh服务器上不提供nc命令的话,下面的操作是没法完成的。

首先,用SSH连接ssh服务器,这里青蛙打了一套组合拳,ssh -L + -D组合,分别负责DNS流量和普通数据流量:

ssh -D1080 -L5353:127.0.0.1:5353 user@ssh-server

-L 参数的目的是在本地机器上打开一个5353端口,发送到这个端口的数据都会被转发到ssh服务器上的5353端口上。

然后,在ssh服务器上执行:

server$ mkfifo /tmp/fifo
server …
more ...

网络协议学习笔记(1) -- DNS基础知识

---下列 RFC 包含用来设计和实施 DNS 服务器和客户端服务的规范:

RFC 标题

1034 域名 - 概念和工具

1035 域名 - 实现和规范

1123 Internet 主机 - 应用和支持的要求

1886 支持 IP 版本 6 的 DNS 扩展名

1995 DNS 中的增量区域传输

1996 提示通知区域更改的机制 (DNS NOTIFY)

2136 域名系统中的动态更新 (DNS UPDATE)

2181 对 DNS 规范的说明

2308 DNS 查询的负缓存 (DNS NCACHE)

2535 域名系统安全扩展 (DNSSEC)

2671 DNS …

more ...