Administrator
发布于 2026-06-18 / 19 阅读
0
0

pfsense

引言

出现问题,解决问题。作为pfsense初用者带来太多问题,也在努力一次次的解决,虽然不尽人意,但是也是慢慢解决问题。

流量走向拓扑图

整个pfsense网络过于抽象,必须要进行一些拓扑图的画,要不然就容易晕过去。使用的双层防火墙架构

  • 第一层(FW1):边缘防火墙。面对公网有桥接,并下发VLAN。

  • 第二层(FW2):内部防火墙。挂载在FW1下,负责保护特定区域。

因为有着双层防火墙的架构,就会出现两次NAT转换。FW1映射到FW2,FW2映射到服务器。

FW2 的业务口(VLAN1)绝对不能设置“上游网关”,且必须拥有一个在该网段内独立的、不冲突的闲置 IP。以上就是我对这次pfsense上流量走向规划的理解

核心路由与边界网关

角色定义

  • vmbr0 (WAN口): 边界网关。直接桥接物理网卡对接 ISP。负责 NAT、拨号和第一道防火墙封锁。

  • vmbr1 和 vmbr2 (LAN口): 核心路由。

WAN接口设置保持默认就ok,主要是看LAN口

LAN2口设置的为的IP 地址为192.168.2.1,记得开放DHCP

总而言之 WAN口:是桥接的pve、LAN1口IP:192.168.1.1、LAN2口IP:192.168.2.1

设置虚拟局域网(VLAN)

为了支撑 15 位用户同时进行的独立实验,本项目构建了一套分布式二级防火墙集群:

  • 架构规模:部署 1 台核心网关 (FW1) 与 15 台独立的业务防火墙 (FW2),实现“一户一防火墙”的物理级逻辑隔离。

  • VLAN 资源池:总计划分 30 条标准 VLAN 链路。

  • 双链路配额 :

    • 接入链路 :每台 FW2 通过专属 VLAN 接入 FW1,确保用户间的上行流量互不干扰。

    • 业务链路 :每位用户拥有独立的内部逻辑子网,支持自主定义映射规则与过滤策略。

  • 设计核心:这种“双层嵌套+多租户”的架构,模拟了真实的 IDC 租户环境。通过 FW2 的独立控制,每位用户均可自主进行端口映射与流量审计,而不会影响到其他 14 位用户的网络安全

这套架构的核心在于‘高度自治’。30 个 VLAN 配合 15 台独立防火墙,不仅解决了 15 位用户的网络隔离问题,更通过双层 NAT 级联技术,让每位用户都能独立练习端口映射、访问控制和流量审计。虽然涉及 15 台防火墙的协同,但在 PVE 平台上运行非常稳定,是学习网络安全的理想架构

使用方法:虚拟机 → 硬件 → 网络设备 → 网卡1 → vmbr1 输入对应 VLAN 标签 1XX(VLAN ID) → vmbr2 输入对应 VLAN 标签 2XX

如何在pfsense上部署

启动已经初始化的pfsense,查看LAN口所接的IP,在内网部署一台机器直接访问LAN口IP或者在pfsense上shell上输入

#在指令菜单,输入8
8
#进入命令模式,临时关闭防火墙
pfctl -d

临时关闭防火墙后访问WAN接口上的IP,就可以进入页面

输入初始化账号:admin和初始化密码:pfsense 返回界面

这里是我已经配置过的pfsense,首先进入就要去更改密码,更改成功后,退出再登录就行了。

pfsense设置中文

pfsense现在可以在设置内设置中文了,因此在改密码后就要进行中文修改。

改这两个就行了,就能成功设置中文了

pfSense 设置 VLAN

在pfsense设置VLAN分为5步走:打标签(添加VLAN ID)→分配接口→设置IP地址→添加DHCP服务→合并用户组

第一步:打标签 (添加 VLAN ID)

  1. 点击菜单:接口 (Interfaces) -> 接口分配 (Assignments)。

  2. 切换到 VLANs 标签页,点击 添加 (Add)。

  3. 父接口:选物理网卡(父网卡)(比如 vtnet1)。

  4. VLAN 标记 (Tag):填入编号(比如 101)。

  5. 描述:写上名字(比如 User01_ONE),方便后期查询

第二步:分配接口

  1. 回到 接口分配 (Interface Assignments) 页面。

  2. 在左侧下拉框选刚才创建的 VLAN 101,点击右侧的 添加 (Add)。

  3. 这时候会看到多了一个接口(比如叫 OPT1),点进去勾选 启用接口。

第三步:设置 IP 地址

1.IPv4 配置类型:选 静态 IPv4 (Static IPv4)。

2.IPv4 地址:填入规划好的地址(比如 192.168.101.1),掩码选 /24。

关键点:底部的 IPv4 上游网关 必须保持为 “无 (None)”!只有 WAN 口才需要网关,VLAN 口它是别人的网关。

第四步:添加DHCP

1.开启DHCP模式

  • 路径:服务 (Services) -> DHCP 服务端 (DHCP Server)。

  • 选择接口:点击刚刚在第 2 步分配好的那个接口标签(例如 VLAN1)。

2. 划定DHCP地址池

  • 勾选:在接口LAN1启用DHCP服务 

  • 范围 (Range):填入起始和结束 IP。

    • 专业建议:给VLAN 留出一些静态空间。例如范围设为 192.168.101.100 到 192.168.101.199。

第五步:合并用户组

定义“身份组”

  • 路径:系统 (System) -> 用户管理 (User Manager) -> 用户组 (Groups)。

  • 操作:点击 添加 (Add)。

  • 组名:备注名字:VLAN_USER。

  • 范围:这个版本的pfsense只能变灰,说明就是框选成功。

为了测试,所以先添加规则让起放行所有的流量

防火墙→策略规划→当前查看:WAN_USER

  1. 点击右下角的绿色 添加 (Add) 按钮(带向上箭头的那个,确保规则排在最上面)。

  2. 动作:选择 通过 (Pass)。

  3. 接口:保持为 VLAN_USER。

  4. 地址族:选择 IPv4。

  5. 协议:选择 任何 (Any) 。

  6. 源:选择 任何 (Any) 或 VLAN_USER net。

  7. 目的:选择 任何 (Any)。

  8. 描述:写上 全通放行 。

  9. 点击 保存 (Save) 并点击页面上方的 应用更改 (Apply Changes)。

验证VLAN划分

VLAN划分成功开始进行验证,在pve侧启用一台kali,在网卡上打上VLAN tag

使用对应的tag,就可以成功划分对应的vlan,启用kali,进入界面,查询IP 成功拿到192.168.109.100和192.168.209.100网段,启用成功,VLAN划分成功

微隔离

目标:实现109和209可以互相访问,但是不能去访问的别的vlan(以vlan109和vlan209为例)

第一步:创建接口组

  1. 点击菜单:接口 (Interfaces) -> 接口分配 (Assignments)

  2. 切换到 接口组 (Interface Groups) 标签页,点击 添加 (Add)

  3. 组名称:填入 GROUP_09_test

  4. 成员接口:勾选 User_109 和 User_209

  5. 描述:写上 互摸组,方便后期查询

  6. 点击 保存

第二步:定义别名

  1. 点击菜单:防火墙 (Firewall) -> 别名 (Aliases)。

  2. 添加隔离组:名称 GROUP_109_209,类型选择“网络”,添加 192.168.109.0/24 和 192.168.209.0/24。

  3. 添加隔离墙:名称 RFC1918_NETS,类型选择“网络”,添加 192.168.0.0/16

第三步:编写“互摸规则” 

防火墙 (Firewall) -> 规则策略填写以下规则

第四步:验证规则

进入kali去ping192.168.1.1

规则验证成功

NAT回流问题

在没有非vpn环境下,映射内网资产是实现资源访问的最优方案,但是如果在FW2上准备映射“保险柜”里的资产,就引发NAT回流问题,导致外网终端无法通过公网IP回访该资源。即使去程都是成功的,也会出现回程问题,回不过来。

问题复现:数据流量包单程丢失

  • 去程(成功):管理网段(172.16.11.x)访问FW2 WAN口(172.16.11.149),通过端口转发到内部服务器的(192.168.109.100)。这时候数据流量包的源IP仍然是管理网段IP(172.16.11.x)

  • 回程(异常):服务器接受到数据流量包请求,准备回包给管理网段(172.16.11.x)。服务器去查找路由表结果发现默认网卡是FW1。于是,包就丢给FW1

  • 结果:FW2在等着内部服务器回包去完成TCP握手,但是包走的FW1,所以FW2就板顶链接超时,握手失败,强制断开。

解决问题:NAT身份伪装

使用NAT身份伪装就是强迫内部服务器(192.168.109.100)将回包丢给FW2而不是FW1,就需要再FW2进行操作

  • 技术原理:在数据包到达服务器之前,将包的源头从原始的管理网段(172.16.11.x)修改为FW2自己内部LAN接口(192.168.109.254)

  • 操作步骤:

    1. 进入防火墙→地址转换→出站,选择混合出站

    2. 新建规则:接口选LAN接口(对应LAN接口名称)源地址选172.16.11.0/24或者*(any),建议选后者就意味着无论哪个网段通过FW2访问服务器都可以进行NAT身份伪装。目的地址选择精准指向内部服务器的IP 192.168.109.100/32,NAT地址指定为FW2LAN接口变量:LAN1 address,就可以动态映射

TIPS:由于开启的是 混合出站 NAT规则生成,这条手动规则优先高于自动规则。它既保留了内网设备正常上网的 NAT 功能,又通过这条‘特权规则’解决了特定映射的回流冲突。

并且在配置选择使用/32掩码,就为了规则匹配单个IP地址(“点对点”主机模式),从而确保伪装仅仅是只作用于目标服务器,而不是去干扰网段内其他设备的正常通信。

这样就成功解决了NAT回程的问题,还要检查一下系统→路由管理→网关状态,看是否LAN接口有IP地址,这里是不允许的,建议删掉,要不然LAN接口就会作为WAN口。

因为在pfsense默认逻辑就是:有网关就是出口,如果LAN口带有网关,系统就将其看做上游出口,并且自动开启路由。就会导致流量进入VLAN后产生“环路”或者“迷路”,导致端口映射失败。内网口LAN只是作为流量收纳扣,而不应该存在上游网关。因此看到在网关状态看到LAN接口网关,请立即删除


评论