OPNsense安装与使用

本文参考了 OPNsense中文手册OPNsense 防火墙系列一 等优秀资料。

一、简介与核心概念

1.1 什么是 OPNsense?

OPNsense® 是一个基于 FreeBSD开源、易用且易于构建的防火墙和路由平台。它集成了商业防火墙中的大部分高级功能,同时具备开源项目的透明性和可验证性。

使命:为用户、开发人员和企业提供友好、稳定和透明的环境,使其成为使用最广泛的开源安全平台。

1.2 核心功能概览

  • 防火墙与路由:状态检测防火墙、高级路由策略。
  • VPN支持:IPsec、OpenVPN(站点到站点、移动用户)。
  • 网络服务:DHCP/DHCPv6服务器、DNS转发器/解析器、动态DNS。
  • 高级功能
    • 流量整形与策略路由。
    • 入侵检测与防御(IDS/IPS)。
    • 正向缓存代理(Squid)。
    • 强制门户(多区域、凭证支持)。
    • 高可用性与硬件故障转移(含配置同步)。
  • 管理与监控:内置报告工具、RRD图表、数据包捕获、配置备份与还原。

1.3 重要注意事项(避坑指南)

在开始前,请务必了解以下关键点:

  1. NAT类型:OPNsense默认不支持全锥型NAT(NAT1),最高支持端口限制型NAT。可通过UPnP或端口转发缓解,但更推荐后者。
  2. 性能影响
    • PPPoE拨号等变动IP的接口上启用入侵检测,可能导致CPU占用过高。
    • 流量分析、图表等功能在异常断电后可能数据损坏,同样会引起高CPU占用。
  3. 网络规划:前期规划至关重要!随意添加网卡会导致标识符设备映射变动,影响高可用等功能的稳定性。
  4. 虚拟化平台选择
    • 强烈推荐使用PVE。在ESXi上运行高可用可能出现DUP!问题,且内存占用计算不准确。
    • ESXi上开启端口组混杂模式可解决DUP!,但会导致OpenWrt无法访问OPNsense,且影响Docker MacVlan。
  5. 硬件兼容性
    • 部分Intel 2.5G网卡存在BUG,可能导致无法发出DHCP Offer,请避免使用。
    • VLAN配置在物理机上可能存在问题。

二、安装准备与硬件要求

2.1 准备工作

  • 两台电脑(用于测试,双网口以上)。
  • 存储:大于20GB(推荐50GB)。
  • 其他:RJ45网线、显示器和键盘。

2.2 硬件要求参考

以下为作者环境(i5-1135G7, 64G DDR4, 1T NVMe, ESXi 8)下的占用情况:

场景 处理器占用 (ESXi) 内存占用 (ESXi/OPNsense) 存储
轻负载 761 MHz 16G / 7% 120G
满速下载 (92MB/s) 4.6 GHz 16G / 高 120G

2.3 官方硬件要求指南

等级 处理器 内存 存储目标
最低要求 500 MHz 单核 512 MB 4GB SD/CF卡 (使用nano镜像)
合理要求 1 GHz 双核 1 GB 40 GB SSD
推荐要求 1.5 GHz 多核 4 GB 120 GB SSD

注意:实际需求取决于吞吐量启用功能。例如,Squid代理、大型状态表、高并发强制门户会显著增加CPU和内存消耗。推荐使用英特尔(Intel)网卡以获得最佳性能和稳定性。

系统架构:支持 x86-32 (i386)x86-64 (amd64)。对于新部署,强烈建议使用64位版本


三、安装与基础配置

3.1 下载镜像

  1. 访问 OPNsense官网下载页
  2. 选择:Architecture: amd64 -> Image Type: DVD -> Mirror: AivianPeking University

3.2 安装系统

  1. 在虚拟机或物理机上启动镜像。
  2. 在登录提示符 (login:) 处输入:用户名 installer密码 opnsense
  3. 选择键盘布局(默认回车即可)。
  4. 选择 Install (UFS)
  5. 选择目标磁盘(通常为 da0)。
  6. 按提示创建交换空间并确认安装。
  7. 安装完成后,设置root密码并重启。务必在重启前移除安装介质

3.3 初始设置向导

  1. 使用同一网段的设备访问 https://192.168.1.1
  2. 跟随向导进行设置:
    • 语言:中文。
    • DNS:首选 223.5.5.5,辅助 119.29.29.29
    • 启用DNSSEC支持强化DNSSEC数据(推荐,可防DNS劫持。自建DNS请勿开启)。
    • 时区Asia/Shanghai
    • 配置WAN/LAN接口
    • 重设root密码(可选)。
    • 重载系统完成配置。

3.4 更换软件镜像源

默认源速度较慢,建议更换:

  1. 进入 系统 -> 固件 -> 设置
  2. 镜像 下拉框中选择 Aivian (HTTPS,Shangxing,CN)
  3. 或自定义源:选择 (custom),填入:
    • 北京大学镜像源:http://mirrors.pku.edu.cn/opnsense/
    • 网易镜像源:http://mirrors.163.com/opnsense/

      注意:请勿自行改为 https

  4. 保存后,进入 状态 选项卡,点击 检查升级

四、网络接口配置

4.1 接口分配

进入 接口 -> 分配,查看和管理接口。

  • 标识符:如 WAN, LAN
  • 接口设备:系统识别的网卡名称(如 vmx0)。
  • 如需添加新接口(如WAN),在下方 Assign a new interface 选择设备并填写描述(英文/数字)。

4.2 WAN口设置

进入 **接口 -> [WAN]**。

  1. 基本设置:勾选 阻止私有网络拦截bogon网络
  2. IPv4配置类型
    • PPPoE拨号:选择 PPPoE,在下方的PPPoE配置中填入宽带账号密码。
    • DHCP:选择 DHCP
    • 静态IP:选择 静态IPv4,填写IP、掩码,并添加上游网关(标记为默认网关)。
  3. 保存

4.3 LAN口设置

进入 **接口 -> [LAN]**。

  1. 基本设置取消勾选 阻止私有网络拦截bogon网络
  2. IPv4配置类型:选择 静态IPv4
  3. 静态IPv4配置:填写内网IP地址(如 192.168.1.1)和子网掩码(如 24)。
  4. 保存

4.4 终端紧急配置网卡

如果不慎删除了管理口,可通过控制台恢复:

  1. 登录终端,进入管理选项菜单。
  2. 选择 1) 接口分配,按提示重新分配WAN、LAN等接口的物理网卡。
  3. 选择 2) 接口设置,为指定接口(如LAN)重新配置IP地址等。
  4. 按提示完成并重启相关服务。

五、防火墙规则配置

5.1 创建允许规则(示例:允许LAN访问外网)

进入 防火墙 -> 规则 -> LAN,点击 + 添加。

选项 设置
操作 通过
接口 LAN
方向 in
TCP/IP版本 IPv4
协议 any
LAN网络
目标 any
目标端口范围 any
描述 Default allow LAN to any rule

5.2 创建阻断规则(示例:禁止访问阿里DNS)

同样在LAN规则页面,点击 + 添加。

选项 设置
操作 阻止(或拒绝)
接口 LAN
方向 in
TCP/IP版本 IPv4
协议 any
LAN网络
目标 223.5.5.5 (单个主机或网络)
目标端口范围 53
描述 禁止访问阿里DNS

阻止:直接丢弃数据包。拒绝:返回拒绝数据包。


六、基础服务配置

6.1 系统DNS与Unbound DNS

  1. 系统DNS(网关DNS)
    • 进入 系统 -> 设置 -> 常规
    • 网络 部分的 DNS服务器 中填入公共DNS(如 223.5.5.5),并为其选择对应的WAN网关。
  2. Unbound DNS(局域网DNS)
    • 进入 服务 -> Unbound DNS -> 常规,勾选 启用Unbound启用DNSSEC支持
    • 进入 查询转发,取消 使用系统DNS服务器,手动添加转发服务器(如 223.5.5.5)。
    • DoT加密查询(可选):进入 DoT 选项卡,添加服务器,例如:
      • 服务器IP: 223.5.5.5
      • 端口: 853
      • 验证CN: dns.alidns.com

6.2 DHCPv4 服务

进入 **服务 -> DHCPv4 -> [LAN]**。

  • 勾选 启用
  • 设置地址池范围,例如:从 192.168.1.10192.168.1.245
  • 网关和DNS可不填,默认使用路由器地址。

6.3 网络时间协议(NTP)

进入 服务 -> 网络时间 -> 常规,可添加以下推荐的NTP服务器:

  • 国内:ntp.aliyun.com, ntp.tencent.com, ntp.sjtu.edu.cn, cn.pool.ntp.org
  • 国际:time.google.com, time.cloudflare.com, pool.ntp.org

七、IPv6 配置

7.1 公网IPv6(有PD前缀)

  1. WAN口接口 -> [WAN]IPv6配置类型DHCPv6。在DHCPv6客户端配置中,打开 仅请求IPv6前缀发送IPv6前缀提示前缀委派大小 设为 60(需与运营商下发一致)。
  2. LAN口接口 -> [LAN]IPv6配置类型跟踪接口,并在 跟踪IPv6接口 中打开 允许手动调整DHCPv6和路由器通告
  3. 启用IPv6防火墙 -> 设置 -> 高级,在IPv6选项中打开 允许IPv6
  4. 分配地址
    • DHCPv6服务 -> DHCPv6 -> [LAN] 中启用并设置范围。
    • 或路由器通告服务 -> 路由器通告 -> [LAN]路由器通告Assisted,勾选 通告默认网关,填入DNS服务器(如 2400:3200::1)。

7.2 NATv6(无PD前缀,使用内网IPv6)

  1. WAN口:同上,配置DHCPv6获取地址。
  2. LAN口接口 -> [LAN]IPv6配置类型静态IPv6,使用ULA地址(如 fd00::1/64)。
  3. 启用IPv6:同上。
  4. 配置NAT出站规则
    • 防火墙 -> NAT -> 出站,模式改为 混合生成出站NAT规则
    • 添加两条手动规则(IPv4和IPv6),关键是将 转换/目标 设为 接口地址,并勾选 静态端口。这是实现端口限制型NAT的关键。
  5. 分配地址:同7.1第4步,为LAN配置DHCPv6或路由器通告。

7.3 解决IPv6大包问题

test-ipv6.com 提示大包错误,需调整MSS:

  • 接口 -> [WAN] -> 通用配置 中,设置 MSS 值。
  • 计算公式:MSS = PPPoE MTU(通常1492) - 60,约为 1430。可尝试 14201400
  • 测试命令(Windows):ping -l 1500 baidu.com 逐步减小 -l 后数值直到通,该值即为可用MSS。

八、进阶功能配置

8.1 流量整形(流控)

以创建HTTP流量优先级为例:

  1. 创建管道防火墙 -> 流控 -> 管道,创建上传/下载管道,设置带宽(如 160Mbit/s上传,1000Mbit/s下载)。
  2. 创建队列防火墙 -> 流控 -> 队列,为不同协议创建队列并绑定到管道,设置权重(值越低优先级越高)。
    • 例如:HTTP上传队列 权重50, 其他流量队列上传 权重80。
  3. 创建规则防火墙 -> 流控 -> 规则,创建规则将特定流量(如目标端口80/443)指向高优先级队列。
  4. 防火墙 -> 流控 -> 状态 中查看队列状态。

8.2 别名(Aliases)

别名用于批量管理IP、端口等,是防火墙规则的强大工具。

  • 类型:主机、网络、端口、URL Table (IPs)(可定期更新)、GeoIP等。
  • 创建防火墙 -> 别名,点击 **+**,选择类型并填入内容(如IP列表、URL)。
  • 嵌套:可以在一个别名中引用其他别名。

8.3 端口转发

相比UPnP更安全可控。

  1. 普通转发防火墙 -> NAT -> 转发,点击 **+**。
    • 接口:WAN
    • 协议:TCP/UDP
    • 目标:WAN地址
    • 目标端口:外部端口
    • 重定向目标IP:内网主机IP
    • 重定向目标端口:内部端口
  2. DNS重定向示例:将内网DNS请求重定向到指定服务器。
    • 接口:LAN
    • 勾选 目标 / 反转
    • 目标:LAN网络
    • 目标端口:DNS
    • 重定向目标IP:192.168.1.2
    • 重定向目标端口:DNS

8.4 高可用(HA)配置

前提:两台OPNsense,接口分配完全一致,并有一个专用HA接口用于心跳同步。

  1. 配置CARP虚拟IP:在主防火墙的 接口 -> 虚拟IP -> 设置 中,为LAN(或WAN)添加CARP虚拟IP(如 192.168.1.1/24),设置VHID和密码。
  2. 配置同步
    • 主防火墙:系统 -> 高可用 -> 设置,启用同步,指定同步接口(HA口)、对端IP和密码,选择同步模块。
    • 备防火墙:同样位置,启用同步并勾选 禁用抢占断开拨号接口
  3. 同步配置:在主防火墙状态页点击上传图标进行初始同步。
  4. 检查:在 接口 -> 概况 中,主防火墙的虚拟IP旁有绿色图标,备防火墙为灰色。

8.5 性能优化(可调参数)

进入 系统 -> 设置 -> 可调参数,可添加以下参数提升性能(部分):

1
2
3
4
5
6
7
hw.ibrs_disable=1                # 禁用Spectre V2缓解,提升性能
net.isr.maxthreads=-1 # 使用所有CPU核心处理网络中断
net.isr.bindthreads=1 # 将中断线程绑定到核心
net.inet.rss.enabled=1 # 启用接收方缩放
net.inet.rss.bits=2 # RSS位,根据核心数调整(核心数/4)
net.inet.tcp.soreceive_stream=1 # 启用优化的内核套接字接口
kern.ipc.maxsockbuf=16777216 # 增大套接字缓冲区(10G网卡)

注意:调整需谨慎,建议参考 FreeBSD网络性能调优指南

8.6 网关组(故障转移/负载均衡)

  1. 配置网关系统 -> 网关 -> 配置,确保各WAN口网关监控状态为“正常”。
  2. 创建网关组系统 -> 网关 -> 组,点击 **+**。
    • 添加网关并设置优先级(故障转移),例如:WAN_GW为层级1,WAN2_DHCP为层级2
    • 触发条件:丢包
  3. 修改策略路由:在LAN的防火墙出站规则中,将网关选项改为新建的网关组。

九、故障排除

9.1 CSRF check failure 错误

登录后出现此白色错误页,通常是因为浏览器缓存或会话问题。

  • 解决方法:清除浏览器缓存和Cookie,使用无痕模式,或直接访问 https://192.168.1.1/(不带后续路径)。如仍不行,可尝试重启OPNsense的Web服务(非重启系统)。

9.2 网页反向代理设置

若通过Nginx等反向代理访问OPNsense管理界面,需在OPNsense中关闭某些检查:

  • 进入 系统 -> 设置 -> 管理
  • 勾选:禁用Web GUI重定向规则禁用DNS重绑定检查禁用HTTP_REFERER强制检查

9.3 开启SSH访问

  • 进入 系统 -> 设置 -> 管理
  • 勾选:启用安全Shell允许root用户登录允许密码登录
  • 监听接口:可选择全部或指定接口。

版权声明:本文部分内容参考并整合了多位社区作者的经验,特别感谢 OPNsense中文手册 和博主“鐵血男兒”的分享。本文旨在为初学者提供一个清晰的指引,更多深入细节请查阅官方文档和社区论坛。