
简介这份 PanabitFREE SANGUOr10 开发包基于 FreeBSD 9.2 平台面向网络管理员、流量分析学习者与网关开发者用于研究网络行为审计、流量监控和策略控制系统的实现方式。压缩包共 379 个文件体积约 1.79MB其中 gif、png、js、css 与 htm 等文件构成 Web 管理界面的静态资源menu、cgi 及大量业务模块文件对应认证、策略、流量统计、PPPoE、DNS 与缓存管理等后台功能另有 ko 内核模块、配置样例和脚本工具便于理解系统的分层结构与模块组织。已有 369 人学习说明它在同类网关与固件研究中具备一定参考价值。读者可从中获得较完整的 Web 管理端资源结构、CGI 模块命名及配置组织线索用于二次开发、功能对照、界面改造或部署排错结合源码与配置还能梳理流量策略、用户认证和日志审计的实现路径适合作为网络流量管理系统的学习样本。1. 别急着解压PanabitFREE FreeBSD 9.2 这套包先认清它是什么有个朋友接手一台从机房里搬出来的旧网关硬盘上贴着手写标签PanabitFREE_SANGUOr10_20150513_FreeBSD9.2_dev他要把它在虚拟机上重装一遍做测试。结果双击解压、看到一堆boot、etc目录就直接懵了——这根本不是 Windows 那种下一步下一步的安装器而是一整套 FreeBSD 9.2 底子上的完整系统。类似的情况在校园网出口、小型机房的带宽管理场景里太常见了设备是别人配的包是别人给的轮到自己重装时才发现网卡选错、盘写错、桥配反任意一个环节出问题表现都是「Web 打不开」或者「流量过去一半就断」。装这套东西的真正门槛不在安装本身而在准备阶段认清楚交付物形态、算清楚硬件账、想明白管理口和数据口谁走哪根线。这篇笔记按我自己重装几轮的顺序走一遍从解包、写盘、引导、配网桥到验证限速适合手上有这台设备或者想用虚拟机复现一套流控环境的人。2. 环境先算账FreeBSD 9.2 底座的硬件与虚拟化选型在动手之前把环境捋清楚能省掉后面一大半的返工。这一节讲的都是「装之前就要定下来」的事定错了后面改起来很麻烦尤其是网卡和虚拟化平台这两个。2.1 文件名里的信息量先判断是整盘镜像还是覆盖包文件名PanabitFREE_SANGUOr10_20150513_FreeBSD9.2_dev.tar.gz本身就是一份说明书逐段拆开看字段含义对安装的影响PanabitFREE免费版分支功能项和并发、策略条数有上限别按商业版预期配SANGUO版本代号不同代号之间配置结构会变跨代号别直接搬配置r10修订号同一代号下的小版本迭代修 bug 为主20150513打包日期判断新旧也用来对齐内核和驱动FreeBSD9.2底层系统驱动、磁盘分区、启动方式全部按 FreeBSD 走dev开发分支构建比正式发布版激进功能新但边角料问题多真正决定后面怎么干活的是包里装的是「整盘可引导镜像」还是「铺在已有 FreeBSD 上的覆盖包」。这两者操作路径完全不同前者要写盘引导后者要先有一台装好 FreeBSD 9.2 的机器。所以我拿到手的第一件事不是解压是列清单# 只看文件列表不解压先判断包的结构 tar -tzf PanabitFREE_SANGUOr10_20150513_FreeBSD9.2_dev.tar.gz | head -40 # 统计条目数量和顶层目录判断是整盘镜像还是覆盖包 tar -tzf PanabitFREE_SANGUOr10_20150513_FreeBSD9.2_dev.tar.gz | wc -l tar -tzf PanabitFREE_SANGUOr10_20150513_FreeBSD9.2_dev.tar.gz | cut -d/ -f1 | sort -u-t是只列表不落盘-z处理 gzip-f指定文件这三个参数组合起来是安全的「只读探查」不会改动当前目录。head -40用来快速看开头结构cut -d/ -f1 | sort -u是取每个路径的第一段去重如果输出里出现boot、etc、usr、root这类系统目录基本可以判定是覆盖包如果只有一个.img、.iso或者类似panabit-r10.img的大文件那就是整盘镜像。这一步看着多余但省下的时间很实在。我见过有人把覆盖包直接 dd 到 U 盘写完之后引导不起来折腾一下午才发现方向从一开始就错了。确认结构之后再决定是「写盘」还是「装 FreeBSD 再覆盖」后面的章节我会按整盘镜像这条主线走覆盖包的情况在对应位置补一句差别。2.2 内存、硬盘、网卡三样东西决定这套系统能不能跑得住Panabit 这类产品的数据面是在内存里维护会话表和策略匹配的硬件账主要算在内存和网卡上CPU 反而没那么吃紧。项目最低能跑我实际配的说明架构amd64amd64i386 在那个年代还常见现在没必要迁就CPU双核4 核应用识别吃单核主频比核数重要内存1 GB4 GB会话表全在内存1 GB 只够几十人小网络硬盘4 GB16 GB 以上日志写满根分区是最常见的「莫名只读」网卡3 块1 管理 2 数据Intel 千兆 ×4数据口必须成对管理口单独一块光驱/U盘1 个U 盘老机器光驱不一定还能读盘内存这块要说细一点。会话表的大小跟内网终端数、连接数正相关一台几十人的小办公室1 GB 能撑住但没余量上百台终端再加上 P2P 那种连接数暴涨的场景1 GB 会明显感觉到新建连接变慢甚至出现策略下发后不生效的假象。我一般按「终端数 × 每台 2030 个并发连接」粗估再留一倍余量小场景 2 GB 起步4 GB 更从容。硬盘的关键不是容量而是剩余空间。日志、会话快照都往根分区写4 GB 盘装完系统就没多少剩了跑一两周日志就能把分区顶满。根分区满了之后 FreeBSD 会切到只读或者半瘫状态表现出来是 Web 管理页打不开、控制台刷一堆写失败很容易被误判成硬件故障。16 GB 起步能上 32 GB 更省心。网卡是整套环境里最容易翻车的一环也是我最想强调的地方。Intel 的 82574L、82580、i350 这一类在 FreeBSD 9.2 下是em、igb驱动识别快、丢包少、桥接转发性能好Realtek 的 8168/8111 系列虽然是re驱动能认但在千兆线速、大包加小包混合的场景下容易出问题桥接起来跑几分钟就掉口或者大量小包时 CPU 单核跑满、转发延迟飙升。这不是玄学是驱动和中断处理的老问题。手上只有 Realtek 的话先跑起来验证功能没问题真要上线还是换 Intel。2.3 虚拟机复现还是物理机落地网卡模式决定成败想在虚拟机里先把流程跑一遍是完全合理的做法很多人的第一套实验环境就是那么搭的。但虚拟化的网卡模式选错会出现「系统装好了、IP 配了、就是 ping 不通」这种让人怀疑人生的现象。常见做法是这样虚拟化平台用 ESXi 或者 KVM虚拟机网卡类型选e1000Intel 千兆模拟不要选vmxnet3。原因是 FreeBSD 9.2 那个年代的vmxnet3驱动虽然存在但 Panabit 的数据面在绑定网卡、做桥接的时候对它的支持参差不齐轻则识别不到第二块网卡重则桥建起来不转发。e1000是模拟最彻底的兼容性最好代价是吞吐比半虚拟化低一些做功能验证足够。如果虚拟化平台的安全策略比较严还需要额外放开两个开关。桥接模式下虚拟机要收发目的 MAC 不是自己的帧虚拟交换机默认会丢掉这类帧表现就是内网终端完全上不了网。在 ESXi 上把虚拟交换机的安全策略里「混杂模式」「MAC 地址更改」「伪传输」三项都设为接受在 KVM 上用bridge模式并确认br_netfilter相关转发没被拦。这几项配好之后虚拟机里的桥接才能像物理机一样工作。物理机落地就简单得多注意两点管理口和数据口分开插别图省事把管理口也塞进桥里插线之前先在机箱或者网卡上做好标记FreeBSD 的em0、em1跟物理口的对应关系不是按你看的顺序来的后面配桥的时候对不上号是高频问题。3. 从 tar.gz 到可引导硬盘写盘、引导与分区落地环境定下来之后进入实操。这一章是从压缩包到系统能起来的第一段路每一步都需要确认因为一旦写错代价可能是整块盘的数据。3.1 校验与解包先确认包没坏再决定往哪写到手先做完整性校验这不是形式主义。这类包动辄几百兆传输过程里中断、拷贝到 U 盘时文件系统大小写不敏感导致的截断都可能让包悄悄坏掉症状是引导到一半卡住或者解包报unexpected EOF。# 记录校验值和交付方给的值比对没有原始值就先记下来 sha256sum PanabitFREE_SANGUOr10_20150513_FreeBSD9.2_dev.tar.gz # 解包到一个独立目录别在下载目录里直接散开 mkdir -p /data/panabit-r10 tar -zxvf PanabitFREE_SANGUOr10_20150513_FreeBSD9.2_dev.tar.gz -C /data/panabit-r10 # 看解出来的东西有多大确认不是解到一半断了 du -sh /data/panabit-r10-x解包、-zgzip、-v显示过程、-C指定目标目录-C这个参数值得养成习惯所有解包都往独立目录里散将来排查问题和清理都方便。sha256sum在 FreeBSD 上叫sha256参数一样加-c可以对着校验文件批量验证。解出来如果是一个.img文件大小一般等于目标盘容量或者接近如果是一堆散开的系统目录说明是覆盖包这时候不要往下写盘而是要先准备一台 FreeBSD 9.2 机器把基础系统装好之后把这些目录按原路径覆盖过去/etc下面被覆盖的配置文件记得先备份。3.2 写盘dd 之前先确认设备名这一步错了没后悔药写盘是整个流程里唯一一个「错了就毁数据」的动作所以单独拎出来说。Linux 下写 U 盘# 第一步永远是确认目标设备看清容量和型号别凭感觉 lsblk -o NAME,SIZE,MODEL,TRAN sudo fdisk -l /dev/sdb # 确认无误后写入of 后面必须是对的那块盘 sudo dd if/data/panabit-r10/panabit-r10.img of/dev/sdb bs4M convfsync statusprogress # 写完刷一次缓存再拔避免最后一段没落盘 syncif是输入文件of是输出设备写盘场景下必须用整盘设备/dev/sdb而不是分区/dev/sdb1写到分区上引导记录会缺失。bs4M是块大小大块能明显提速convfsync保证 dd 结束前数据真的落盘不加这个参数经常出现「提示写完了但拔掉启动不了」statusprogress是 GNU dd 才有的FreeBSD 原生 dd 不支持用kill -INFO看进度。FreeBSD 主机上写盘略有不同设备名是da0这种块大小用小写m# FreeBSD 下先清掉盘头的旧分区表避免残留引导记录干扰 dd if/dev/zero of/dev/da0 bs1m count10 # 再写镜像 dd if/data/panabit-r10/panabit-r10.img of/dev/da0 bs1m convsynccount10配合bs1m只清掉前 10 MB足够抹掉分区表和引导区比全盘清零快得多。convsync让每个块补齐到固定大小对某些老 BIOS 的 U 盘引导兼容性有帮助。提示写盘前把机器上其它移动硬盘、备份盘全拔掉。lsblk看错一行、dd执行下去几秒钟就能把几 TB 的数据抹平事后恢复的成本远高于多花三十秒确认设备名。3.3 首次引导BIOS 里那几项设置决定了能不能进安装U 盘做好之后插到目标机器进 BIOS 或 UEFI 改引导顺序。这个年代的系统基本都是 Legacy BIOS 引导不需要关安全启动之外的特殊设置但有几项值得顺手确认引导模式设为 Legacy 或者 CSM 兼容模式纯 UEFI 引导大概率进不去。硬盘控制器模式如果是 AHCI 就保持 AHCI改成 IDE 兼容虽然能进但性能会掉。有多块网卡时确认网卡在 BIOS 里没被禁用某些品牌机默认只启用第一块。关掉「快速启动」它会跳过 U 盘引导检测。引导起来之后屏幕会刷一段 FreeBSD 的启动日志然后是安装或者自动部署过程。整盘镜像类的包通常是自动化程度很高的问你选哪块盘、确认后自己分区写文件中途不用插手。这个过程里最值得盯的是网卡识别那几行日志里会打印em0: Intel...之类的信息把管理口对应的网卡名记下来后面配 IP 要用。如果只认出一块网卡说明第二块驱动没加载或者硬件没插好这时候继续装下去也能进系统但数据口配不起来等于白装。安装结束会提示重启记得把 U 盘拔掉不然又引导回安装程序了。3.4 磁盘分区与文件系统给日志留出余量自动分区的默认方案一般够用但如果安装过程里给了手动分区的机会我建议按下面这个思路调整挂载点建议大小用途/剩余全部系统、程序、配置swap内存的 12 倍会话表吃紧时的缓冲别省/var单独分出 24 GB日志、临时文件隔离写满风险把/var单独分出来的好处是日志写爆的时候只影响挂载点本身根分区不会连带变成只读。FreeBSD 9.2 默认用 UFS2 文件系统格式化时会自动做软更新soft updates不需要额外调参。真要在小内存机器上跑可以在/etc/fstab里给数据盘加noatime减少元数据写入# /etc/fstab 片段noatime 减少文件访问时间戳的写入 /dev/ada0p2 / ufs rw,noatime 1 1 /dev/ada0p3 /var ufs rw,noatime 2 2rw读写挂载noatime表示不更新文件的最后访问时间对日志型写入有实际收益后面两个数字是 dump 和 fsck 顺序根分区必须是 1其它按顺序排。改完 fstab 别急着重启先用mount -o remount /验证一下语法对不对写错的 fstab 会导致下次开不了机得进单用户模式救。4. 管理口与数据口配置让桥真正通起来系统起来了只是第一步真正决定这套设备有没有用的是网络配置。这一章按「先能管、再能通、最后能控」的顺序来每一步都有对应的验证动作不建议跳步。4.1 管理口IP、掩码、网关以及为什么别直接改 rc.conf首次启动后一般会进一个字符控制台菜单里面有几项关键操作设置管理口 IP、修改管理密码、恢复出厂配置、重启关机。管理口配置按提示填就行需要准备三个值管理 IP、子网掩码、默认网关。管理 IP 建议单独划一个管理网段不要和内网业务网段混在一起否则将来内网一出问题你连管理面都进不去只能抱显示器去机房。这里有个很典型的坑懂 FreeBSD 的人会顺手去改/etc/rc.conf觉得那样更「正统」。改完ifconfig_em0inet 10.10.10.200 netmask 255.255.255.0重启发现 IP 又变回去了或者干脆没生效。原因是这类产品有自己的配置管理层启动脚本会在rc.conf之后按自己的配置库重写网卡参数你手改的内容被覆盖掉了。所以管理口的地址、网关、DNS 一律走控制台菜单或者 Web 界面改rc.conf只用来调整那些产品不管的边角参数。配完立刻验证别等下一步# 在管理网段的另一台机器上 ping -c 4 10.10.10.200 # 通的话再看端口Web 管理端口常见是 https 443早期版本也可能走 80 curl -k -I https://10.10.10.200/-c 4发四个包就停-k是跳过证书校验自签证书必须加否则 curl 直接报证书错误-I只取响应头。返回HTTP/1.1 200或者302就说明 Web 服务活着。如果是Connection refused先确认服务起没起sockstat -4l | grep -E 80|443看监听状态如果是超时多半是管理口没插对或者掩码写错回头查控制台里显示的管理口网卡名和物理口对不对应。4.2 数据口与网桥一对口子的事情别配成三条腿桥接配置是整套系统的核心。Panabit 的数据面靠两块网卡组成一个桥一进一出串在链路中间做透明转发和策略匹配。Web 界面里通常在网络设置或者数据口配置的位置做三件事第一件选定哪两块网口做桥。这两块必须是物理上串联在链路里的那两根线一般标成「内网口」和「外网口」。管理口绝对不能选进来否则桥一通管理面就被卷进数据转发路径经常直接失联。我一般会在配之前把三根线的标签再核一遍插在交换机上的那根是内网口接出口路由器的那根是外网口。第二件确认桥的转发方向。桥是透明的两个方向都转但策略是有方向的从内网口进来朝外网口去的是上行反之下行。做限速和阻断的时候方向搞反策略看着配了却完全不生效或者只限住了下载没限住上传是很常见的问题。配完先在 Web 上看一眼流量统计里的方向对不对再往下做策略。第三件旁路还是串联。串联是流量真的从设备上过能阻断能限速旁路是镜像一份流量过来只做分析不能干预。想清楚自己要哪种别指望旁路能做阻断那是物理上做不到的事。如果数据口在 Web 里根本列不出来回到 2.3 节和 3.3 节虚拟机上大概率是网卡类型选了vmxnet3物理机上大概率是第二块网卡驱动没加载dmesg | grep -i ethernet或者pciconf -lv | grep -i network能看到实际识别到的网卡。4.3 Web 首登与账号默认密码留一天都算多浏览器打开管理地址第一次登录用的账号密码一般是随包或者控制台里给出的初始值。登进去之后有几件事按顺序做先改密码。默认凭据是公开信息设备一旦连上任何能扫到 443 的网络被撞库是迟早的事。密码改成长度足够的随机串记在密码管理器里别贴在机箱上。再核版本。Web 首页或者系统信息里会显示当前版本号和构建日期跟文件名里的SANGUO r10 / 20150513对一下确认装上去的就是手上这个包别出现「装完发现是上一版」这种乌龙。然后配时区和时间。流控策略和时间段绑定时间不对会导致「按时间生效」的策略在错误的时间段里放行或者阻断流量。时区选对时间同步配一个内网 NTP 源别用默认值。最后看一眼授权和容量。免费版在会话数、策略条数、在线终端数上有明确上限Web 里一般有地方能看到当前用量和上限的比值。上线前就知道天花板在哪比跑到一半突然发现策略加不进去要好。4.4 策略落地的最小验证集配置到这一步先别急着上复杂策略。我一般先用最小的一组规则验证整条链路是通的给内网某台测试机的 IP 做一条限速比如上下行各 2 Mbps然后在那台机器上测速看是不是真的被压到了这个数值附近。限住了说明识别、匹配、执行这条链路全通限不住说明桥没转发、方向配反或者策略顺序被前面的规则先匹配走了。策略顺序这件事值得单独提醒。这类系统的规则是按顺序匹配的命中即停前面一条宽松的「全部放行」会把后面所有限速规则全部吃掉。加规则的时候从具体的往宽泛的排测试 IP 的规则放最前面全网的默认规则放最后。5. 排查与避坑五个真实翻车现场这一章是我自己踩过或者帮别人收拾过的现场记录每条按现象、原因、解决三段写。前面章节按顺序走完基本不会遇到但真出问题时这里通常是第一个该翻的地方。5.1 现象写盘之后原机器数据全没了原因dd的of写到了本机的数据盘。多盘机器上lsblk输出很长U 盘和备份盘容量接近时按行看很容易看串尤其是通过 SSH 远程操作、看不到新插入设备变化的时候。解决数据盘被覆盖前几个 GB恢复基本无望只能从备份走。预防动作做在前面写盘前先lsblk记录物理上把非目标盘拔掉或者卸载dd命令敲完先不回车回头把of再念一遍。我现在固定用「先拔盘再写」这个顺序麻烦一点但没再出过事。5.2 现象桥接配好内网时通时断大流量下载几分钟就掉线原因数据口用的是 Realtek 8168/8111。这类网卡在 FreeBSD 9.2 下的re驱动中断处理比较粗糙小包高并发时单核被打满桥接转发出现丢包表现的「掉线」其实是大量重传导致的假死。解决换 Intel 网卡82574L、i350 都行换完dmesg里会看到em或igb驱动加载。换不了硬件的临时缓解是把桥接的那两块口的中断绑到不同 CPU 核上能撑一阵但治标不治本。虚拟机上出现同样的症状先把网卡类型从vmxnet3改成e1000再看。5.3 现象虚拟机里桥接完全不通内网机器上不了网Web 管理却正常原因虚拟交换机的安全策略默认拒绝混杂模式和伪传输桥接需要收发目的 MAC 不是自己的帧全被交换机丢了。管理面走的是虚拟机的自己的 IP所以不受影响这个对比很容易让人以为是桥配错了。解决ESXi 上把对应端口组的安全策略三项混杂模式、MAC 地址更改、伪传输改成接受KVM 上确认用的是bridge而不是nat并检查br_netfilter有没有把桥接流量送进 iptables 过滤链。改完重启虚拟机生效。5.4 现象配完网桥管理页面再也打不开了ping 也不通原因把管理口也勾进了桥里。桥一通管理口就成了转发路径上的一环管理 IP 所在网段的流量被卷进桥接逻辑管理面直接失联。解决接显示器和键盘进控制台从菜单里把桥拆掉重新只选内网口和外网口两块。这类设备基本都保留了串口或者 VGA 控制台作为最后一条命配桥之前确认控制台能进是保命的习惯。远程操作时更要留一手先配一条带超时的回滚计划比如十分钟内没确认就自动恢复配置。5.5 现象跑了一两周Web 管理页打不开控制台刷一堆写失败原因根分区被日志写满。4 GB 盘装完系统剩不下多少日志和会话快照持续写入顶满之后 FreeBSD 切到只读或者半瘫服务跟着挂。解决控制台进去df -h看哪个分区满了先rm掉最老的日志文件腾出空间让系统恢复可写再考虑长期方案把/var单独分区、把日志保留天数调短、或者直接换大硬盘重装。我现在的习惯是装完第一件事就是查df -h和各日志目录的大小把这个基线记住后面出现异常一眼能看出来。6. 装完怎么验证三条链路一起过才算跑通装完不等于通通不等于能用。我验证一套新装的流控环境固定按「管理面、转发面、策略面」三条链路依次过每条都有明确的判定标准全部过了才算这台设备可以交付。管理面最简单从管理网段的一台机器上执行# 管理口连通性与 Web 服务存活 ping -c 4 10.10.10.200 curl -k -s -o /dev/null -w %{http_code}\n https://10.10.10.200/ # 登录后确认版本号与包一致 # 系统信息里核对版本代号、修订号、构建日期-o /dev/null丢弃响应体-w %{http_code}\n只打印状态码返回 200 或 302 就算过。版本号那一项别偷懒装错包在后期排查时是极难发现的隐形问题。转发面验证桥是不是真的在工作。找一台接在内网口下面的测试机做三件事ping 网关、traceroute 一个外网地址看路径有没有经过设备、在设备 Web 上看在线终端列表里有没有这台测试机的 IP 和 MAC。三件事里前两件过了但第三件看不到说明流量没走设备检查物理连线是不是绕过了设备直连出口。策略面验证规则能不能真正执行。给测试机单独加一条限速规则上下行各 2 Mbps放在规则列表最前面然后# 服务端起一个临时测速服务 iperf3 -s # 测试机上打流观察实际带宽是否被压到 2 Mbps 附近 iperf3 -c 10.10.10.50 -t 30 -P 4-t 30跑 30 秒-P 4起四个并发流。结果稳定在 2 Mbps 上下浮动说明识别、匹配、限速整条链路是通的如果跑出满速先查规则顺序是不是被前面的放行规则吃掉了再查桥的转发方向是不是配反了。要抓包看细节就上tcpdump -i em1 -n host 10.10.10.50-i指定数据口网卡-n不做域名解析host过滤单台机器输出里能看到包有没有真的从这块口进出。三条链路都过完之后我还会做一次「断电重启验证」直接断电重新上电等系统起来再看配置还在不在、桥还通不通。这个动作能暴露一堆「配置只存在内存里没落盘」的问题比任何纸面检查都直接。从那以后我每次装完这套东西不管多赶时间管理面、转发面、策略面这三条加上一次断电重启都强制走一遍不跳步。写这篇也是想让下一个接手旧设备的人少走点弯路希望能帮到你。本文还有配套的精品资源点击获取