40块钱解决IPTV内网融合

起因

去年的这个时候,解决了家里组网的问题:《我的家庭AC+AP分体组网高性价比满血方案》。最近,由于家里要看直播的需求开始骚动,于是把目光投向了电信的IPTV。

之所以选择运营商的IPTV,主要是因为互联网三方直播走的是公网,遇到节假日直播,非常容易卡顿。而运营上IPTV具有独立带宽、vlan专网、不占用互联网带宽、有4K信号源等优点,使用感受上非常稳定,尤其是看世界杯直播、晚会直播有相当优势。

基础知识

运营商的IPTV直播一般使用igmp 组播协议。认证上,主要有两种,一种是电信机顶盒上PPPOE拨好,一种是IPoE, 也就是DHCP+r认证:

DHCP+OPTION扩展字段进行认证,又称为IPoE认证方式。用来作为DHCP扩展的OPTION字段主要为OPTION60和OPTION82。其中,OPTION60中带有Vendor和Service Option信息,是由用户终端发起DHCP请求时携带的信息,网络设备只需要透传即可。其在应用中的作用是用来识别用户终端类型,从而识别用户业务类型,DHCP服务器可以依赖于此分配不同的业务IP地址。OPTION82信息是由网络设备插入在终端发出的DHCP报文中,主要用来标识用户终端的接入位置,DHCP OPTION82信息可以由DHCP SNOOP-ING或DHCPRELAY设备进行插入。

成都地区是第二种认证方式,也是当前把IPTV融合到内网最简单的方式。

网络结构及设备

家里设备挺多,但是结构尽量保持简单:光猫桥接,在主路由A进行拨号;电信IPTV直插电信盒子。主路由A下面挂了两个10口千兆交换机,且都不支持vlan, 两个交换机之间通过光纤连接。弱电箱空间足够,且网线预留充足,因此就不考虑vlan单线复用方案了。

从海鲜市场40包邮购入了一个今天主角——新路由mini,并刷入padavan作为路由器B待接入内网。

IPTV内网融合设置方法

  1. 光猫IPTV的LAN口接入独立的路由器B的WAN口。路由器B只有个作用:接收组播的IPTV数据,然后将它通过udprxy转为http供内网客户端访问。路由器
  2. 设置路由器B的WAN口。因为IPTV的LAN口是组播,成都地区IPTV虽然采用了IPoE认证,但是因为我们不需要看回放,因此只需要随意设置一个IP即可,注意改IP不要跟主路由A在同一个网络。
  3. 路由器B的LAN口接入路由器A的LAN口。设置路由器B的LAN地址为主路由A的某地址,这里我设置为 192.168.10.252。关闭路由器B的DHCP功能,避免跟主路由A的DHCP冲突。
  4. 开启路由器B的udprxy,设置端口 8848。 以成都地区为例,在VLC上就可以通过 http://192.168.10.252:8848/rtp/239.93.1.12:2224 观看CCTV-5的直播了。
  5. 开启主路由器xUPNPd, 然后上传网友分享的m3u节目表单,实现在内网任何设备通过DLNA共享节目列表的功能。

使用感受

  1. 因为使用路由器B进行了udp转http到内网,因此可以完全在内网关闭组播协议,IPTV融合到内网后,对内网没有任何影响。
  2. 如果想保留电信的IPTV LAN口,可以把光猫上的LAN口多绑定一个到光猫的IPTV配置上(一般为 _OTHER_B_VID_XX)。
  3. 便宜购买的新路由mini价格便宜,但是一个百兆路由。然后,实际测试下来,发现1路1080P占用带宽约 10mbps, cpu占用20%,也就是说同时播放5路1080P已经达到CPU极限,但是带宽仅占用到50mbps。一路4K占用带宽 25mbps, cpu占用 60%, 同样也是先达到CPU极限。完全不用纠结百兆路由带宽的问题。
  4. 家里宽带使用的是电信。4K信号源还是比较少,目前使用下来CCTV的奥运频道4K无论是内容还是信源都是最值得观看的。

我的家庭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 已经发布的部分创业产品。过两年以后,我会回头再次审视以上判断,说不定,上面的判断全都错了。