dnsmasq 非标端口设置问题

2016-01-25 14:15:44 +08:00
 zhengnanlee

我的目的

实现本机 <-> VPS <-> 8.8.8.8 的 DNS 查询请求的中转,借此可以“准确地”使用“真正的” 8.8.8.8 服务器返回的 IP 。 8.8.8.8 返回的结果在 100ms 内,在我看来是不正常的。

设置

VPS 设置

我已配置 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

本机设置( OS X )

已采用 这篇文章 所述方法进行设置,其中 resolv.dnsmasq.conf 文件设置为

nameserver VPS 的 IP#5353

( nameserver 208.67.222.222#5353 也不行,而 OpenDNS 开设 5353 端口)

遇到的问题

  1. 仍然无法解析域名( Chrome 返回的错误为 DNS_PROBE_FINISHED_BAD_CONFIG ),所以我在想是否是 dnsmasq 的设置问题(或者说非标端口该如何设置)。
  2. 如果无法设置非标端口,那么端口转发时,如何设置:国内网址走 114 等 DNS
  3. 我曾按照 这个网址 配置 OS X 的 pfctl ,但不成功。请问该如何实现 53 端口至 5353 端口的转发?
8567 次点击
所在节点    DNS
29 条回复
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 就行,其他的问题,当时没碰到过。
nbndco
2016-01-25 14:26:55 +08:00
这样有什么意义呢?只要有 CDN (也就是几乎所有情况下)就会更慢,连正常使用都受影响。
zhengnanlee
2016-01-25 14:34:04 +08:00
@nbndco 有这个想法的过程是,
很多 Google 搜索的网站不可访问 -> 它们的 ip 在本机是可以 ping 到的 -> 是不是 DNS 服务器没有这些网站的数据(或者被污染) -> 想用一个好一些的 DNS -> 自国内向国外的 DNS 查询请求好像不太行得通 -> 想要实现一个 DNS 的代理 -> dnsmasq 非标端口问题。

速度变慢,我想着能不能采用一个表,如问题 2 所述。

感谢您的问题
zhengnanlee
2016-01-25 14:35:59 +08:00
@kmahyyg 发现这个问题了,但我觉得原因可能是国内到国外的路程中, 53 端口被污染了吧,当然也有可能是 KiwiVM 的问题,毕竟 53 端口容易被攻击嘛。您说的方法我去实验一下,感谢您的回复!
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 代理。
nbndco
2016-01-25 14:58:21 +08:00
@zhengnanlee 用 chinadns 之类的吧,很简单,如果返回国内 IP ,或是已知的 fake IP ,就再次请求其他指定的 DNS 服务器。
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)工作
一切畅顺
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
mhqschen
2016-01-25 16:03:32 +08:00
@imn1 这个 DNS 工具 B 是?
imn1
2016-01-25 19:04:15 +08:00
@mhqschen
dnsforwarder
tony1016
2016-01-25 19:45:34 +08:00
建议先用 nc 检查一下到 5353 端口的 udp 通了没
zhengnanlee
2016-01-25 20:46:21 +08:00
@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

这样算开启了嘛?
zhengnanlee
2016-01-25 21:08:52 +08:00
@imn1 木有配置成功。。能说详细一点嘛~
imn1
2016-01-25 21:37:33 +08:00
@zhengnanlee
还要怎么详细?

我不是直连外面的 DNS#5353 ,我个人没必要
我是 dnsmasq 监听 53 ,然后传给 dnsforwarder (监听 127#53535 )再去外面 DNS 获取解析
zhengnanlee
2016-01-25 22:43:16 +08:00
@imn1 哦哦明白了,我说怎么没有找到地方填写 vps 的 IP
tony1016
2016-01-26 09:47:49 +08:00
@zhengnanlee 在本地用 nc -vzu ip 5353 测试一下到 VPS 的端口是否通畅
zhengnanlee
2016-01-26 16:37:30 +08:00
@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!
tony1016
2016-01-27 08:03:42 +08:00
@zhengnanlee 是否有防火墙限制入站??如果有,记得加入
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
buddha
2016-01-27 08:49:07 +08:00
楼主可以试试用 ss tunnel 转发 DNS 到 VPS 一直在用效果蛮好
zhengnanlee
2016-01-27 09:31:55 +08:00
@tony1016 dig www.google.com @VPS 的 IP -p 5353 这个是正常的,是不是就没有限制?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/253201

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX