무료 DDNS 서비스 제공업체인 https://no-ip.com/의 서비스를 이용하려면 Dynamic Update Client를 내려받아 사용해야 한다. 바이너리만 달랑 주기 때문에 프로세스가 죽었는지 살았는지 모니터링도 귀찮고, 재부팅 시 자동으로 실행되지도 않기 때문에 systemd에 service unit으로 등록해서 사용하는 방법을 정리해 보았다.
Free Dynamic DNS - Managed DNS - Managed Email - Domain Registration - No-IP
System Admins Managed DNS — Experience robust, scalable DNS solutions tailored for businesses of all sizes. Designed to enhance system reliability and performance, ensuring your operations always run smoothly. Learn More Home Networks Dynamic DNS — Gai
www.noip.com
1. 일단 noip-duc 바이너리를 받아서 적절한 위치에 둔다. 나는 /usr/bin/ 밑에 두었다.
2. /etc/systemd/system/noip-duc.service 파일을 만든다. 내용은 아래에서 설명한다.
[Unit]
Description=No-IP Dynamic Update Client
After=systemd-networkd-wait-online.service
Wants=systemd-networkd-wait-online.service
ConditionPathExists=/usr/bin/noip-duc
[Service]
Type=simple
ExecStart=/usr/bin/noip-duc -g 그룹명 --username 사용자명 --password 패스워드
Restart=on-failure
ExecStartPre=/bin/sleep 10
[Install]
WantedBy=multi-user.target
[Unit] 이라는 섹션에는 이게 어떤 서비스인지, 어떨 때 실행되는지 적는다. Wants에는 이 서비스가 의존하는 서비스를 적는데, 네트워크가 올라와야 하므로 우분투 24.04 기준 저걸 적었다. After는 마찬가지로 저거 다음에 실행되게 해달라는 의미다.
[Service] 섹션에는 이 서비스의 실체에 대해 적는다. ExecStart에 실행 명령만 잘 적으면 보통 잘 실행된다. ExecStartPre를 적은 이유는 인터넷 연결 시간을 고려해서 그렇게 했다.
[Install] 섹션에서는 이 서비스 유닛 파일의 심링크를 어디에 설치할지 정하는데, 일반 부팅 모드가 multi-user 모드이므로 저렇게 적었고, 이런 경우 심링크는 multi-user.target.wants/ 디렉터리에 생성되어 정상 부팅 시에 내가 만든 서비스가 자동으로 올라오게 되는 것이다.
3. 잘 되는지 확인해 보자.
$ sudo systemctl enable noip-duc
$ sudo systemctl start noip-duc
$ sudo systemctl status noip-duc
● noip-duc.service - No-IP Dynamic Update Client
Loaded: loaded (/etc/systemd/system/noip-duc.service; enabled; preset: enabled)
Active: active (running) since Sat 2025-00-00 00:00:00 UTC; 00min ago
Main PID: 000000 (noip-duc)
Tasks: 1 (limit: 28022)
Memory: 0.0M (peak: 0.0M)
CPU: 00ms
CGroup: /system.slice/noip-duc.service
└─111179 /usr/bin/noip-duc -g X --username X --password X
May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:40:38Z INFO noip_duc::public_ip] Attempting to get IP with method Dns(No-IP Anycast DNS Tools)
May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:40:38Z INFO noip_duc::observer] got new ip; current=9.9.9.9, previous=0.0.0.0
May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:40:39Z INFO noip_duc::observer] update successful; current=9.9.9.9, previous=0.0.0.0
May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:40:39Z INFO noip_duc::observer] checking ip again in 5m
May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:45:39Z INFO noip_duc::public_ip] Attempting to get IP with method Dns(No-IP Anycast DNS Tools)