blog.stackframe.dev

Postfix를 DNS 서버 실행 이후에 시작하기

나는 DNS 서버와 메일 서버를 동일한 컨테이너에 넣어서 관리한다. 문제는 Postfix가 DNS 서버인 PowerDNS보다 먼저 실행되어 메일 서버 도메인을 찾지 못하고 실행에 실패한다는 것이다.

Postfix가 mail.stackframe.dev 도메인의 IP를 가져오지 못하고 실패했다.

기본적으로 Postfix는 network.target에, PowerDNS는 network-online.target에 실행되도록 설정되어 있다. 그러므로 Postfix가 실행되었을 때는 아직 PowerDNS는 실행되지 않았으므로 PowerDNS에서 관리하는 내 도메인의 IP 주소를 가져오지 못한다.

이 문제를 해결하기 위해서는 Postfix가 도메인 서버 이후에 실행되도록 하면된다. 설정은 간단히 systemctl edit을 사용하여 postfix.service의 의존성을 수정할 수 있다:

# systemctl edit postfix.service

아래와 같이 PowerDNS 서비스 유닛인 pdns.service 이후에 실행되도록 After= 옵션을 넣으면 된다. DNS 서버를 PowerDNS 대신 BIND9을 사용한다면 pdns.service 대신 named.service를 입력한다:

[Unit]
After=pdns.service

여기서 중요한 점은 pdns.service가 enabled 된 상태여야 한다. After= 옵션만 사용하면 해당 서비스 유닛 이후에 실행한다는 의미이지 그 서비스 유닛을 실행까지 한다는 의미가 아니기 때문이다. 아예 postfix.service가 실행하면 DNS 서버도 실행되도록 하고싶다면 Wants=pdns.serviceRequires=pdns.service를 추가하면 된다.

저장하고 재시작해보면 Postfix가 DNS 서버 이후에 실행된 것을 확인할 수 있다.

설정하기 전의 의존성

설정한 이후의 의존성

댓글