如何配置路由器的 DHCP ?

开场 经常折腾家里网络的你,一定经常遇到这些问题: 为什么明明插上了网线,却打不开路由器的后台? 为什么 NAS 的 IP 地址经常变化? 为什么用上了高价的软路由,打开网页的速度反而变慢? 为什么跟着大佬的视频一通配置,却还是玩不转旁路由? 以上这些问题其实都和 DHCP 有关。 什么是 DHCP? DHCP 是 Dynamic Host Configuration Protocol 的缩写,意思是动态主机配置协议。它的作用,是为每一个接入局域网的设备自动分配一个 IP 地址,并为这些设备自动配置默认网关和 DNS 服务器。 名词解释 如果你不理解网关和 DNS 是什么意思,也不要紧。你可以把网关理解成一个中转站,局域网内的所有设备都要通过这个中转站来与外界联系,而家用网络的网关通常只有一个,那就是路由器。DNS 则要更加复杂一点,我后面会单独制作一期视频来讲解。这里你只要把它理解成一个“电话簿”就可以了。 DHCP 的工作原理 DHCP 协议由一个服务端,和多个客户端组成。服务端一般就是你的路由器,而客户端就是你用来上网的设备。 Discoer 每当一个新设备初次连入局域网,它就会向整个网络广播自己的 MAC 地址。所谓的 MAC 地址,是每个设备的硬件地址,它被写在设备的网卡上,一般情况下无法更改,相当于设备的“身份证号码”。当新设备初次连入,它会向局域网广播自己的 MAC 地址,相当于新员工的自我介绍。这段自我介绍有一个很洋气的名字,叫做 Discover。 Offer 当路由器接收到新设备的广播,就会在现有的 IP 地址中,挑选一个还没有被其他设备占用的空缺地址,并将这个地址和其他配置信息(比如默认网关和 DNS)打包发给这个设备,相当于领导给新员工安排工位。这段安排也有一个非常洋气的名字,叫做 Offer。 Request 接下来的事情就非常简单了,当设备收到路由器发出的配置信息,并且决定套用这些配置,会再次答复路由器,相当于接受领导的安排。这段答复同样有一个很洋气的名字,叫做 Request。 这里要注意一点,如果局域网内有两个以上路由器,并且这些路由都开启了 DHCP 服务,那么它们在收到新设备的广播后,会同时给这个设备发送配置信息。当设备同时收到多个配置信息,会优先回复最先收到的那个。因此,为了避免网络混乱,即使你家里有多个路由器,也最好只开启一个 DHCP 服务。 ACK 回到正题,当路由器收到设备的肯定答复后,就会再给设备回个话,表示占位成功。这时,设备会根据路由器下发的 IP 地址、默认网关和 DNS 服务器,自动配置自己的网络,实现成功联网。路由器的这个回话,叫做 ACK。 解答问题一 说到这里,我们就解决了视频开头提到的第一个问题: 为什么明明插上了网线,却打不开路由器的后台? 这里有两种可能: 1. 你的路由器没有开启 DHCP 服务,你的电脑没有收到路由器下发的 IP 地址。 2. 你的路由器开启了 DHCP 服务,但你的电脑之前设置了静态 IP 地址,而这个静态地址和路由器的地址,不在同一个网段。 ...

2022-05-18 · Mason

利用 Home Assistant 搭建智能家居中枢

背景 随着智能家居的日益普及,各大互联网巨头纷纷进场,导致智能家居的平台和品牌越来越多,且各个平台和品牌间的产品无法互通。例如,你无法用米家的智能开关来控制 homekit 的智能灯,除非你的产品支持双平台,但目前同时支持两个以上平台的智能家居少之又少。 Home Assistant(以下简称 HA)很好地解决了智能家居平台不互通的问题,它是一个开源的智能家居集成平台,可将各个常见平台的产品接入,并通过网页、手机app等多种客户端统一操控,实现真正的「万物互联」。并且最重要的是,这么好用的工具不仅支持 Windows、MacOS、Linux 等多种操作系统,其本身也是开源免费的,并且其极高的扩展性也为爱折腾的数码爱好者提供了全新的研究对象。 通过 Docker 部署 HA 容器 正如前文所述,HA 支持多种操作系统,但如果我们打算将其作为 7x24 小时待机的智能家庭中枢,那么最好的选择就是 Linux 系统,因为它可以运行在诸如树莓派这类低功耗的设备上,随时准备着为我们提供服务。 提到 Linux,我们就不得不提 Docker,它是一种兼容性极高的容器系统,可以适应几乎所有 Linux 环境,做到即装即用。今天,我们将着重介绍通过 Docker 容器部署 HA 的方法。 我的这篇文章详细介绍了 Portainer 这个非常好用的 Docker 管理容器,由于每位读者的系统环境不尽相同,因此本博客往后介绍的所有 Docker 容器安装,不再拘泥于群晖、威联通或者 Unraid,而是统一通过 Portainer 进行。 Portainer 本身的安装可以参考上面提到的文章,本文不再赘述。要安装 HA,我们首先需要登录 Portainer 后台,然后进入本地终端界面,也就是 Local,接着点击左侧的 Containers,进入本地容器管理界面。 点击 Add container,创建一个新容器,Name 随便填,Image 写 HA 官方提供的映像索引 homeassistant/home-assistant:latest,Always pull the image 可以打开,这样以后每次修改容器配置,都会从服务器重新拉取最新的映像。 接着点击下方 Advanced container settings 中的 Volumes,进入目录映射选项卡,点击 map additional volume 按钮新增一个目录映射,右侧的映射方式选 bind,container 里的目录只能写 /config,这是 HA 配置文件的所在目录,host 上的目录可以根据自己需要填写。 ...

2022-04-09 · Mason

利用 Portainer 实现 Docker 端 Jellyfin 硬件解码

原理及环境检测 随着版本的不断迭代,Jellyfin 已经逐渐超过 Plex 和自家兄弟 Emby,成为用户数量最所的个人媒体管理方案,这不仅因为它的所有功能均为免费,更是因为它的源代码完全开源,具有极高的维护与拓展空间。 不论用于运行 Jellyfin 的具体是哪款操作系统,只要该系统是基于 Linux,我们就可以通过 Docker 容器来实现极为简单且方式一致的部署。但相比于原生套件,Docker 有一个显而易见的缺点,即无法直接调用各类系统资源,核显驱动就是其中之一。 要让 Jellyfin 的 Docker 容器实时调用核显驱动(也就是人们常说的开启硬解),要满足两个条件: 拥有支持视频解码的核心显卡,且核心显卡的驱动程序运行正常; 将核显驱动直通给 Docker 容器,并赋予 Docker 容器调用该驱动的权限。 对于系统是否满足上述第一个条件,可以通过以下方式进行检验:首先用 ssh 工具连接到服务器,确保登陆 ssh 的账户拥有系统管理权限,再输入以下命令: ls /dev/dri 如果返回的结果为 card0 renderD128 ,那么恭喜,核显驱动运行正常,硬件系统满足视频解码的基本条件。接下来便是将 renderD128 这个核显驱动直通给 Docker 容器的方法。 为什么必须用 Portainer? 无论是群辉、威联通还是 Unraid,市场上绝大多数 NAS 系统都提供了图形化的 Docker 容器管理工具。但无论上述哪一个,都不支持核显驱动的直通功能。群辉的 Docker 套件无法编辑容器的系统资源参数,威联通的 Container Station 干脆无法编辑已经创建好的容器。 这里所说的“直通”,其实是将 /dev/dri/renderD128 这个驱动文件映射到 Docker 容器的相同位置。这一点利用命令行可以非常轻松地实现,即在 Jellyfin 容器的拉取命令中加入下列参数: --device=/dev/dri/renderD128 \ 因此,要快速拉取并创建一个开启硬件解码的 Jellyfin 容器,只要在 NAS 的命令行界面输入以下命令即可: sudo docker run -d --name jellyfin \ -v /share/Container/Jellyfin/config:/config \ #冒号左边为存放配置文件的目录 -v /share/Container/Jellyfin/cache:/cache \ #冒号左边为存放媒体缓存的目录 -v /share/Media/:/media \ #冒号左边为存放电影文件的目录 -p 8096:8096 \ #web界面访问端口(http) -p 8920:8920 \ #web界面访问端口(https) --device=/dev/dri/renderD128 \ #映射核显驱动 --restart=always \ #重启策略 jellyfin/jellyfin 但对许多轻度用户来说,命令行不仅不便理解,也断绝了后续对容器进行修改和自定义的空间。因此对于绝大多数日常用户来说,我个人强烈推荐使用 Portainer。它本身也是一个运行在 Docker 容器里的程序,但它拥有强大的 Docker 管理功能,是目前市面上功能最完善的网页端 Docker 容器管理界面。 ...

2021-09-09 · Mason

实测苹果专用转接代理可用于翻墙,但中国大陆地区无法使用

昨晚熬夜看了今年的 Apple WWDC 直播。虽然今年没有发布任何硬件设备,但 iOS 15 和 macOS Monterey 的一些新的功能特性确实解决了我的好几个痛点。 一直以来,隐私保护都是苹果公司的宣传重点之一,以致于其越发严苛的隐私政策已经十足地损害了像 Facebook 和 Google 这种以收集用户数据为主要盈利方式的互联网巨头的利益。iOS 14.5 版本新增的“允许 App 请求跟踪”功能,就曾遭到 Facebook 的强烈反对。 针对用户隐私保护,苹果在今年的 WWDC 上公布了全新的 iCloud+ 服务。在订阅价格保持不变的前提下,iCloud 加入了“Homekit 安全摄像头”、“邮件隐私保护”和“专用转接代理(Privacy Relay)”等功能。前两项功能的字面意思都很好理解,那这最后一个“专用转接代理”又是什么东西呢? 其实,看到“代理“两个字时应该就不难猜到,所谓的”专用转接代理“,就是一个类似于 VPN 的服务。当这个功能被开启时, Safari 浏览器的所有流量都将由苹果的服务器进行“转接”,从而达到隐藏用户真实 ip 地址的目的。 既然 Safari 浏览器的流量都由苹果的服务器转接,那么我们是否可以通过开启“专用转接代理”的方式来访问被 GFW 封锁的网站呢?单从理论上来说,答案是肯定的。但是,根据各大外媒的报道,苹果已经主动表示,依据相关国家的政策,专用转接代理功能不对包括白俄罗斯、哥伦比亚、埃及、哈萨克斯坦、沙特阿拉伯、南非、土库曼斯坦、乌干达、菲律宾,以及中国在内的国家和地区开放。 经本人实测,美国 ip ➕ 美区 iCloud 账号可以正常开启专用转接代理,且当 ip 地址变为中国时,代理功能仍会在几分钟内正常运行,此时通过 Safari 浏览器,是可以正常访问 Google 等国外网站的。然而几分钟后,一旦 iCloud 服务器检测到中国大陆的 ip 地址,代理功能就会自动关闭。也就是说,iCloud 服务器对用户实际 ip 地址的检测并非实时进行,而是每隔几分钟进行一次。 这是可能有人会问,能不能通过某种手段,瞒过 iCloud 服务器的检测,以达到长期使用专用转接代理的目的?答案是肯定的,但你必须首先在路由器上套一层外国代理(直接在手机上开启代理软件是行不通的,全局代理也不行),再通过苹果的服务器访问互联网。归根结底,专用转接代理只是一个隐私保护工具,它不能、也不应被用于翻墙,想薅苹果羊毛,用上一个月一美元的翻墙代理的朋友们可能要失望了。

2021-06-08 · Mason

利用 Favicon 为 Hugo 静态站点添加图标

我们在使用 Hugo 生成静态站点时,经常会遇到一些虽不致命,但很不爽的小问题,例如没有自定义站点图标的问题。假如我们跟随了所用主题的默认配置,通常情况下生成的站点要么没有图标,要么直接套用主题自带的图标,这显然无法满足我那强烈的 DIY 欲望。 经常访问本博客的读者可能会注意到,我所使用的 Hugo 主题是一个支持自动切换明暗模式的第三方主题——AutoFuji. 今天在阅读这个主题的说明文档时,我发现原来它是支持 Favicon 图标代码的。于是经过一通简单的操作,我的博客终于有了自己的图标。 为 Hugo 站点添加 Favicon 代码的方法非常简单。首先访问这个网站上传一张图片作为网站图标的母本。其实类似的 Favicon 生成器还有很多,大家可以根据自己的习惯或喜好自由选择,基本功能都是一样的。 图片上传完成后,会自动跳转到参数配置页面。如无特殊需求,保持默认配置即可。点击页面下方的生成按钮生成我们的图标和代码。 生成完成后,点击如图所示按钮下载各类格式的图标包,再将自动生成的 HTML 代码复制到剪贴板。 之后,来到 Hugo 站点的根目录,将刚刚下载的压缩包里的所有文件解压到 /static/ 文件夹下。 用文本编辑器打开 /layouts/partials/favicon.html 文件,清空原有代码,将刚刚复制到代码粘贴进去,保存并退出。 最后,打开 /themes/正在使用的主题名/layouts/partials/head.html 文件(不同主题需要编辑的文件可能不同,例如我所使用的 Fuji 主题就是直接编辑同一目录下的 favicon.html 文件),找到下列代码: <link rel="shortcut icon" href="xxx" /> 将 xxx 替换成 favicon.ico ,保存并退出即可。 此时,我们的 favicon 图标安装工作就宣告完成了。使用 hugo 命令重新生成站点,不出意外的话,就能看到我们刚才上传的站点图标了。

2021-05-27 · Mason