我的家庭AC+AP分体组网高性价比满血方案

赶在成都降温前搬入了新居。以前的房子装修时因为还在帝都上学,网线布线和施工比较残废,这次从装修设计就计划使用AC+AP的方案,因此每个房间,包括厨房都预留了网线。剩下的就是买入网络设备塞进去。如果你的预算在5000以上,你可以直接看思科和UBNT的方案,稳定可靠,没有花钱的不是。如果你的预算跟我一样准备控制在3000以下,那么这篇文章应该可以解答你从设备选择到安装的绝大部分疑惑。

为什么选择AC+AP方案?

这次的网络方案目标是在预算有限(<3000)的情况下,有线网络千兆,全屋5G无线漫游、信号无死角。

这个目标下,一个路由全屋覆盖的方式首先被淘汰,因为卫生间死角怎么测试都无解。Mesh方案不考虑,太鸡肋,效果没有AC+AP好,价格整体也没便宜多少。

因此,AC+AP的方案成了唯一选择。按照房屋面积,规划AP数量为5个,两个吸顶AP,3个86面板AP。在预算范围内能选择的方案基本只有tp-link. 而对于这个品牌,网上能查到的信息也是褒贬不一。仔细研究了一下,希望以下信息对你有用。

实现无线漫游的先决条件

全屋无线漫游可以理解为AC+ACP设备都需要支持802.11 k/v/r 三个协议。这三个协议的具体作用这里不具体展开,也不要浪费时间相信很多设备不支持802.11 r,不支持这个协议也可以的论调。结论就是,真正的漫游需要这三个协议一个都不能少。在协议支持上,AC和AP的职能有所不同:AC负责控制是否开启801.22 k/v/r协议;AP负责在终端实际支持这三个协议。

选择什么样的AC?

组网方案中,AC主要进行AP的管理和控制。且AC与AP一般为厂家自有协议通信,因此AC与AP一般是需要配套的。对于tp家,现在性价比最该的就是AC100 V4.0, 可以管理100个AP,且支持802.11 k/v/r,且可以旁挂方式接入。现在在售的全新设备,基本都是V4.0版本。据说V3.0版本也可以,如果实在预算有限,可以考虑闲鱼收一个3.0版本。

需要说明的是,AC是旁挂方式接入,因此虽然AC100只是一个百兆AC,但是因为本身只负责AP管理,并不承载实际的上网流量,因此完全不会成为瓶颈,更没有购买AC300等千兆AC的必要。

选择什么样的AP?

不得不说,tp家AP真的是我见过最杂乱的产品线。型号众多,几乎覆盖千元一下各个价位,但是又没法从参数上看出产品线的分类和定位。而各个型号对漫游协议802.11 k/v/r的支持程度也是语焉不详。这就导致如果不做功课,买回来的东西期望和实际必然不匹配。这也是很多人觉得tp“垃圾”的根本原因。

总结来说,tp家AP只有高通硬件方案+支持802.11 k/v/r 值得选择。其他型号都不值得购买。高通方案是因为相对发热低,更加稳定;而满血漫游协议支持是全屋良好漫游体验的前提。截至2020年底,tp家满足这两个条件的型号有一下几款:

  • 支持KVR协议的86面板式AP,总共包括三款:
    1. AP1308GI,要求v2.0及以上 【9.71W】
    2. AP1750GI,要求v2.0及以上 【9.37W】
    3. AP1758GI,要求v2.0及以上 【10.73W】
  • 支持KVR协议的吸顶式AP,总共包括三款:
    1. AP1200GC,无版本要求 【9.4W】
    2. AP1750GC,要求v2.0及以上 【21.28W】
    3. AP1758GC,要求v2.0及以上 【15.31W】

价格由低到高,丰俭由人。从我的预算出发,选择的是3个AP1308GI,2个AP1200GC,实际到手以后发现版本都是V2.0。需要注意的是,面板式AP AP1308GI 已经停产,当前阶段更加推荐选择AP1758GI。

实际安装过程中的问题

  • 86面板式AP散热不太好,因此我选择在暗装盒上面对接一个明装盒,然后将AP面板安装在明装盒上。这种安装方式实际解决了两个问题:1、面板AP实际上并没有紧靠墙体,因此,散热更佳;在当前室内21度情况下,面板为温热;2、解决面板AP直接安装暗盒时空间不够的问题。理论和实际是有差距的,即使号称86面板AP,实际安装的时候也是很难安装进安装86线盒的,主要是因为上方的网线头以及AP背后的凸出严重挤占了空间。
  • 吸顶AP可以壁挂,如果家里不能接受吸顶,可以把AP壁挂在电视墙上。信号和覆盖基本不受影响。
  • AC控制器默认不会开启 802.11 r,需要手动登录开启。AC控制器每次修改配置以后,一定记得保存,否则不会生效。
  • 漫游效果以主观感受为准,软件信号强度仅做参考。
  • 安装完成以后,发现一个AP无法被AC识别。先检查AP LED是否闪烁判断供电是否存在问题,如果没有问题,可能是第一次组网未识别,可以重新插拔AP的网线重启尝试入网识别。
  • 六类网线铜线是比较粗壮的,手工打网线头手指比较疼,做好心理准别。
  • 大部分智能家居设备都不支持5G,因此2.4G网络还是需要保留。认证上,某些智能家居设备只支持不安全的TRIP算法,只开启AES可能导致无法认证入网。如果有安全洁癖,可以把2.4G的SSID隐藏。
  • 弱电箱相对空间有限,而设备又比较多,可以考虑把86面板操作扔掉,换上一个短小的多面插线板(各个面都有插孔),扩展更强,且安全、美观。

总结及使用感受

  • 整体预算控制在2500以下,主要是因为1688购买+运气好买到了库存的AP1308GI。
  • 全屋漫游苹果设备和安卓华为设备主观感受都超出预期。家里没人玩手机游戏,不太关注漫游延迟,多媒体和应用主观使用感受非常满意。考虑到实际价格,能打个接近满分的分数。

整个方案没有提到路由器,当前还是使用的光猫作为路由器使用。等后面又想折腾的时候,应该会入手一个 UBNT ER-X。

Ubuntu 20.04 原生 WireGuard 初体验

前不久 Ubuntu 20.04 正式 release 了,挺多期待已久的新特性都转正成为了“原生”,如zfs、WireGuard. 而作为一名 gopher, 我留意到,负责维护 golang 标准库中网络相关(net/http)的 committer Bradfitz 前不久从Google离职加入了基于 WireGuard 技术创业公司 Tailscale. 这引发我强烈的好奇,因此 Ubuntu 20.04 发布,自然是要体验一下 WireGuard.

WireGuard 的关键特性

WireGuard 一直宣传自己是现代的快速安全的VPN。快速主要体现在部署的便捷、高性能(通过内核原生+CPU友好的加密算法实现);安全则是从设计之初就考虑到了了前辈的一些安全问题,以及学院派研究的加持,更多细节可以参考 technical whitepaper. 当然,从当前的limitation看,ID还无法做到前向安全,因此无法做到 no-tracking。

WireGuard 安装及配置

安装直接参考官方Installation文档,配置可以参考 Set Up WireGuard VPN on Ubuntu.

几点疑问及思考

WireGuard 能作为你特殊用途协议吗?

不能。主要原因有两点:

  • 协议没有做混淆,也没有隐藏包特征,过不了DPI(Deep Packet Inspection)检测。
  • ID非前向安全。因此通信一方compromised以后,会泄露历史通信peer.

WireGuard Server 支持 DDNS 吗?

支持。在一些场景,可能 server 端并没有一个固定IP,这种时候我们一般是使用DDNS将动态IP绑定在一个域名上面。这种场景下,配置client端配置时,将Server Public IP配置为域名即可:

[Peer]
PublicKey = <server public="" key="">
Endpoint = <server ddns="" domain="">:51820
AllowedIPs = 10.0.0.2/24, fd86:ea04:1115::5/64

WireGuard Server 是否可以动态添加 peer?

不可以也可以。因为 WireGuard 理念认为提前设计和分配自己的网络更佳好的方式。不过,也并不是完全没有work around的方式。如果你有动态IP和配置的需求,个人用户可以参考wg-dynamic, 企业用户推荐直接使用 Tailscale 的产品。

一个出生在内核的VPN到底有何特殊的意义?

回到本源,VPN本身的目的是什么?私以为是anytime, anywhere, 简单、快速、安全的网络互联。而这与WireGuard的设计目标是完全一致的。互联网底座这几年的发展趋势之一是加密整个互联网:元老级应用层协议http在发展过程中不断进化,来到http/2 的时候我们看到的一个显著改变那就是 mutilplex 和 force https。而作为更加底层的网络基建VPN却一直没有出现这样的角色。WireGuard的出现让我们看到了这个可能,但也只是一个更好的VPN的定位。而直到20.04确认将其加入内核,为其加密整个网络插上翅膀,我们才有理由相信这个角色到位了。

从这个角度来看,WireGuard无限接近理想的VPN,或者说它重新定义了VPN的初心。因此,不要拿个人日常运动小需求来揣测WireGuard的鸿鹄之志。顺着这个方向继续看,可以看到 WireGuard 的(潜在)应用场景有:

  • 远程办公网络基建。传统的VPN能不能解决?能。但是都解决得不好,要么是部署太过复杂,要么协议本身就因为历史原因漏洞一大把。而WireGuard部署成本极低(如果你按照上述文档部署一次,应该不会超过10分钟),全客户端支持,code base 只有4000行,非常容易发现、修复、迭代。而这次疫情的出现,让远程办公成为新常态推进了一大步。但是扪心自问,有多少所谓的远程办公是战斗力残废,又有多少其实是临时让IT开了个网络口子裸奔办公?因此,私以为基于WireGuard的远程办公在未来一两年是能看到几家公司成长起来的。
  • 异地多活架构。K8S生态解决单IDC可用性问题是足够的,但是在当前越来越强调稳定、体验产品时代,很多公司都开始走上异地多活的架构。WireGuard可能带来两个契机:1. 云厂商IDC互通的大一统;2. 自主异地多活架构的标准化,而这可能带来一波IDC异地多活网络中间件的开源生态繁荣。
  • 智能家居网络路由器。虽然现在的家电只要搭配一个wifi就号称自己是智能家电,但大多数不过是把家电连到厂家的服务器。这只能算是智能家电社会主义初级阶段,未来理想的形态是家庭中的设备与业主anytime, anywhere的互通。以前的解决方案都太trick了,而WireGuard找了个好爹,并且其极低的门槛都有希望在这个系分领域有所建树。

而以上这些,不过是 Bradfitz 的新东家 Tailscale 已经发布的部分创业产品。过两年以后,我会回头再次审视以上判断,说不定,上面的判断全都错了。

HTTP/3 已经箭在弦上,你准备好了吗?

去年的这个时候,国内的 web 网络环境开始普及和部署 HTTP/2. 时隔一年,HTTP/2 的普及程度有了显著提升,而各大CDN厂商普及的广度和速度一直走在行业前列。甚至有不少CDN厂商在直播以及部分HTTP场景还引入了 QUIC.

在拙文《当我们在谈论HTTP队头阻塞时,我们在谈论什么?》中,我们提到,HTTP/2 over QUIC 是当前唯一应用落地解决了传输层队头阻塞问题的HTTP实现。那个时候,无论是 HTTP/2 over TCP 还是 HTTP/2 over QUIC(UDP) 都被我们认为是 HTTP/2,只是传输层使用的协议不一样。这种略带暧昧的模糊叫法在2018年11月成为了历史:

在2018年10月28日的邮件列表讨论中,互联网工程任务组(IETF) HTTP和QUIC工作组主席Mark Nottingham提出了将HTTP-over-QUIC更名为HTTP/3的正式请求,以“明确地将其标识为HTTP语义的另一个绑定……使人们理解它与QUIC的不同”,并在最终确定并发布草案后,将QUIC工作组继承到HTTP工作组。在随后的几天讨论中,Mark Nottingham的提议得到了IETF成员的接受,他们在2018年11月给出了官方批准,认可HTTP-over-QUIC成为HTTP/3。

虽然看起来像是之前的 HTTP/2 over QUIC 换了一个名称(从我个人角度理解,取名为 HTTP/2.1也许更合适),但是其背后却体现了 IETF 对 HTTP 未来标准的态度和方向,也许几年以后来看这次名称的确立会更加明白其重要意义。

HTTP/3 与 HTTP/2 over QUIC 的区别

QUIC 将成为一个通用安全传输层协议

当前阶段,Google 实现的 QUIC 与 IETF 实现的 QUIC 是不兼容的。Google 版 QUIC 只能用于 HTTP/2,且在协议层面与 HTTP/2 有一些强绑定。如 QUIC 帧映射 HTTP/2 frame. 这就导致很多大厂都没有跟进 QUIC,使得 HTTP/2 over QUIC 基本只能在 Google 自家的 Chrome, Gmail 等软件中普及使用,一度给行业造成“只有Google在弄”的错觉。

纳入 IETF 以后,显然 Google 就不能这么玩了。QUIC 定位为一个通用安全传输层协议:

可以近似的认为 QUIC over UDP 将成为下一代(或替代)TLS over TCP. 也就是说, QUIC 将能应用于任何应用层协议中,只是当前阶段将优先在 HTTP 中进行应用和验证。

统一使用 TLS 1.3 作为安全协议

2018年,有几个重要的WEB标准终于尘埃落定,其中一个便是 RFC 8446 TLS 1.3. 这个标准对于降低延迟,改善用户体验,尤其是移动端的体验有非常重要的意义。在拙文《TLS1.3/QUIC 是怎样做到 0-RTT 的》中,我们提到 虽然 TLS 1.3和 QUIC 都能做到 0-RTT,从而降低延迟,但是 QUIC 却自顾自地实现了一套安全协议。主要是因为当时 TLS 1.3 标准还没有发布,而 QUIC 又需要一套安全协议:

The QUIC crypto protocol is the part of QUIC that provides transport security to a connection. The QUIC crypto protocol is destined to die. It will be replaced by TLS 1.3 in the future, but QUIC needed a crypto protocol before TLS 1.3 was even started.

如今,TLS 1.3 标准已经发布,而 HTTP/3 也纳入 IETF,因此 QUIC 也就顺理成章的使用 TLS 1.3 作为其安全协议。Google 在这些方面倒是从来都不鸡贼和墨迹,点赞。

使用 QHPACK 头部压缩代替 HPACK

其实,QPACK与HPACK的设计非常类似,单独提出QPACK主要是更好的适配QUIC,同时也是 Google 将 QUIC 从与 HTTP/2 的耦合中抽离出来,与 IETF 标准完成统一的必要一步。

HTTP/3 问题与挑战

UDP 连通性问题

几乎所有的电信运营商都会“歧视” UDP 数据包,原因也很容易理解,毕竟历史上几次臭名昭著的 DDoS 攻击都是基于 UDP 的。国内某城宽带在某些区域更是直接禁止了非53端口的UDP数据包,而其他运营商及IDC即使没有封禁UDP,也是对UDP进行严格限流的。这点上不太乐观,但是我们相信随着标准的普及和推广落地,运营商会逐步改变对UDP流量的歧视策略。国外的情况会稍好一些,根据Google的数据,他们部署的QUIC降级的比例不到10%。

QUIC 不支持明文传输

对于用户来说,这是一个优势,并不是问题。对于国内内容审查环境来说是个不可忽视的坎。但QUIC以后毕竟也是基于TLS协议的,国内HTTPS都能普及下来,QUIC的普及也许会更乐观一些。

UDP 消耗资源多

当前阶段,UDP消耗的CPU资源多,且处理速度慢。这是不争的事实,但是我相信随着UDP应用的增多,内核和硬件的优化一定会跟上,直至达到或超过TCP的性能。而 QUIC 因为实在应用层实现,因此迭代速度更快,部署和更新难度和代价更小,能够一定程度缓解如TCP那样的协议僵化问题。

进一步了解 HTTP/3

如果希望全面的了解 HTTP/3,推荐 Daniel Stenberg (CURL 作者)的 HTTP/3 explained, 如果不想看英文,可以翻阅 Yi Bai 同学翻译了中文版本HTTP/3详解