HomeLab #1: MikroTik 作为家庭路由器
摘要
实用指南:设置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网络配置
一篇博客文章,详细介绍了作者使用LLM配置MikroTik网络设备的经验,包括技巧和最佳实践。
搭建 OPNsense 路由器
一份关于为家庭网络搭建定制 OPNsense 路由器的详细指南,介绍了路由器架构、VLAN 配置,以及选用 OPNsense 替代商业网关方案的理由。
如何在客厅中通过静态IP自托管服务器
一份使用L2TP隧道和静态IP在家中自托管服务器的指南,绕过CGNAT等ISP限制。
@MiaAI_lab: https://x.com/MiaAI_lab/status/2084629608062673379
为构建 DGX Spark 集群选择 MikroTik 交换机(CRS504、CRS804、CRS812)的实用指南,包含定价及 8 路 DGX Spark 配置的真实用户案例。
路由器 vs. 调制解调器:你需要了解的上网设备
本指南解释调制解调器和路由器的区别、功能以及如何为家庭网络选择它们。