35.1 Linux Jail 基础
Linux Jail 是 FreeBSD 操作系统中的一项功能,用于在 Jail 中运行 Linux 二进制文件和应用程序。其原理是在 FreeBSD 内核中集成兼容层,将 Linux 系统调用转换为对应的 FreeBSD 原生系统调用。Linux Jail 旨在无需单独部署 Linux 虚拟机或运行环境的情况下,使 FreeBSD 系统能够运行 Linux 软件。
以下介绍在 FreeBSD Jail 中部署 Linux Jail 的初始化配置。
35.1.1 准备工作
本节将所有 Jail 绑定到虚拟网络接口 lo1,使其构成 FreeBSD 系统下的一个局域网,其中 FreeBSD 主机充当该局域网的网关。
所有 Jail 的网络流量必须通过网络接口 lo1,因此需要启用网络转发,本节使用 pf 防火墙实现此功能。
注意
需要配置 pf 防火墙以实现网络访问控制。
35.1.2 准备网络接口
添加克隆网络接口 lo1 并启用:
# sysrc cloned_interfaces+="lo1"
# service netif cloneup35.1.3 准备 pf 防火墙
提供两种配置方式,可根据需要选用。
35.1.3.1 方案一
pf 防火墙的表(table)是一种命名结构,用于保存地址和网络的集合,表中的地址可通过 NAT 访问网络。
即使没有相关规则引用某表,persist 标志也使防火墙始终保留该表,从而防止防火墙规则重新加载时自动清空该表。
编辑 /etc/pf.conf 文件,加入以下配置:
table <jails> persist
pass out on em0 inet from <jails> to any nat-to (em0)技巧
实际使用时请将接口名
em0以及各 Jail 的 IP 地址替换为自己环境中的实际配置。
可使用 pfctl 对 jails 表添加或删除条目,以控制网络访问。例如:
pfctl -t jails -T add 192.168.5.1将 192.168.5.1 加入 jails 表使其可以访问网络。pfctl -t jails -T delete 192.168.5.1将 192.168.5.1 移出 jails 表使其无法访问网络。
此方法需手动管理,但灵活性更高。
35.1.3.2 方案二
直接在 /etc/pf.conf 文件中写下规则:
pass out on em0 inet from 192.168.5.1 to any nat-to (em0)此方法允许 192.168.5.1 访问网络,其特点是规则固化在配置文件中,对于无特殊需求的场景较为便捷。
35.1.4 启用 pf 防火墙
即使不使用防火墙规则,也需要启用 pf 服务来实现 NAT 功能。启用 pf 防火墙的方法请参见其他章节。
35.1.5 加载 Linux 二进制兼容层(Linuxulator)内核模块
启用并启动 Linux 兼容层服务,该方式能够自动加载 Linux 兼容层所需的各种内核模块:
# service linux enable
# service linux start35.1.6 准备目录
创建用于存放 Jail 相关文件的目录:
# mkdir /usr/jails35.1.7 文件结构
/usr/jails/
├── debian/ # Debian 12 Jail 根目录
│ ├── dev/ # devfs 挂载点
│ ├── dev/shm/ # tmpfs 挂载点
│ ├── dev/fd/ # fdescfs 挂载点
│ ├── proc/ # linprocfs 挂载点
│ ├── sys/ # linsysfs 挂载点
│ └── tmp/ # nullfs 挂载点
├── ubuntu/ # Ubuntu 22.04 Jail 根目录
│ ├── dev/
│ ├── dev/shm/
│ ├── dev/fd/
│ ├── proc/
│ ├── sys/
│ ├── tmp/
│ └── tmp/.X11-unix/ # X11 socket 挂载点
├── antix/ # antiX Linux Jail 根目录
│ ├── dev/
│ ├── dev/shm/
│ ├── dev/fd/
│ ├── proc/
│ ├── sys/
│ └── tmp/
├── alpine/ # Alpine Linux Jail 根目录
│ ├── dev/
│ ├── dev/shm/
│ ├── dev/fd/
│ ├── proc/
│ └── sys/
└── freebsd-jail/ # FreeBSD Jail 根目录
/etc/
├── fstab.debian # Debian Jail 的 fstab 配置
├── fstab.ubuntu # Ubuntu Jail 的 fstab 配置
├── fstab.antix # antiX Jail 的 fstab 配置
├── fstab.alpine # Alpine Jail 的 fstab 配置
├── jail.conf # Jail 主配置文件
├── pf.conf # PF 防火墙配置
└── rc.conf # 系统启动配置35.1.8 参考文献
- FreeBSD Wiki. LinuxApps[EB/OL]. [2026-03-25]. https://wiki.freebsd.org/LinuxApps. 列出了在 FreeBSD 上运行的 Linux 应用及方法,为兼容性实践提供参考。