添加第二台 IPA 服务器
用 ipa-replica-install 加一台 replica 做多 master:装前检查、安装命令、哪些告警可以忽略、装后必做,以及装失败怎么清干净重来。
第二台 IPA 服务器(replica)与第一台是多 master,目录、KDC、CA、DNS 全部双向复制,任何一台停机域照常工作。管理台目前只装在第一台上,replica 是纯 FreeIPA;命令行 ipa 在两台上都能用。
replica 装机不走 playbook,用 FreeIPA 自带的 ipa-replica-install。它对目标主机的干净程度要求比 ipa-server-install 更苛刻,装前检查不要省。
装前检查(在新主机上)
主机名解析
hostname -f # FQDN
getent hosts $(hostname -f) # 第一条必须是真实 IPv4,不能是 ::1 或 127.0.0.1
grep '^hosts' /etc/nsswitch.conf # 应为 hosts: files dns,没有 myhostname/etc/hosts 里主机名不能挂在 ::1 或 127.0.0.1 那行;nsswitch.conf 的 hosts: 有 myhostname 时 IPv6 查询回 ::1,IPA 会拒装或建出指向回环的记录。改成 hosts: files dns。
ipa-client-install --uninstall 会把 nsswitch.conf 还原成装前备份,每次卸载重来都要重改这一行。
系统完整性
replica 要在干净系统上装。被人工清理过的机器会在不同步骤挂掉,且每次挂的地方不一样。
rpm -q mod_ssl ipa-server ipa-server-dns sssd-common idm-pki-base bind-dyndb-ldap
rpm -Va --nofiledigest --nomtime --nomode 2>/dev/null | grep '^missing' || echo "no missing files"
ls -l /etc/krb5.conf.d/crypto-policies # 必须存在,指向 /etc/crypto-policies/back-ends/krb5.configrpm -Va 有 missing 就 rpm -qf <路径> 找到包,dnf reinstall,然后 restorecon -Rv 修 SELinux 标签。
/etc/krb5.conf.d/crypto-policies 是 update-crypto-policies 生成的软链,不属于任何 rpm,rpm -Va 查不出它缺失。缺了它 KDC 不受 permitted_enctypes 约束,会用 camellia 签票,第一台按自己的策略一律拒收,复制就断在 Invalid credentials (49)。缺了就 update-crypto-policies --set DEFAULT,还没有就手工 ln -s /etc/crypto-policies/back-ends/krb5.config /etc/krb5.conf.d/crypto-policies。
时间、端口、第一台的状态
chronyc sources # 与第一台时差 < 5 分钟
ss -lntp | grep -E ':(389|636|8443|8080) ' || echo "ports clear"在第一台上:ipactl status 全 RUNNING;ipa server-find 和 ipa topologysegment-find domain 里没有新主机的残留(上次失败留下的)。
许可
replica 本身不需要许可。第一台的许可要含「证书签发」模块(每档都有),否则 replica 装机在申请 dirsrv 证书那步报 CA_UNREACHABLE。1.0.2 起 FreeIPA 自身的证书请求不经过许可闸门,这个限制不再存在。
安装
在新主机上,先注册为客户端再提升:
ipa-client-install --domain=<域> --realm=<REALM> \
--server=<第一台 FQDN> --principal admin -U -p admin -w '<admin口令>'
kinit admin
ipa-replica-install --setup-ca --setup-dns --forwarder=<第一台用的转发器> -U第一台的转发器:ipa dnsconfig-show(全局)为空就看 ipa dnsserver-show <第一台 FQDN>(每服务器)。没有转发器用 --no-forwarders。
第一步的 -p admin -w 只用于注册;第二步 -U 非交互模式需要一张有效的 admin 票,所以中间要 kinit admin,或给第二步加 --principal admin --admin-password。
全程 10 到 15 分钟:目录 40 步 → KDC → dirsrv TLS → httpd 21 步 → CA 33 步(约 3 分钟)→ DNS 9 步 → DNSSEC 密钥同步。
可以忽略的输出
| 输出 | 含义 |
|---|---|
DNS server <转发器> does not support DNSSEC | 上游不签 DNSSEC,装机自动关校验 |
Reverse DNS resolution of address <第一台 IP> failed | 没建反向区,装后补 |
Replica DNS records could not be added on master: Insufficient access | 装机中途的 ACI 时序问题,replica 自己的 DNS 段会补上 A 记录,装后核对 |
Could not add certificate to service ldap/... entry: no modifications to be performed | 证书已在,幂等跳过 |
装后必做
# 新主机
ipactl status # 9 个(无 adtrust)或 11 个服务全 RUNNING
getcert list | grep -c MONITORING # 8 或 9
# 第一台
ipa server-find # 两台
ipa topologysegment-find domain # 一段,Connectivity: both
dig +short <新主机 FQDN> # A 记录在复制必须实测,topologysegment 和 ipa-replica-manage list 都不代表数据在流动:
# 第一台
ipa user-add repltest --first=a --last=b
# 新主机,等 15 秒
ipa user-show repltest
# 反向再来一次,然后在第一台删掉
ipa user-del repltest反向区(装机警告过的)在任一台上建,两台自动同步:
ipa dnszone-add <反向区>.in-addr.arpa.
ipa dnsrecord-add <反向区>.in-addr.arpa. <末段> --ptr-rec=<新主机 FQDN>.建之前先 dig -x 确认这个网段没有别的 DNS 在做权威,否则冲突。
复制不通
装机成功但 user-add 不同步,先看两边的复制状态:
ldapsearch -QY GSSAPI -o ldif-wrap=no -b "cn=mapping tree,cn=config" \
"(objectclass=nsds5replicationagreement)" cn nsds5replicaLastUpdateStatusJSON | grep -E "^cn:|Status"| 状态 | 原因 | 处理 |
|---|---|---|
Invalid credentials (49),DS 日志 gss_accept_sec_context | 新主机缺 /etc/krb5.conf.d/crypto-policies,KDC 签了 camellia 票 | 补软链,systemctl restart krb5kdc,再 systemctl restart dirsrv@<REALM> |
Local error (-2) | KDC 不可用时留下的旧状态 | KDC 起来后 systemctl restart dirsrv@<REALM>,然后 dsconf slapd-<REALM> repl-agmt poke --suffix "dc=..." <协议名> |
state: green 但数据不动 | RUV 里有失败安装留下的僵尸 replica id | dsconf slapd-<REALM> repl-tasks cleanallruv --suffix "dc=..." --replica-id <id>,两台都跑 |
dsconf 以 root 通过 LDAPI 自动绑定为 Directory Manager,不需要口令。
在新主机用第一台的 KDC 强制拿票再绑定,可以直接分清是哪一侧的问题:
KRB5_TRACE=/dev/stdout ldapwhoami -Y GSSAPI -H ldap://<第一台 FQDN> 2>&1 | grep -E "tkt=|Invalid"tkt=camellia256-cts-cmac 就是上面第一行的病。
装失败了重来
ipa-replica-install 失败后两边都有残留,都要清:
# 新主机
ipa-server-install --uninstall -U --ignore-topology-disconnect
dsctl slapd-<REALM> remove --do-it 2>/dev/null
rm -rf /etc/dirsrv/slapd-<REALM> /etc/pki/pki-tomcat /var/lib/pki/pki-tomcat /var/log/pki/pki-tomcat /etc/ipa/default.conf
rm -f /var/lib/ipa/sysrestore/sysrestore.state /var/lib/ipa/sysrestore/sysrestore.index
getcert list | grep -o "Request ID '[0-9]*'" # 有就 getcert stop-tracking -i <id>
systemctl stop krb5kdc kadmin
sed -i 's/^hosts:.*/hosts: files dns/' /etc/nsswitch.conf # 卸载把它还原了
# 第一台
ipa server-del <新主机 FQDN> --force --ignore-topology-disconnect --ignore-last-of-role
ipa host-del <新主机 FQDN>
ipa server-find; ipa topologysegment-find domain # 只剩第一台,0 段ipa-server-install --uninstall 报 IPA server is not configured 是正常的,它照样会去第一台摘 server 条目。报 Replication topology is disconnected 就加 --ignore-topology-disconnect。
两边都干净了,从「装前检查」重新走一遍。装机中被 restart 过 KDC 的话记得它依赖目录服务,systemctl restart krb5kdc kadmin dirsrv@... 一起重启会让 KDC 先起而连不上 LDAP,用 ipactl restart 代替。