搭建 OPNsense 路由器
摘要
一份关于为家庭网络搭建定制 OPNsense 路由器的详细指南,介绍了路由器架构、VLAN 配置,以及选用 OPNsense 替代商业网关方案的理由。
<p><a href="https://lobste.rs/s/hqfiqi/building_opnsense_router">评论</a></p>
查看缓存全文
缓存时间: 2026/04/21 02:58
# 搭建 OPNsense 路由器
Source: http://clintonboys.com/projects/homelab/04-router/
*2026年4月19日*
要理解的第一件事是,当提到“路由器”这个词时,通常指的是什么。ISP 通常会给你一只(通常是白色的)带闪烁指示灯的盒子,他们称其为路由器,但它通常在一个设备里集成了多种功能,而且可配置性普遍很低:
- **网关**:它位于广域网([WAN](https://en.wikipedia.org/wiki/Wide_area_network))和局域网(LAN)之间,通过 DHCP 为本地设备分配 IP 地址,并处理网络地址转换([NAT](https://en.wikipedia.org/wiki/Network_address_translation)),即在公共互联网的外网 IP 和局域网内的本地 IP 之间进行转换。更高级的网关还能让你把所有流量通过 VPN 隧道转发。
- 基础的“类防火墙”功能:阻断潜在有害流量和基础内容过滤。
- Wi-Fi 接入点
- 交换机,允许其他设备通过网线直接连接到它
在前面的文章中,我介绍了如何将 [Wi-Fi 功能解耦](https://clintonboys.com/projects/homelab/02-wifi/),以及如何通过一堆交换机和一条连接家里与办公室的 [trunk 线路](https://clintonboys.com/projects/homelab/03-network/)来拆分网络拓扑。我的目标是拥有一台路由器,能让我真正做好这些更高级的网络功能——也是我最近才开始听说的一些东西——并充分支持我在网络中搭建的 10Gbps 和 VLAN 功能。
## 单臂路由器http://clintonboys.com/projects/homelab/04-router/#router-on-a-stick
在[上一篇文章](https://clintonboys.com/projects/homelab/03-network/)中,我介绍了最终决定的网络拓扑,它要求在我的家庭办公室里放置一台“单臂路由器”(router on a stick)。这意味着路由器像网络中的其他设备一样连接到某台交换机,而不一定像大多数家用方案那样处于“瓶颈”位置(即直接连接到光纤猫)。然后通过网络用 VLAN 进行分段,使得往返 WAN 的流量或局域网设备之间的流量都会双向经过这台路由器。
关于 VLAN 我在[上一篇文章](https://clintonboys.com/projects/homelab/03-network/)中写了很多细节,你可以在那里了解我的决策。从路由器的角度来看,它只需要支持 VLAN 标签(tagging),就能适配我搭建的网络拓扑。大多数家用路由器不支持,但我了解到,只要比家用级别高出一小步,这基本上就是任何路由器操作系统的标配功能。
## OPNsensehttp://clintonboys.com/projects/homelab/04-router/#opnsense
所以我花了一些时间研究,如何从我 ISP 的路由器“升级”到更好的设备。方案有不少,最简单的是购买专用的“路由设备”或“网关”,比如 [Ubiquiti](https://ui.com/cloud-gateways) 的 UniFi Cloud Gateway 系列。这些都是可靠的选择,非常即插即用,能带来类似 Apple 那种“开机即用”的体验。然而,它们贵得离谱。
我在很多地方读到了关于 [OPNsense](https://en.wikipedia.org/wiki/OPNsense) 的介绍。它是开源的,基于久负盛名的类 Unix 操作系统 [FreeBSD](https://en.wikipedia.org/wiki/FreeBSD),几乎具备你在配置网络时可能想要的所有功能。它本身是一个更老项目 pfSense 的分支,后者目前仍在积极开发中;homelab 社区里关于哪个更好似乎分歧很大。我最终选择了 OPNsense,因为我读到了一些我信任的教程,那些作者认为 OPNsense 是更好的选择。
OPNsense 能给我们带来非常强大的配置能力,让我们完全掌控 NAT、DNS、DHCP、VLAN、防火墙规则、VPN 以及许多其他功能,还能对网络上的所有流量进行极其详细的监控。如果你对这些术语一无所知,那么在我开始这段旅程之前,它们对我来说也基本都是天书,希望下面我能把这些都解释清楚!
## 硬件http://clintonboys.com/projects/homelab/04-router/#hardware
首先,我得决定用什么硬件来做路由器。归根结底,路由器只是一台用途非常专一的电脑,所以你真的可以用任何电脑当路由器。大多数 ISP 提供的路由器都是配置很低的电脑,上面运行着贴牌的、功能被阉割的 Linux 操作系统。
你可以购买小型主机,比如 [NUC](https://en.wikipedia.org/wiki/Next_Unit_of_Computing),或者专用的“路由设备”,比如 [Protectli](https://eu.protectli.com/) 的产品,但最简单的方法是直接买一台翻新的旧企业台式机,最好也是小型机箱,然后在上面安装 OPNsense。
我最终选定的硬件是一台小尺寸机型(SFF)的 [Dell OptiPlex 3060](https://dl.dell.com/topicspdf/optiplex-3060-desktop_owners-manual4_en-us.pdf)。它比“全尺寸”塔式机小得多,但又比“微型机型”(micro form factor)大——后者太小,装不下 PCIe 扩展卡,而我需要安装一张 10GbE 网卡(NIC)。
**配置**
- Intel Core i5-8400(6 核,第 8 代)
- 16GB DDR4 内存(有点过剩)
- 256GB NVMe
- Intel X540-T2 双口 10GbE 网卡
我买的第一张网卡不能用。我从 Amazon 买了一张新的,结果却发现是某款廉价的中国仿品,不是正品 Intel(当时我同时在买很多配件,所以有点分心)。Dell 装上后无法识别。我直接退了货,最后花更少的钱买了一张二手正品 Intel 网卡。
插卡过程非常简单,装好后只需开机并安装 OPNsense。
使用翻新消费级硬件会让人有点不安:它能用多久?好在有个简单的解决办法:你只需要转变思路,把路由器当作随时可能报废的消耗品,并为此做好预案。OPNsense 允许你轻松下载完整的 XML 配置文件,所以如果机器真的挂了,你只需要换一台新机器,装上 OPNsense,上传 XML 文件就能恢复。因此瓶颈其实变成了订购和收到新机器及网卡所需的时间,这意味着有朝一日我可能会庆幸自己把 ISP 的路由器收进了橱柜,而不是仪式性地把它砸烂[1](http://clintonboys.com/projects/homelab/04-router/#fn:1)。
## 安装http://clintonboys.com/projects/homelab/04-router/#installation
实际安装 OPNsense 操作系统非常直接:
1. 从 [OPNsense](https://opnsense.org/download/) 官网下载安装 ISO。
2. 在 macOS 上刷入 U 盘(我用的是 [`dd`](https://en.wikipedia.org/wiki/Dd_%28Unix%29),如果你习惯用终端,这似乎是标准做法)
3. 开机时按住 F12 从 U 盘启动,然后按提示操作
4. 分配接口(WAN/LAN)
我遇到的唯一一个坑是,需要在 BIOS 里禁用 [Secure Boot](https://en.wikipedia.org/wiki/UEFI#Secure_Boot)。
Secure Boot 只允许由“认可的权威机构”签名的引导加载程序运行,而 FreeBSD 的、进而 OPNsense 的引导加载程序并没有被签名。一些主流 Linux 发行版(Fedora、Debian、Ubuntu 等)的引导加载程序会申请签名,但 FreeBSD 没有(这结合了开源资源的问题以及对 Microsoft 控制这一关键安全 gatekeeping 环节的哲学层面的抵制),所以如果 BIOS 中开启了 Secure Boot,机器会直接拒绝启动安装程序。本质上,你是在用一种安全机制交换另一种:用固件级启动验证,换取你自主选择并完全掌控的操作系统。对于 homelab 路由器来说,我认为这是一个完全合理的取舍。
## VLANhttp://clintonboys.com/projects/homelab/04-router/#vlans
我首先要做的就是配置 VLAN。因为交换机上的 VLAN 已经配好了,在路由器兼容它们之前,网络是无法正常工作的。
路由器的配置比交换机简单得多,我遇到的问题也比配置交换机时少得多。基本上,你只需要为每个 VLAN 定义虚拟“接口”,并在每个接口上给路由器分配一个固定 IP(例如在 VLAN ID 为 20 的“可信 LAN”上分配 `192.168.20.1`)。
## DNShttp://clintonboys.com/projects/homelab/04-router/#dns
[域名系统(DNS)](https://en.wikipedia.org/wiki/Domain_Name_System)负责在 IP 地址和 URL 之间进行双向解析。全球 DNS 服务器就像一本巨大的全球电话簿,让你可以在浏览器地址栏输入 `google.com`,然后被转发到 Google 服务器的 IP 地址。
在局域网中,你也可以用 DNS 实现类似的功能,这样你就不需要记住你的 Plex 服务器位于 `192.168.20.15:32400`,而只需在地址栏输入 `plex.local`。
搭建这个需要三件事:
- 确定你的域名。如果你只在家里访问,几乎任何名字都可以,只要不跟全球 DNS 冲突。如果你像我一样,希望在本地和远程都能用同一个地址访问,就需要注册一个域名,然后在这里使用它。稍后我会解释如何为同一个域名设置外部访问。
- 在 OPNsense 中设置 DNS 覆盖。这是一份你希望 DNS 处理的列表,你告诉路由器把它们全部转发给你的反向代理(见下一点)。
Home network topology
- 一个反向代理,比如 NPM,它保存域名与 IP:端口 的显式映射关系,以及一些其他技术细节,比如 SSL 证书。
Home network topology
## DHCPhttp://clintonboys.com/projects/homelab/04-router/#dhcp
动态主机配置协议([DHCP](https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol))是运行在路由器上的一项服务,负责为接入的设备分配 IP 地址。类似的服务也运行在你 ISP 的设备上,位于他们的网络中心,为你的光猫分配公网 IP。
当你连接最常用的设备——比如常开的服务器、娱乐设备时,你可能希望给它们配置静态 IP,这样它们每次接入时都在同一个地址。但你不可能对每台需要上网的设备都这样做——手机、笔记本电脑、联网冰箱。所以 DHCP 会动态分配 IP。在像 OPNsense 这样可配置的路由器操作系统中,你可以为不同接口配置 DHCP 可分配的 IP 范围。这样就能在特定子网的地址范围与 VLAN ID 之间建立很好的对应关系,例如将 `192.168.20.100` 到 `192.168.20.200` 分配给 VLAN ID 为 `20` 的网段。然后你可以把 `192.168.20.1` 到 `192.168.20.99` 留给该 VLAN 中的静态 IP。
## 防火墙http://clintonboys.com/projects/homelab/04-router/#firewall
VLAN 和 DHCP 设置好后,你需要配置防火墙规则来真正“实现”你对 VLAN 的规划。对我来说,VLAN `20` 是“可信 LAN”,所以我希望禁止其他所有 VLAN(访客、IoT)访问它。IoT VLAN(`30`)只能访问互联网,不能访问其他 VLAN。“DMZ” VLAN(`50`)同样被限制为仅访问互联网。AI DMZ(`60`)还有一些额外限制:我希望能够指定它可以访问互联网上的哪些具体网站,以确保我在那里“放养”的任何代理都被我牢牢掌控。我还计划在未来将 `80` 和 `81`(以及可能的其它 `8x` VLAN)用于 VPN。
Home network topology
## VPNhttp://clintonboys.com/projects/homelab/04-router/#vpn
最让我兴奋的一点之一是 OPNsense 能够在路由器层面通过 VPN 隧道转发流量。我订阅了 PrivateVPN,节点分布在我以前住过的几个国家,我希望能够按需把 Apple TV 的流量路由到其中一个节点,从而访问那些因地区限制而无法观看、又让人想家的内容。
OPNsense 内置了 [WireGuard](https://en.wikipedia.org/wiki/WireGuard)(它以前是个插件,但从 25.x 版本起已集成到基础系统中)。搭建隧道很简单:你创建一个“本地” WireGuard 实例,填入客户端私钥和隧道地址,然后添加一个“端点”(endpoint),填入服务器的公钥、地址和端口。为每个你想连接的国家都这样做,启用 WireGuard,隧道就建好了。
我的第一次尝试立刻让整个网络的所有设备都断网了。问题出在端点的 AllowedIPs = 0.0.0.0/0 上,这告诉 OPNsense 要把所有流量都通过 VPN 隧道转发,而不仅仅是 Apple TV 的流量。解决办法是在本地 WireGuard 实例上勾选“Disable Routes”,这样它就不会覆盖默认路由,然后使用策略路由(policy-based routing)来选择性转发流量。
我最初设置了一条防火墙规则,匹配 Apple TV 的源 IP,并将其路由到 VPN 网关。这能工作,但要在不同国家的 VPN 之间切换——或者彻底关闭 VPN——就意味着要登录 OPNsense 去改防火墙规则,这可不是我每次坐下来看电视时都想做的事。
我最终想实现的方案是为每个 VPN 分配一个独立的 VLAN:例如在我的场景中,用 80 代表 Sydney,81 代表 Tel Aviv。每个 VLAN 都有自己的接口、DHCP 范围和防火墙规则,强制所有流量通过对应的 WireGuard 网关。然后在物理交换机上,我可以把三个端口配置为接入端口(access ports):一个属于 VLAN 20(我常规的无 VPN LAN),一个属于 80,一个属于 81,并将它们接到配线架上标记好的端口。这样切换 VPN 就成了一个物理动作:我在配线架前面移动一根跳线即可。不用登录系统,不用改防火墙规则,只需插拔网线,Apple TV 就会获取新 VLAN 上的 IP。
## 移除 ISP 路由器http://clintonboys.com/projects/homelab/04-router/#removing-my-isp-router
我做所有这些的时候,ISP 的路由器仍然插在原来的位置,位于 ONT 和我的一台新交换机之间。但现在 OPNsense 已经接管了路由、NAT、DHCP、DNS 和防火墙,ISP 的路由器已经多余了。如果它还留在链路中,你就会遇到“双重 NAT”:ISP 的路由器先做一次地址转换,然后 OPNsense 再做一次。
Home network topology
理论上,一切配置完成后,你应该可以直接拔掉 ISP 路由器,把 ONT 直接插到交换机上。实际上,我遇到了两个问题。第一,ONT 会缓存它所连接设备的 MAC 地址,所以更换线缆后需要给 ONT 断电重启,等一两分钟让它重新上线并识别新设备。第二,OPNsense 本身可能还保留着旧连接的过期 DHCP 租约——如果在更换后你的 WAN 接口仍然显示 `192.168.x.x` 地址(而不是 ISP 分配的公网 IP),释放并重新获取租约(或者从 shell 清除租约文件)就能解决。
完成后,你应该能在 OPNsense 的 WAN 接口上看到公网 IP,实现单层 NAT,并完全掌控网络边界。
相似文章
@heyshrutimishra: 大多数LLM路由器都是静态规则;OrcaRouter 是一个会学习的路由器。它嵌入每个提示,根据过去的…
OrcaRouter 是一个基于学习的LLM路由器,能够根据质量、成本、速度和可靠性动态地将提示路由到合适的模型,并随着生产流量的增加而持续改进。
@OpenRouter:关于如何在 Hermes 中设置 Pareto Code 的 @NousResearch 文档:https://hermes-agent.nousresearch.com/docs/user-guide/c…
NousResearch 的文档解释了如何配置 Hermes AI 代理,重点在于通过 OpenRouter 设置 Pareto Code 路由以及管理配置文件。
有人尝试过 OpenRouter 上新推出的 1T 模型(限时免费一周)吗?Ring-2.6-1T 在实际工作中的表现如何?
本文探讨了 OpenRouter 上推出的 Ring-2.6-1T 新模型,重点介绍了其自适应推理能力,以及其在编程智能体和复杂工作流中的适用性。
GPT-5.5 价格上涨:费用是多少
本文分析了 OpenRouter 报告的 GPT-5.5 模型涨价所带来的成本影响。
为利基市场而创造
作者反思了为利基市场开发产品所面临的挑战,以 MtnKBD 的关闭以及他们开发 Table Slayer 和 Counter Slayer 的个人经历为例。文章探讨了利基软件开发的可持续性,重点介绍了开源模式和社区参与的重要性。