V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
kn007
V2EX  ›  Linux

请教如何规避大量的 udp 类的 DNS 查询连接保持?

  •  
  •   kn007 ·
    kn007 · 2015-11-24 22:16:25 +08:00 · 4565 次点击
    这是一个创建于 3282 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教下大家,用 ss -anutp |grep :53 |wc -l 得到了 1050 个连接, ESTABLISHED 状态。

    其中 310 个是 Nginx ,剩余的都是 php-fpm 发起的。

    随便举例一条

    udp ESTAB 0 0 127.0.0.1:26076 8.8.8.8:53 users:(("nginx",4867,76))

    uptime 目前已有 100 天。

    Nginx 有反代 google , php 有 gethostbyname 与 gethostbynamel 。

    现有这个连接存在的时间为免太长,而且复用率多高是个问题,有无什么解决办法规避这个情况?

    谢谢!

    14 条回复    2015-11-25 17:25:07 +08:00
    wdlth
        1
    wdlth  
       2015-11-24 23:14:46 +08:00
    把 Google 加到 hosts 里面试试,减少查询。
    ncisoft
        2
    ncisoft  
       2015-11-25 04:33:27 +08:00 via Android
    udp 不是无连接的吗
    ryd994
        3
    ryd994  
       2015-11-25 06:39:31 +08:00 via Android
    你可以考虑装个 bind 或者 dnsmasq 来做缓存,/etc/resolv.conf 写 127.0.0.1
    注意只监听本地,否则就等着变成反射吧。
    kn007
        4
    kn007  
    OP
       2015-11-25 07:31:18 +08:00
    @wdlth Google 根本不知道是哪个 ip ,有些 ip 反代了,功能就没了。所以无法。如果能 ip ,我就用 varnish 反代了。。。

    @ncisoft 鬼知道,我也奇怪

    @ryd994 有这个想法,以前也弄过,不过后来因为 dns 更新不及时,又 pass 了
    datocp
        5
    datocp  
       2015-11-25 08:04:52 +08:00 via Android
    让 udp 快速消亡只能调整 timeout 吧,但这个 timeout 设置也不是越小越好,不然部分通讯会有问题。另外也有通过 limit 结合 reject 丢弃的,不过那种方法就会有抑制问题。目前 vps 上也是用 dnsmasq 用于 vpn 查询, drop 来自 wan 端的查询。
    修改 /etc/sysctl.conf
    net.netfilter.nf_conntrack_generic_timeout=600
    net.netfilter.nf_conntrack_udp_timeout=65
    net.netfilter.nf_conntrack_udp_timeout_stream=120
    net.netfilter.nf_conntrack_tcp_timeout_established=600
    net.netfilter.nf_conntrack_tcp_timeout_syn_sent=120
    net.netfilter.nf_conntrack_tcp_timeout_syn_recv=60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120
    net.netfilter.nf_conntrack_tcp_timeout_time_wait=120
    net.netfilter.nf_conntrack_tcp_timeout_close=10
    net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
    net.netfilter.nf_conntrack_tcp_timeout_last_ack=30
    net.ipv4.tcp_fin_timeout=30
    net.ipv4.tcp_keepalive_time=120
    kn007
        6
    kn007  
    OP
       2015-11-25 08:22:49 +08:00
    @datocp 你这里面大部分都是 tcp 的。。。对 udp 有用么。。。

    看来还是要用 dnsmasq...
    kn007
        7
    kn007  
    OP
       2015-11-25 08:29:45 +08:00
    @datocp 我查看了下,默认 sysctl 已经定义好了这些值了
    ncisoft
        8
    ncisoft  
       2015-11-25 11:47:37 +08:00 via Android
    @kn007 据我以前的经验, udp 在实现了一次会话之后,是会出现 establish 状态的,这也不是什么大问题
    ncisoft
        9
    ncisoft  
       2015-11-25 11:49:54 +08:00 via Android
    @kn007 你机器为啥不用本地服务商提供的 DNS 呢,快得多,用 8888 干毛线
    kn007
        10
    kn007  
    OP
       2015-11-25 14:02:39 +08:00
    @ncisoft 我是美国 VPS 。。。直连 ping < 1ms
    我只是看到连接数过多,倒没觉得是大问题。
    kn007
        11
    kn007  
    OP
       2015-11-25 14:03:14 +08:00
    @ncisoft 再说了,无论我用哪个都会有长连接。。
    ryd994
        12
    ryd994  
       2015-11-25 15:30:08 +08:00
    @kn007 缓存时间可以调
    kn007
        13
    kn007  
    OP
       2015-11-25 16:08:39 +08:00 via Android
    @ryd994 额,你指什么? dnsmasq ?
    ncisoft
        14
    ncisoft  
       2015-11-25 17:25:07 +08:00 via Android
    @kn007 这种所谓的连接命都不长
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5875 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.