V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhengnanlee
V2EX  ›  DNS

dnsmasq 非标端口设置问题

  •  
  •   zhengnanlee · 2016-01-25 14:15:44 +08:00 · 8444 次点击
    这是一个创建于 3011 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的目的

    实现本机 <-> 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 端口的转发?
    29 条回复    2016-02-05 10:11:04 +08:00
    kmahyyg
        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 就行,其他的问题,当时没碰到过。
    nbndco
        2
    nbndco  
       2016-01-25 14:26:55 +08:00
    这样有什么意义呢?只要有 CDN (也就是几乎所有情况下)就会更慢,连正常使用都受影响。
    zhengnanlee
        3
    zhengnanlee  
    OP
       2016-01-25 14:34:04 +08:00
    @nbndco 有这个想法的过程是,
    很多 Google 搜索的网站不可访问 -> 它们的 ip 在本机是可以 ping 到的 -> 是不是 DNS 服务器没有这些网站的数据(或者被污染) -> 想用一个好一些的 DNS -> 自国内向国外的 DNS 查询请求好像不太行得通 -> 想要实现一个 DNS 的代理 -> dnsmasq 非标端口问题。

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

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

    我不是直连外面的 DNS#5353 ,我个人没必要
    我是 dnsmasq 监听 53 ,然后传给 dnsforwarder (监听 127#53535 )再去外面 DNS 获取解析
    zhengnanlee
        15
    zhengnanlee  
    OP
       2016-01-25 22:43:16 +08:00 via Android
    @imn1 哦哦明白了,我说怎么没有找到地方填写 vps 的 IP
    tony1016
        16
    tony1016  
       2016-01-26 09:47:49 +08:00
    @zhengnanlee 在本地用 nc -vzu ip 5353 测试一下到 VPS 的端口是否通畅
    zhengnanlee
        17
    zhengnanlee  
    OP
       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
        18
    tony1016  
       2016-01-27 08:03:42 +08:00
    @zhengnanlee 是否有防火墙限制入站??如果有,记得加入
    iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    buddha
        19
    buddha  
       2016-01-27 08:49:07 +08:00 via Android
    楼主可以试试用 ss tunnel 转发 DNS 到 VPS 一直在用效果蛮好
    zhengnanlee
        20
    zhengnanlee  
    OP
       2016-01-27 09:31:55 +08:00
    @tony1016 dig www.google.com @VPS 的 IP -p 5353 这个是正常的,是不是就没有限制?
    tony1016
        21
    tony1016  
       2016-01-27 11:10:35 +08:00
    @zhengnanlee 嗯,不就达到你想要的结果了?
    zhengnanlee
        22
    zhengnanlee  
    OP
       2016-01-27 14:53:40 +08:00
    @tony1016 哈哈,是的,服务器那一端是正常的,可是本机的 dnsmasq 没法设置成 5353 端口,端口转发也失败( pfctl 好像因为 SIP ,没法用了)
    tony1016
        23
    tony1016  
       2016-01-27 20:22:07 +08:00
    @zhengnanlee 本机为什么不能设置为 53 端口,我就是设置为 53 端口的啊?
    zhengnanlee
        24
    zhengnanlee  
    OP
       2016-01-27 22:55:14 +08:00
    @tony1016 我设置 VPS 的 ip ,直接设置, chrome 提示 DNS 配置错误
    tony1016
        25
    tony1016  
       2016-01-28 09:48:06 +08:00
    @zhengnanlee 越说越乱了,你 VPS 设置的 5353 端口,本机怎么能用呢,你必须在本机 53 端口启动一个 dnsmasq ,将 dns 请求转发到远程 VPS 的 5353 端口
    zhengnanlee
        26
    zhengnanlee  
    OP
       2016-01-28 10:10:06 +08:00
    @tony1016 dnsmasq 也可以转发吗?我一开始设置 resolv.dnsmasq.conf 为 nameserver VPS 的 IP#5353 ,这样不行
    tony1016
        27
    tony1016  
       2016-01-28 10:13:50 +08:00
    @zhengnanlee 在 dnsmasq.conf 中配置 server=VPSIP#5353 就可以转发所有的请求
    kmahyyg
        28
    kmahyyg  
       2016-01-28 20:33:36 +08:00
    @zhengnanlee 感谢楼主,我最后收到邮件是这样的。 KiwiVM Vulnerability Scanner 把我的 vps 53port

    ban 了,为了防止 DNS ddos 。。。。。。
    zhengnanlee
        29
    zhengnanlee  
    OP
       2016-02-05 10:11:04 +08:00
    @kmahyyg 然后怎么办的了。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3286 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:09 · PVG 21:09 · LAX 06:09 · JFK 09:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.