实现本机 <-> VPS <-> 8.8.8.8 的 DNS 查询请求的中转,借此可以“准确地”使用“真正的” 8.8.8.8 服务器返回的 IP 。 8.8.8.8 返回的结果在 100ms 内,在我看来是不正常的。
我已配置 VPS 的 iptables ,采用如下命令
iptables -t nat -A PREROUTING -p udp -d VPS 的 IP --dport 5353 -j DNAT --to-destination 8.8.8.8:53
iptables -t nat -A POSTROUTING -p udp -d 8.8.8.8 --dport 53 -j SNAT --to-source VPS 的 IP
dig www.google.com @VPS 的 IP -p 5353
; <<>> DiG 9.8.3-P1 <<>> www.google.com @VPS 的 IP -p 5353
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38425
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0;; QUESTION SECTION:
;www.google.com. IN A;; ANSWER SECTION:
www.google.com. 118 IN A 216.58.216.4;; Query time: 371 msec
;; SERVER: VPS 的 IP#5353(VPS 的 IP)
;; WHEN: Mon Jan 25 14:00:14 2016
;; MSG SIZE rcvd: 48
已采用 这篇文章 所述方法进行设置,其中 resolv.dnsmasq.conf 文件设置为
nameserver VPS 的 IP#5353
( nameserver 208.67.222.222#5353 也不行,而 OpenDNS 开设 5353 端口)
1
kmahyyg 2016-01-25 14:23:56 +08:00
搭车同问,如何让本地 pc 使用自建的非 53port 的 dns?(要求分平台 unix/win 说明)
回复楼主:以前曾经试过用 bwg 在 kiwivm 没发现的情况下临时搭过 53port 的 dnsmasq ,本地貌似可以用 tcp-dns-proxy(github)解决,但是始终不稳定,而且 kiwivm 会 ban 53 ,所以最后用了 5353 ,但是 win 不稳定,貌似楼主只要开 iptables 开放 53/5353 ,然后同时修改 /etc/resolver.conf(debian7)里的 nameserver 就行,其他的问题,当时没碰到过。 |
2
nbndco 2016-01-25 14:26:55 +08:00
这样有什么意义呢?只要有 CDN (也就是几乎所有情况下)就会更慢,连正常使用都受影响。
|
3
zhengnanlee OP @nbndco 有这个想法的过程是,
很多 Google 搜索的网站不可访问 -> 它们的 ip 在本机是可以 ping 到的 -> 是不是 DNS 服务器没有这些网站的数据(或者被污染) -> 想用一个好一些的 DNS -> 自国内向国外的 DNS 查询请求好像不太行得通 -> 想要实现一个 DNS 的代理 -> dnsmasq 非标端口问题。 速度变慢,我想着能不能采用一个表,如问题 2 所述。 感谢您的问题 |
4
zhengnanlee OP @kmahyyg 发现这个问题了,但我觉得原因可能是国内到国外的路程中, 53 端口被污染了吧,当然也有可能是 KiwiVM 的问题,毕竟 53 端口容易被攻击嘛。您说的方法我去实验一下,感谢您的回复!
|
5
gy911201 2016-01-25 14:40:21 +08:00
写了半天结果没发出来,心塞塞的……
重新简单说一下, github 上有个叫 dnsmasq-china-list 的项目,里面枚举了所有的国内域名,你可以照着来 关于污染的问题,你可以用 tcp 链接,然后走 sock5 去访问,我的做法是 dnsmasq 做国内外网站查询分流,国内走 114 ,国外走 8888 ,然后本地还配置了一个 unbound 去使用 tcp 链接访问 8888 ( dnsmasq 使用 tcp 连接上游服务器的话无法缓存结果),用 proxifier 讲查询请求强制走 sock5 代理。 |
6
nbndco 2016-01-25 14:58:21 +08:00
@zhengnanlee 用 chinadns 之类的吧,很简单,如果返回国内 IP ,或是已知的 fake IP ,就再次请求其他指定的 DNS 服务器。
|
7
imn1 2016-01-25 14:59:59 +08:00
我是这样做的
dnsmasq.conf listen-address=127.0.0.1 server=127.0.0.1#xxxx resolv.conf 只有一行 nameserver 127.0.0.1 resolv.dnsmasq.conf 为空 没用 iptables 在 xxxx 再搭一个可以改 TTL 的 DNS 工具 B B 实现 TCP 、多线程、校验、改 TTL 等工作, dnsmasq 主要做缓存和拦截(返回 127.0.0.1)工作 一切畅顺 |
8
churchmice 2016-01-25 15:16:34 +08:00
5353 其实也算个知名端口了,指不定 GFW 也对此端口重点监测了,你再换个冷门一点的端口
本地也是可以 redirect 的 比如你本地就用 8.8.8.8 解析, iptables 里面把发往 8.8.8.8:53 的包重定向到 VPS:port 上去,至于有没有成功,你 iptables 看一下有没有包被 match 住了 也可以本地配置 dnsmasq |
11
tony1016 2016-01-25 19:45:34 +08:00
建议先用 nc 检查一下到 5353 端口的 udp 通了没
|
12
zhengnanlee OP @tony1016
netstat -tunlp | grep 53 tcp 0 0 VPS 的 IP:53 0.0.0.0:* LISTEN 578/named tcp 0 0 127.0.0.2:53 0.0.0.0:* LISTEN 578/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 578/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 578/named tcp 0 0 0.0.0.0:5353 0.0.0.0:* LISTEN 664/dnsmasq tcp6 0 0 :::53 :::* LISTEN 578/named tcp6 0 0 ::1:953 :::* LISTEN 578/named tcp6 0 0 :::5353 :::* LISTEN 664/dnsmasq udp 0 0 VPS 的 IP:53 0.0.0.0:* 578/named udp 0 0 127.0.0.2:53 0.0.0.0:* 578/named udp 0 0 127.0.0.1:53 0.0.0.0:* 578/named udp 0 0 0.0.0.0:5353 0.0.0.0:* 664/dnsmasq udp6 0 0 :::53 :::* 578/named udp6 0 0 :::5353 :::* 664/dnsmasq netstat -tunlp | grep 5353 tcp 0 0 0.0.0.0:5353 0.0.0.0:* LISTEN 664/dnsmasq tcp6 0 0 :::5353 :::* LISTEN 664/dnsmasq udp 0 0 0.0.0.0:5353 0.0.0.0:* 664/dnsmasq udp6 0 0 :::5353 :::* 664/dnsmasq 这样算开启了嘛? |
13
zhengnanlee OP @imn1 木有配置成功。。能说详细一点嘛~
|
14
imn1 2016-01-25 21:37:33 +08:00
@zhengnanlee
还要怎么详细? 我不是直连外面的 DNS#5353 ,我个人没必要 我是 dnsmasq 监听 53 ,然后传给 dnsforwarder (监听 127#53535 )再去外面 DNS 获取解析 |
15
zhengnanlee OP @imn1 哦哦明白了,我说怎么没有找到地方填写 vps 的 IP
|
16
tony1016 2016-01-26 09:47:49 +08:00
@zhengnanlee 在本地用 nc -vzu ip 5353 测试一下到 VPS 的端口是否通畅
|
17
zhengnanlee OP @tony1016
nc -vzu ip 5353 found 0 associations found 1 connections: 1: flags=82<CONNECTED,PREFERRED> outif (null) src 192.168.1.172 port 65130 dst ip port 5353 rank info not available Connection to ip port 5353 [udp/mdns] succeeded! |
18
tony1016 2016-01-27 08:03:42 +08:00
@zhengnanlee 是否有防火墙限制入站??如果有,记得加入
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT |
19
buddha 2016-01-27 08:49:07 +08:00 via Android
楼主可以试试用 ss tunnel 转发 DNS 到 VPS 一直在用效果蛮好
|
20
zhengnanlee OP |
21
tony1016 2016-01-27 11:10:35 +08:00
@zhengnanlee 嗯,不就达到你想要的结果了?
|
22
zhengnanlee OP @tony1016 哈哈,是的,服务器那一端是正常的,可是本机的 dnsmasq 没法设置成 5353 端口,端口转发也失败( pfctl 好像因为 SIP ,没法用了)
|
23
tony1016 2016-01-27 20:22:07 +08:00
@zhengnanlee 本机为什么不能设置为 53 端口,我就是设置为 53 端口的啊?
|
24
zhengnanlee OP @tony1016 我设置 VPS 的 ip ,直接设置, chrome 提示 DNS 配置错误
|
25
tony1016 2016-01-28 09:48:06 +08:00
@zhengnanlee 越说越乱了,你 VPS 设置的 5353 端口,本机怎么能用呢,你必须在本机 53 端口启动一个 dnsmasq ,将 dns 请求转发到远程 VPS 的 5353 端口
|
26
zhengnanlee OP @tony1016 dnsmasq 也可以转发吗?我一开始设置 resolv.dnsmasq.conf 为 nameserver VPS 的 IP#5353 ,这样不行
|
27
tony1016 2016-01-28 10:13:50 +08:00
@zhengnanlee 在 dnsmasq.conf 中配置 server=VPSIP#5353 就可以转发所有的请求
|
28
kmahyyg 2016-01-28 20:33:36 +08:00
@zhengnanlee 感谢楼主,我最后收到邮件是这样的。 KiwiVM Vulnerability Scanner 把我的 vps 53port
ban 了,为了防止 DNS ddos 。。。。。。 |
29
zhengnanlee OP @kmahyyg 然后怎么办的了。。
|