02 — 环境准备与网络规划

2.1 前置条件总览

FreeIPA 对部署环境有严格的要求,在动手之前必须逐一确认:

要求说明
操作系统RHEL 8+/AlmaLinux/Rocky Linux/CentOS Stream/Fedora(使用 Docker 可跨平台)
内存最少 2GB(Docker 部署建议 4GB+)
CPU1 核即可,2 核更佳
磁盘10GB+(用户数据主要占 LDAP 数据库空间)
固定 IP必须有固定 IP,不能是 DHCP 动态分配
完整主机名(FQDN)必须是全限定域名,如 ipa-local.thinkmeta.site
DNS 正向/反向解析主机名必须能被正确解析
时间同步Kerberos 要求时钟偏差 < 5 分钟
端口可达多个端口需要开放(见下方端口表)

2.2 域名规划

域名选择原则

  • 使用你拥有的域名(公网域名或内网自定义域名)
  • Realm 名 = 域名的大写形式
  • 建议使用专门的内网子域名,避免与公网服务冲突

本教程环境规划

域名(Domain):     thinkmeta.site
Realm(领域):       THINKMETA.SITE

命名约定

主机类型主机名格式示例
FreeIPA 服务器ipa-<环境>.thinkmeta.siteipa-local.thinkmeta.site
开发服务器dev<N>.thinkmeta.sitedev.thinkmeta.site
运维服务器ops<N>.thinkmeta.siteops01.thinkmeta.site
数据库服务器db<N>.thinkmeta.sitedb01.thinkmeta.site

2.3 IP 地址规划

FreeIPA 服务器:  192.168.3.90
  子网掩码:      255.255.255.0
  网关:          192.168.3.1
  
客户端 IP 范围:  192.168.3.100 - 192.168.3.200

2.4 端口需求

FreeIPA 需要开放以下端口,确保防火墙不会拦截:

┌───────┬──────────┬──────────────────────────────┐
│ 端口  │ 协议     │ 服务                         │
├───────┼──────────┼──────────────────────────────┤
│ 53    │ TCP/UDP  │ DNS (BIND)                   │
│ 80    │ TCP      │ HTTP(重定向到 443)          │
│ 443   │ TCP      │ HTTPS (Web UI + API)         │
│ 389   │ TCP      │ LDAP                         │
│ 636   │ TCP      │ LDAPS (LDAP over SSL)       │
│ 88    │ TCP/UDP  │ Kerberos 认证                │
│ 464   │ TCP/UDP  │ Kerberos 密码修改            │
│ 123   │ UDP      │ NTP 时间同步                 │
└───────┴──────────┴──────────────────────────────┘

注意:DNS 端口(53)特别重要,它是客户端发现 FreeIPA 服务的关键途径。

检查端口是否被占用

# 在 FreeIPA 服务器上执行
sudo netstat -tlnp | grep -E ':(53|80|443|389|636|88|464)'
# 或使用 ss
sudo ss -tlnp | grep -E ':(53|80|443|389|636|88|464)'

Docker 部署时,如果宿主机已运行 systemd-resolved(Ubuntu 默认),它可能占用 53 端口。需要先停掉:

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

2.5 Docker 环境准备

本教程使用 Docker 部署 FreeIPA 服务器。

安装 Docker(Ubuntu 26.04)

# 安装 Docker
sudo apt update
sudo apt install -y docker.io
 
# 启动 Docker 并设置开机自启
sudo systemctl enable --now docker
 
# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
# 重新登录后生效

验证 Docker

docker --version
docker run hello-world

2.6 时间同步配置

Kerberos 要求所有节点时钟偏差不超过 5 分钟,否则认证会失败。

服务器端(FreeIPA 宿主机)

# 查看当前时间状态
timedatectl status
 
# 启用 NTP 时间同步(Ubuntu 使用 systemd-timesyncd)
sudo timedatectl set-ntp true
 
# 查看同步状态
timedatectl timesync-status

客户端

# 确保时间同步开启
sudo timedatectl set-ntp true
timedatectl status

Docker 容器内不使用 NTP,而是与宿主机共享时钟。在运行容器时,FreeIPA 使用了 --no-ntp 参数,依赖宿主机的时钟。

2.7 DNS 规划详解

DNS 在整个体系中的角色

客户端想登录 → 问 DNS:"Kerberos 服务器在哪?"
              → DNS 返回:"ipa-local.thinkmeta.site (192.168.3.90)"
              → 客户端去 192.168.3.90:88 做 Kerberos 认证

FreeIPA 内置的 BIND DNS 会自动创建以下关键 SRV 记录:

_kerberos._tcp.thinkmeta.site       → ipa-local.thinkmeta.site:88
_kerberos._udp.thinkmeta.site       → ipa-local.thinkmeta.site:88
_ldap._tcp.thinkmeta.site           → ipa-local.thinkmeta.site:389
_kpasswd._tcp.thinkmeta.site        → ipa-local.thinkmeta.site:464
_kerberos-master._tcp.thinkmeta.site → ipa-local.thinkmeta.site:88

客户端 DNS 配置

客户端的 /etc/resolv.conf 必须指向 FreeIPA 服务器:

# 客户端 DNS 配置
nameserver 192.168.3.90

对于有外网需求的客户端,可以配置条件转发。但最简单的方式是:将 FreeIPA 的 DNS 作为首选,Forwarders 转发给公网 DNS(FreeIPA 安装时已配置 --forwarder=1.1.1.1)。

2.8 环境检查清单

在开始部署前,逐项确认:

□ Docker 已安装并可正常使用
□ 服务器 IP 地址为固定 IP(192.168.3.90)
□ 53/80/443/389/636/88/464/123 端口未被占用
□ systemd-resolved 已停止(如果占用 53 端口)
□ 时间已同步(timedatectl 显示 NTP service: active)
□ 宿主机内存 ≥ 4GB
□ 磁盘空间 ≥ 20GB(/data/docker-space/ipa-data 所在分区)
□ 防火墙已放行所需端口(或关闭防火墙)
□ /data/docker-space/ipa-data 目录已创建

全部确认完毕后,就可以进入下一章进行 FreeIPA 服务器的部署了。