HomeLab #1: MikroTik 作为家庭路由器

Hacker News Top 工具

摘要

实用指南:设置MikroTik路由器用于家庭实验室,涵盖如何识别ISP连接类型(IPoE与PPPoE)以及WAN IPv4地址(公网与CGNAT/DS-Lite),以便正确配置路由器。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/20 09:47

# HomeLab #1: 将 MikroTik 用作家庭路由器 来源:https://justsomebody.dev/blog/mikrotik-home-router ## 一切是如何开始的…… 一段时间以来,我一直在考虑搭建自己的家庭实验室。我想在自己的项目上折腾,而不依赖云服务商,或者拥有自己的存储空间来备份,因为云存储的价格越来越贵。 没有预先搭建好合适的网络,家庭实验室就无法完整。鉴于我使用 ISP 提供路由器时遇到的性能和安全性问题,我希望更好地控制家庭网络流量。我决定将流量重点放在有线连接上,减轻 WiFi 负担,并确保本地网络设备之间的连接尽可能快。 这时就轮到 MikroTik L009UiGS‑RM (https://mikrotik.com/product/l009uigs_rm) 登场了。它拥有足够的千兆以太网端口,可以连接墙上所有的以太网接口。PoE 也是一个不错的加分项,因为我可以用它为接入点供电,而无需使用电源适配器。这款路由器外形小巧,可以安装在墙上。 ## 了解您的 ISP 不过,在动手操作路由器之前,我需要弄清楚您的 ISP 究竟是如何提供互联网连接的,因为这并不简单。有两个因素决定了您的设置,它们彼此独立:WAN 的认证方式,以及它获得的是哪种 IPv4 地址。在技术论坛上快速搜索一下,或者咨询 ISP 支持热线,通常就能得到答案。 ### IPoE 还是 PPPoE 在波兰,有些提供商直接插入以太网线,通过 DHCP 分配地址;这就是 IPoE¹ (https://justsomebody.dev/blog/mikrotik-home-router#user-content-fn-8)。其他提供商则要求提供 PPPoE² (https://justsomebody.dev/blog/mikrotik-home-router#user-content-fn-3) 用户名和密码,有时还需要在专用 VLAN³ (https://justsomebody.dev/blog/mikrotik-home-router#user-content-fn-2) 上进行。正确的设置路径完全取决于这个细节。 | 协议 | ISP 提供的内容 | MikroTik 上的典型设置 | |------|----------------|----------------------| | IPoE | IP 地址、网关、DNS(通过 WAN 上的 DHCP) | 在 WAN 端口添加 DHCP 客户端 | | PPPoE | 用户名和密码,有时通过 VLAN | 如果需要,先创建 VLAN,然后添加 PPPoE 客户端 | ### 公有或私有 WAN IPv4 协议只告诉您路由器如何登录。另外,请检查您获得的地址是公有的还是私有的,因为 WAN 端口上的私有 IPv4 地址总是意味着 CGNAT⁴ (https://justsomebody.dev/blog/mikrotik-home-router#user-content-fn-6):您的 ISP 将一个公有 IPv4 地址共享给许多客户,并在上游进行转换,因此没有任何信息会未经请求而路由回给您。 | WAN IPv4 | 含义 | 影响 | |----------|------|------| | 公有 | 分配给您的线路的可路由地址 | 端口转发、UPnP 和入站连接正常工作 | | 私有(CGNAT) | ISP NAT 后面的共享地址 | 入站连接通常无法工作,除非 ISP 出售公有 IPv4 附加服务 | > **警告:DS‑Lite 注意事项。** DS‑Lite 是最严格的 CGNAT 形式:WAN 根本不会获得 IPv4 地址,只有公有的 IPv6 地址,IPv4 流量通过 IPv6 隧道传输到 ISP 的 AFTR⁵ (https://justsomebody.dev/blog/mikrotik-home-router#user-content-fn-7)。MikroTik 支持 DS‑Lite 隧道本身,但不支持自动接收建立隧道所需的 AFTR 地址。由于路径中没有任何地方存在公有 IPv4,因此端口转发、UPnP、入站连接以及许多远程访问工具都会停止工作。如果您的 ISP 提供 DS‑Lite 或私有 IPv4 并且您需要入站 IPv4 访问,请在购买路由器之前询问付费的公有 IPv4 附加服务,或者考虑更换其他 ISP。 对于我的光纤连接,ISP 使用 VLAN 35 上的 PPPoE,并分配私有 IPv4 地址。本文的其余部分将按照这个路径进行。 ## 设置 MikroTik 路由器 MikroTik 路由器单独使用MikroTik 路由器单独使用首先,给路由器通电。用一根以太网线从笔记本电脑连接到 MikroTik 的任意 LAN 端口,通常是编号为 2 或更高的端口。将端口 1 留给 ONT 上行链路;稍后它将变成您的 WAN 端口。打开 WinBox,切换到 **Neighbors** 选项卡,您应该能看到路由器列在 `192.168.88.1`(或其默认 MAC 地址)。使用 `admin` 用户登录,没有密码,然后立即更改默认管理员密码,因为某些设备上的 RouterOS 仍然使用空白或默认凭据。之后,通过 Quick Set 进行基本设置,为路由器分配一个稳定的管理地址和本地子网。稍后您需要回来拆除默认的无线桥接,并用更清晰的配置替换它。 ### 连接互联网 光网络终端⁶ (https://justsomebody.dev/blog/mikrotik-home-router#user-content-fn-1) 位于家庭网络的边缘。将一根以太网线从 ONT 连接到 MikroTik 的端口 1。链路指示灯亮起后,路由器就能看到载波信号。 MikroTik 路由器连接到 ONTMikroTik 路由器连接到 ONT有些 ISP(包括我的)会将服务绑定到他们提供的路由器的 MAC 地址。如果插入一个不同 MAC 的 MikroTik,即使 VLAN 和 PPPoE 设置正确,连接也无法通过认证。解决方法是克隆原始路由器的 MAC 到 WAN 端口。您可以从 ISP 路由器上的标签或其状态页面读取该 MAC。 将其克隆到 `ether1` 上。由于 VLAN 接口和 PPPoE 客户端都在 `ether1` 之上运行,它们会自动继承此 MAC,因此 ISP 会看到它期望的地址。 ``` # 在更改之前检查当前 MAC /interface ethernet print where name=ether1 # 标志: X - 禁用, R - 运行中, S - 从属 # # NAME MTU MAC-ADDRESS ARP SWITCH # 0 R ether1 1500 48:A9:8A:11:22:33 enabled switch1 ``` ``` # 克隆 ISP 路由器的 MAC(将其标签上的地址替换进去) /interface ethernet set ether1 mac-address=AA:BB:CC:DD:EE:FF ``` ``` # 确认 WAN 端口现在通告了克隆的 MAC /interface ethernet print where name=ether1 # 标志: X - 禁用, R - 运行中, S - 从属 # # NAME MTU MAC-ADDRESS ARP SWITCH # 0 R ether1 1500 AA:BB:CC:DD:EE:FF enabled switch1 ``` 克隆的 MAC 会在重启后保持不变。如果您将来需要将连接恢复到原始路由器,请使用 `/interface ethernet reset-mac-address ether1` 将端口恢复到出厂地址。 --- 我的 ISP 将 PPPoE 流量标记为 VLAN 35。RouterOS 需要在 `ether1` 之上创建一个 VLAN 接口,然后才能运行 PPPoE。使用描述性名称添加它,这样将来的您就不必猜测 `vlan1` 是什么意思了。 ``` /interface vlan add name=internet-vlan-35 vlan-id=35 interface=ether1 ``` ``` /interface vlan print # 标志: X - 禁用, I - 无效, D - 动态 # NAME MTU ARP VLAN-ID INTERFACE # 0 internet-vlan-35 1500 enabled 35 ether1 ``` MikroTik 路由器连接到 ONT 和 VLAN 35MikroTik 路由器连接到 ONT 和 VLAN 35创建好 VLAN 后,创建 PPPoE 客户端。告诉它使用 VLAN 接口,接受来自 ISP 的默认路由,并使用 ISP 的 DNS 服务器。最初将用户名和密码留空;一旦接口创建完成,您再填写它们。 ``` /interface pppoe-client add name=pppoe-out1 interface=internet-vlan-35 \ add-default-route=yes use-peer-dns=yes disabled=no ``` ``` /interface pppoe-client print # 标志: X - 禁用, I - 无效, R - 运行中, D - 动态 # NAME MTU INTERFACE USER SERVICE CALLER-ID ENCODING STATUS # 0 pppoe-out1 auto internet-vlan-35 internet linking ``` 现在设置您的 ISP 提供的凭据。状态应该在几秒钟内从 `linking` 变为 `connected`。 ``` /interface pppoe-client set pppoe-out1 user=YOUR_ISP_USERNAME password=YOUR_ISP_PASSWORD ``` ``` /interface pppoe-client print # 标志: X - 禁用, I - 无效, R - 运行中, D - 动态 # NAME MTU INTERFACE USER SERVICE CALLER-ID ENCODING STATUS # 0 R pppoe-out1 auto internet-vlan-35 YOUR_ISP_USERNAME internet connected ``` 确认默认路由已出现。如果输出显示 `pppoe-out1` 作为网关,则流量可以到达互联网。 ``` /ip route print where dst-address=0.0.0.0/0 # 标志: D - 动态; X - 禁用, R - 运行中, S - 静态; + - 活动 # DST-ADDRESS PREF-SRC GATEWAY DISTANCE # D 0.0.0.0/0 pppoe-out1 1 ``` MikroTik 路由器连接到 ONT、VLAN 35 和 PPPoE 客户端MikroTik 路由器连接到 ONT、VLAN 35 和 PPPoE 客户端## 让我们进行干净的 WiFi 设置 对于无线,我使用一个通过以太网供电⁷ (https://justsomebody.dev/blog/mikrotik-home-router#user-content-fn-4) 的独立 wAP 接入点。路由器上的端口 8 既提供数据也提供电力给 AP。启用该端口的 PoE 输出,wAP 就会启动,无需电源适配器。 ``` # 物理步骤:将一根以太网线从路由器端口 8(ether8)连接到 wAP。 # 然后在端口 8 上启用 PoE 输出,以便 wAP 上电: /interface ethernet poe set ether8 poe-out=auto-on ``` ``` /interface ethernet poe print # NAME POE-OUT VOLTAGE CURRENT # ether8 auto-on 24.0V 210mA ``` 单独管理每个 AP 无法扩展。RouterOS 包含 CAPsMAN,它让路由器充当中央控制器。您定义一个安全配置文件和 datapath,再加上 2.4 GHz 和 5 GHz 的信道模板,接入点会自动下载该配置。 在控制器上,首先创建共享对象。 ``` # --- 在路由器(CAPsMAN 控制器)上 --- /interface wifi security add name=home-sec \ authentication-types=wpa2-psk,wpa3-psk \ wps=disable passphrase=YOUR_WIFI_PASSWORD /interface wifi channel add name=ch-2ghz band=2ghz-n width=20mhz /interface wifi channel add name=ch-5ghz band=5ghz-ac width=20/40mhz /interface wifi datapath add name=home-dp bridge=bridge disabled=no /interface wifi configuration add name=home-2g ssid=HomeNetwork \ country=YOUR_COUNTRY security=home-sec channel=ch-2ghz datapath=home-dp mode=ap /interface wifi configuration add name=home-5g ssid=HomeNetwork \ country=YOUR_COUNTRY security=home-sec channel=ch-5ghz datapath=home-dp mode=ap /interface wifi capsman set enabled=yes interfaces=bridge /interface wifi provisioning add action=create-dynamic-enabled \ master-configuration=home-2g supported-bands=2ghz-n /interface wifi provisioning add action=create-dynamic-enabled \ master-configuration=home-5g supported-bands=5ghz-ac ``` ``` # 验证控制器正在监听 /interface wifi capsman print # enabled: yes # package: wifi-qcom # interfaces: bridge # require-peer-certificate: no # upgrade-policy: none ``` 在接入点上,启用 CAP 模式并将无线电指向管理器。 ``` # --- 在 wAP(CAP / 受管 AP)上 --- /interface wifi cap set enabled=yes discovery-interfaces=bridge /interface wifi set wifi1 configuration.manager=capsman disabled=no /interface wifi set wifi2 configuration.manager=capsman disabled=no ``` ``` # 验证 wAP 已加入控制器 /interface wifi cap print # enabled: yes # discovery-interfaces: bridge # caps-man-addresses: # caps-man-names: ``` 回到控制器上,您应该会看到动态无线电条目出现。每个无线电都会采用与其频段匹配的配置。 ``` # 回到控制器,检查受管无线电是否出现 /interface wifi print # 标志: D - 动态 # # NAME TYPE ACTUAL-CONFIGURATION # 0 D [email protected] wifi home-2g # 1 D cap1@5GHz wifi home-5g ``` MikroTik 路由器连接到 ONT、VLAN 35、PPPoE 客户端和通过 PoE 供电的 WiFi APMikroTik 路由器连接到 ONT、VLAN 35、PPPoE 客户端和通过 PoE 供电的 WiFi AP## 对抗缓冲区膨胀 在周末的一个典型晚上,我注意到一些奇怪的事情。我正在玩《反恐精英》,但由于 ping 值波动,游戏开始卡顿。原来另一台设备上开始下载 iOS 更新,并且一部手机开始将照片上传到云端备份。罪魁祸首就是缓冲区膨胀。 > 缓冲区膨胀是由网络设备中填满的数据包队列导致的过度延迟。当链路饱和时,就会出现这种情况,因为大缓冲区会保留数据包,而不是快速丢弃或标记它们。实时流量因此不得不等待在批量传输之后。来源:Bufferbloat.net (https://www.bufferbloat.net/projects/bloat/wiki/What_is_Bufferbloat/) 队列填满,延迟飙升,游戏数据包被卡在批量流量的积压后面。 步骤 1:只有《反恐精英》流量,延迟保持较低步骤 1:只有《反恐精英》流量,延迟保持较低在没有竞争流量的情况下,延迟保持较低。游戏发送小数据包,队列很少会保留超过一两帧。 步骤 2:iOS 更新开始,队列填满,延迟上升步骤 2:iOS 更新开始,队列填满,延迟上升另一台设备开始下载。缓冲区吸收了突发流量,但排出速度不够快,因此游戏数据包在它后面等待,导致延迟上升。 步骤 3:照片备份加入,队列不断增长步骤 3:照片备份加入,队列不断增长上传加入进来,而上传队列通常是非对称链路上最糟糕的罪魁祸首。游戏现在面临双向的排队。 步骤 4:队列已满,游戏数据包被卡在批量流量后面步骤 4:队列已满,游戏数据包被卡在批量流量后面缓冲区已满。即使是微小的游戏数据包也必须等待前面的批量流量清空,这表现为橡皮筋效应和语音聊天延迟。 您可以通过在线测试来测量这一点;我使用 speed.cloudflare.com (https://speed.cloudflare.com/) 上的 Cloudflare 速度测试。它同时报告加载和未加载的延迟,因此您可以直接读取缓冲区膨胀等级。DSLReports 曾经是参考标准,但该站点已于 2025 年 3 月关闭。您仍然可以通过在终端中 ping 一个稳定主机的同时运行速度测试来获得一个大致的画面。 ### FQ-CoDel 来救援 RouterOS 支持多种队列规则。默认的 FIFO 队列只是按照接收顺序存储数据包。当链路满载时,每个流都要等待其他所有流。FQ-CoDel⁸ (https://justsomebody.dev/blog/mikrotik-home-router#user-content-fn-5) 将流量分成许多小流,并公平地轮转每个流,丢弃在队列中停留时间过长的数据包。这可以在没有复杂防火墙 mangle 规则的情况下保持较低延迟。 | 队列规则 | 如何处理拥塞 | 最适合 | |----------|--------------|--------| | FIFO(默认) | 一个共享队列;先进先出 | 低拥塞、均匀的流量 | | FQ-CoDel | 每流公平性,主动延迟控制 | 共享链路上的游戏和 VoIP | 要使用 FQ-CoDel,首先创建一个队列类型,因为 RouterOS 默认不包含。 ``` /queue type add name=fq-codel kind=fq-codel ``` ``` /queue type print where name=fq-codel # 标志: * - 默认, X - 禁用, I - 无效, D - 动态 # 0 name="fq-codel" kind=fq-codel fq-codel-target=5ms fq-codel-interval=100ms \ # fq-codel-ecn=yes fq-codel-flows=1024 fq-codel-quantum=1514 \ # fq-codel-limit=10240 fq-codel-memlimit=32.0MiB ``` 默认参数是一个合理的起点。5 ms 的目标定义了可接受的常驻队列延迟。100 ms 的间隔匹配一个粗略的最坏情况 RTT 预算。 关键部分是最大限制。它必须设置在您的实际线路速率以下,而不是正好等于。如果您在链路 100% 的位置进行整形,那么 ISP 的设备仍然会首先饱和,并且膨胀的队列会在那里形成,超出了您的控制范围。一个常用的经验法则是将限制设置为测得的下载和上传速度的大约 90–95%。这样可以将瓶颈保留在您的路由器上,FQ-CoDel 才能实际管理队列。 用您自己测得的数值替换下面的占位符:第一个数字是上传,第二个是下载。 ``` /queue simple add name=shaping target=pppoe-out1 max-limit=<0.9xUPLOAD>M/<0.9xDOWNLOAD>M \ queue=fq-codel/fq

相似文章

LLM与MikroTik网络配置

Hacker News Top

一篇博客文章,详细介绍了作者使用LLM配置MikroTik网络设备的经验,包括技巧和最佳实践。

搭建 OPNsense 路由器

Lobsters Hottest

一份关于为家庭网络搭建定制 OPNsense 路由器的详细指南,介绍了路由器架构、VLAN 配置,以及选用 OPNsense 替代商业网关方案的理由。