V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
114514
V2EX  ›  宽带症候群

有必要在软路由上搭建 dns 缓存服务器么

  •  1
     
  •   114514 · 2019-05-19 01:56:23 +08:00 · 14079 次点击
    这是一个创建于 2019 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前在 b 站上看到一个声称“ 0.1 秒开网页”的教程,(AV16856336 )
    · 原理是利用一台老机子作为 dns 的缓存服务器,替代掉公网提供的 dns 地址,因此省略了多余的解析时间,不过真的有必要那样做么?求大佬分析。毕竟本人不是很懂网页加载时间到底耗在哪儿,如果真的要做,有哪些解决方案是更为有效的?感谢。
    30 条回复    2019-05-21 17:38:03 +08:00
    Trim21
        1
    Trim21  
       2019-05-19 01:59:10 +08:00
    可以参照前端的面试题 “从输入 URL 到页面加载发生了什么”

    https://segmentfault.com/a/1190000006879700
    ochatokori
        2
    ochatokori  
       2019-05-19 02:05:37 +08:00 via Android
    作为用户想要获得更快的载入速度我能想到的就只有加快 dns 解析,买更好的带宽,更好的路由器了
    作为开发者的话就多了

    不过做缓存这种事只能加快第二次的访问速度,第一次硬要说的话多了一层转发还慢了
    registerrr
        3
    registerrr  
       2019-05-19 02:08:55 +08:00
    从原理上来讲会有提升,但是一般来讲用公网 DNS 来解析延迟低一点的也就 5,60ms 用自建的 1ms,为了降低这一点点几乎感觉不出来的延迟不值得去麻烦。当然时间多、对这个感兴趣,自己去折腾一下可以。
    Mohanson
        4
    Mohanson  
       2019-05-19 02:40:01 +08:00 via Android
    可是据我所知,操作系统是自带
    Mohanson
        5
    Mohanson  
       2019-05-19 02:40:16 +08:00 via Android
    dns 缓存的
    jasonyang9
        6
    jasonyang9  
       2019-05-19 07:59:50 +08:00
    系统不一定自带 DNS 缓存,要看 DNS 客户端的实现。。。
    datocp
        7
    datocp  
       2019-05-19 08:09:10 +08:00 via Android
    习惯用 openwrt 里面带 dnsmasq,首先 dns 服务器设定为网关 ip 会快于外网 ip,甚至有必要拦截 udp53 强制使用本地 dns 解析。这主要基于网络延迟考虑的。
    以前说什么用 8.8.8.8 114.114.114.114 之类的,由于网络封锁的存在,会出现直接给出错误的 ip 映射甚至连带 ip 封锁,甚至各种 cdn 加速的存在。习惯了直接用 isp 提供的 dns 解析,当然有必要的话,像在联通线路打不开农行就利用 dnsmasq 加载电信线路的解析结果。
    另外网站加速打开,除了 dns 解析过程快,有时候 mtu 这种封包的拆解过程才能加速网络呑吐,典型的的就是很多路由打开亚马逊美国非常慢。
    iptables -t mangle -A FORWARD -o pppoe-wan -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
    billytom
        8
    billytom  
       2019-05-19 09:33:30 +08:00 via iPhone
    @datocp 想请教下最后这步 iptables 命令的含义,因为我也是 openwrt
    likuku
        9
    likuku  
       2019-05-19 10:36:07 +08:00
    看你访问的网站了... 假若你访问的网站的确解析都很慢,那么这还是有必要的(我最近就不得不在自己树莓派上重新搞起了 DNS 缓存服务器)。

    另外,假若你能在你自有局域网里弄个闲置机器,装个 Squid,再通过它来访问网站,让它把你访问的页面(静态资源)尽可能都缓存在本地 RAM 里( /tmpfs ),将大幅度提高你高频访问的网站的访问速度 (十年前的老玩法了,简单粗暴效果明显)。
    jerryrib
        10
    jerryrib  
       2019-05-19 11:07:10 +08:00 via Android
    able
        11
    able  
       2019-05-19 11:18:09 +08:00
    加速效果微乎其微
    goodryb
        12
    goodryb  
       2019-05-19 11:38:31 +08:00
    1、如果你真要测试有没有效果,OS 层面弄一下好了,linux 下有 nscd,安装后需要配置一下,windows 下有 Dnscache 服务,开启就好。自建 dns 缓存就为了这几十 ms,没必要折腾。
    2、前面还有人提到了 Squid,个人不建议个人用户安装这个,以现在的网络,没必要做缓存,反而还容易因为缓存出现问题。
    goodryb
        13
    goodryb  
       2019-05-19 11:45:14 +08:00
    在 chrome 里面打开开发者工具,选中 disable cache,然后打开你要访问的页面,看下请求中 dns lookup 的耗时,以我这里访问 taobao 为例,各项时间解释看看下面 Google 的文档



    https://developers.google.com/web/tools/chrome-devtools/network/reference#timing-explanation
    goodryb
        14
    goodryb  
       2019-05-19 11:47:42 +08:00
    貌似 disable cache 对 dns 缓存不起作用,找个很久不访问的网站,也就几 ms
    likuku
        15
    likuku  
       2019-05-19 12:38:17 +08:00
    @goodryb 常见国内网站的话,的确用不着折腾这些...
    其它的嘛,有时还真需要,比如 运气不好所用的接入线路服务商很渣,又条件所限没法换。
    smdbh
        16
    smdbh  
       2019-05-19 12:52:20 +08:00
    没有必要,瞎折腾,不如换个质量好点的宽带
    JamesR
        17
    JamesR  
       2019-05-19 13:15:27 +08:00
    网页加载时间到底耗在如下 3 个地方:
    1.我的电脑性能,处理器快不快,快的话浏览器打开快。
    2.我的网络带宽大小,国内大网站一般没问题,跨国要看国际出口拥堵情况。
    3.前 2 个没问题情况下,服务器的上行带宽,一般是百兆口或千兆口,国内带宽(或流量)昂贵,人越多越慢。

    DNS 影响微乎其微,实际上电脑本机就开着 DNS 缓存,服务里面“ DNS Client ”服务就是,命令 ipconfig /displaydns 可显示本机 DNS 缓存,禁用“ DNS Client ”服务后命令失效。
    JamesR
        18
    JamesR  
       2019-05-19 13:23:14 +08:00
    @JamesR #17 第二条打错,改下,改为“ 2.我的网络宽带延迟,丢包,速度等情况,...”
    bclerdx
        19
    bclerdx  
       2019-05-19 14:51:39 +08:00
    @goodryb disable cache 是打勾还是不打勾?
    cwbsw
        20
    cwbsw  
       2019-05-19 17:10:49 +08:00
    @datocp
    他贴的那个 MTU 的命令 OpenWrt 默认就是开启的。
    goodryb
        21
    goodryb  
       2019-05-19 19:25:56 +08:00
    @bclerdx #19 我试了下 disable cache 只对资源加载有效果,对 dns lookup 好像没什么用
    bclerdx
        22
    bclerdx  
       2019-05-19 23:58:39 +08:00
    @goodryb 那就是勾选 disable cache 了么?
    qwvy2g
        23
    qwvy2g  
       2019-05-20 06:45:52 +08:00 via Android
    这个好像不是缓存 dns 解析结果,而是缓存网页。
    titanium98118
        24
    titanium98118  
       2019-05-20 09:19:46 +08:00
    你这个感觉不只是缓存 DNS,还缓存网页
    soho776
        25
    soho776  
       2019-05-20 12:49:46 +08:00
    宽带都 300 兆光纤了,现在那个网站不上 cdn 啊,根本不差 dns 这点时间。
    iwtbauh
        26
    iwtbauh  
       2019-05-20 14:35:29 +08:00 via Android
    1. 现在主流桌面操作系统自带 DNS 缓存,且默认开启。

    2. 路由器本身也可能会进行 DNS 缓存,并把自身的 DNS 服务通过 DHCP (或路由器广告( ra ),或无状态 DHCP )通知给客户端,openwrt 默认如此。

    他这个行为不太可能有什么意义。
    iwtbauh
        27
    iwtbauh  
       2019-05-20 15:11:29 +08:00 via Android
    @billytom #8

    通过钳制 syn 中的 mss 字段,规避不规范的网络安全设备导致出现的各种问题,如黑洞连接和 IP 碎片。
    brMu
        28
    brMu  
       2019-05-20 17:58:17 +08:00 via Android
    @datocp 补充,如果路由器里有 kp 广告过滤,就应该加 PREROUTING mangle
    tankren
        29
    tankren  
       2019-05-21 16:17:45 +08:00
    jocover
        30
    jocover  
       2019-05-21 17:38:03 +08:00 via iPhone
    开呀,本地大约 100 和用户,一天缓存数也不过占用 700kb 的内存,干嘛不开呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5425 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 08:25 · PVG 16:25 · LAX 00:25 · JFK 03:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.