Skip to content
Client Panel

Server Deployment

This guide walks through installing and configuring a FreeIPA server on Rocky Linux 9.x. The setup includes the integrated DNS server, which is strongly recommended for service discovery.

For this guide, we use the following reference setup:

HostnameIPRoleOS
ipa-server.example.internal192.168.100.128FreeIPA Server (DNS, Kerberos, LDAP)Rocky Linux 9.x
client-1.example.internal192.168.100.129Client (joined to domain)Rocky Linux 9.x
client-2.example.internal192.168.100.130Client (joined to domain)Rocky Linux 9.x

Run these checks on the server before starting the installation:

Terminal window
# 1. Time synchronization (Kerberos requires < 5 min drift)
timedatectl status
# 2. Network connectivity
ping 192.168.100.128
# 3. Hostname must be a proper FQDN
hostname -f
# 4. No DNS conflicts
getent hosts ipa-server.example.internal

Why these matter:

  • Kerberos uses timestamps to prevent replay attacks, time drift causes auth failures
  • FreeIPA relies on DNS for service discovery, network/DNS issues are the most common deployment failure
  • FQDN must be correct, otherwise Kerberos tickets and certificates will fail validation
Terminal window
hostnamectl set-hostname ipa-server.example.internal

Verify:

Terminal window
hostname -f
# Must output: ipa-server.example.internal
Terminal window
cat >> /etc/hosts << 'EOF'
192.168.100.128 ipa-server.example.internal ipa-server
EOF
Terminal window
dnf update -y
dnf install -y ipa-server ipa-server-dns
PackagePurpose
ipa-serverFreeIPA core services
ipa-server-dnsIntegrated DNS server (strongly recommended)

Expected size: ~500 MB of packages, depending on what is already installed.

If you skip ipa-server-dns, you must configure external DNS manually, including SRV records for service discovery.

Terminal window
ipa-server-install --unattended \
--setup-dns \
--hostname=ipa-server.example.internal \
--ip-address=192.168.100.128 \
--domain=example.internal \
--realm=EXAMPLE.INTERNAL \
--ds-password='YourDS_P@55w0rd' \
--admin-password='YourAdmin_P@55w0rd' \
--forwarder=192.168.100.2 \
--forward-policy=only \
--auto-reverse \
--no-dnssec-validation \
--netbios-name=EXAMPLE \
--mkhomedir \
--ntp-server=pool.ntp.org
ParameterMeaningWhy
--setup-dnsConfigure integrated DNSFreeIPA auto-manages DNS records
--hostnameServer FQDNMust match hostnamectl output
--ip-addressServer IPBasis for forward/reverse DNS records
--domainDNS domain (lowercase)LDAP DN suffix, user email domain
--realmKerberos realm (uppercase)Typically DOMAIN in uppercase
--ds-passwordDirectory Server passwordLDAP backend root DN password
--admin-passwordAdmin user passwordWeb UI and CLI admin credentials
--forwarderUpstream DNS serverHandles queries outside the FreeIPA domain
--forward-policy=onlyDNS forward policyOnly forward non-local queries, avoid loops
--auto-reverseAuto-configure reverse DNSCreates PTR records (IP to hostname)
--no-dnssec-validationDisable DNSSECReduces complexity (enable in production)
--mkhomedirAuto-create home dirsCreates /home/<user> on first login
--ntp-serverNTP sourceSynchronizes system time (critical for Kerberos)

Runtime: 5 to 15 minutes, depending on network and disk speed.

Terminal window
ipactl status

Successful output looks like this:

Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
named Service: RUNNING
httpd Service: RUNNING
ipa-custodia Service: RUNNING
pki-tomcatd Service: RUNNING
ipa-otpd Service: RUNNING
ipa-dnskeysyncd Service: RUNNING
ipa: INFO: The ipactl command was successful
ServiceRole
Directory ServiceLDAP directory database
krb5kdcKerberos ticket-granting service
namedDNS service
httpdWeb UI at https://ipa-server.example.internal
pki-tomcatdCertificate authority
ipa-otpdOne-time password daemon

Open all required FreeIPA ports:

Terminal window
firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,kerberos,kpasswd,dns,http,https,ntp}
firewall-cmd --reload
# Verify
firewall-cmd --list-services
PortProtocolServicePurpose
53UDP/TCPDNSName resolution and service discovery
88UDP/TCPKerberosTicket issuance
389TCPLDAPDirectory queries
443TCPHTTPSWeb UI, LDAPS
464UDP/TCPKpasswdPassword changes
123UDPNTPTime synchronization

Adapted from Dawn’s Blog : FreeIPA Complete Deployment Guide.