본문 바로가기

취미, 관심/NAS, Server

[Synology] 시놀로지에서 클라우드플레어 DDNS 설정하고 와일드카드 인증서 받기 #2

 

2021.10.01 - [Synology] 시놀로지에서 클라우드플레어 DDNS 설정하고 와일드카드 인증서 받기 #1

이 게시글의 연장입니다.

 

사용 환경은 DS1821+, DSM 7.0.1 입니다. 6.2 호환성에 대해서는 확인되지 않았습니다.

DS920+ 에서도 동일하게 적용됩니다.

 

https://github.com/acmesh-official/acme.sh/wiki/Synology-NAS-Guide

 

GitHub - acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol

A pure Unix shell script implementing ACME client protocol - GitHub - acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol

github.com

이곳에서 설명하는 방법을 그대로 따라합니다.

 

1. 나스에 SSH 접속이 가능해야만 합니다.

2. root 권한을 사용합니다.

3. 클라우드플레어 API 토큰(글로벌 키)이 필요합니다.

 

1. 클라우드플레어 글로벌 키 발급 API 토큰 발급

글로벌 Key는 보안상의 이유로 사용하지 않고, 아래 API토큰 발급을 해서 사용하시는것을 추천합니다. 클라우드플레어 로그인 후 아래 링크를 통해 얻으시면 됩니다.

https://dash.cloudflare.com/profile/api-tokens

글로벌 키 발급은 아래 내용을 확인해주세요.

더보기

이 키를 복사하여 시놀로지의 DDNS 추가 페이지의 암호란에 넣어줍니다.

API 토큰 페이지에서 토큰 생성 버튼을 클릭합니다.

필요한 기능은 영역DNS편집 뿐입니다.

템플릿 사용 버튼을 클릭하거나, 다른 기능이 필요한 경우 사용자 설정 토큰을 생성합니다.

관리하는 도메인이 여러개라면, 적용할 도메인만 설정하는것이 좋겠죠.

영역 리소스 -> 특정 영역 -> 원하는 도메인을 선택합니다.

여기서 클라이언트 IP 주소 필터링 기능을 이용해 NAS의 IP를 설정해주면 그 외의 IP에서는 적용이 되지 않습니다만, 우리는 DDNS의 기능을 목적으로 합니다. 즉, 클라이언트의 IP가 변경될 수 있으므로, 그 부분은 비웁니다.

TTL 부분은 설정하지 않습니다.(즉, 기간의 제한을 두지 않습니다.)

요약 계속 버튼을 누르면 아래와 같은 페이지가 뜨고,

토큰 생성을 하면 

이렇게 토큰 생성이 완료됩니다. 화면에 나오는 것처럼, 이 토큰은 앞으로 다시 표시되지 않습니다. 즉, 분실시 새로 적용하는 것 외 다른 방법이 없습니다.

이 키는 DDNS외 인증서 발급 등에도 해당되므로, 잘 보관해주세요. 물론, DDNS에 적용하는 토큰 따로, 인증서에 적용하는 토큰 따로 적용해도 무방합니다.

 

 

2. acme.sh 설치

아래 명령을 한줄씩 넣어줍니다.

$ sudo -i
$ cd ~
$ wget https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
$ tar xvf master.tar.gz
$ cd acme.sh-master/
$ ./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "이메일"
$ source ~/.profile

*  여기의 이메일은 zeroSSL에 들어갈 이메일입니다. 즉, 클플 계정과 달라도 됩니다.

중간에 빨간색으로 쭉 나오는데, 무시하시면 되고, 마지막에 OK 떴으면 정상진행되었습니다.

원래 문서에서는 sudo su를 사용하는데, 직접 해보니 sudo su로는 제대로 작동하지 않았습니다.

 

아래 내용에 따라 환경 변수를 설정합니다.

export CF_Email="이메일" #클라우드 플레어 계정의 이메일
export CF_Token="위에서 생성한 API 토큰" 

#아래 내용은 권한을 더욱더 제한하고 싶을 때 넣습니다.
export CF_Account_ID="계정ID"
export CF_Zone_ID="영역ID"

Account_ID 와 Zone_ID 부분은 도메인의 '개요' 부분 우하단에서 확인이 가능합니다.

Zone_ID를 넣으면 단일 도메인에 대해서만 수정이 가능하므로, 도메인을 여러개 사용하는 경우 조금~ 더 안전할 수 있을 것 같습니다.

 

이제 인증서를 만들어 봅니다.

아래 내용을 그대로 넣어주세요.

$ cd /usr/local/share/acme.sh 
$ export CERT_DNS="dns_cf"

acme.sh가 있는 폴더로 이동 후 CERT_DNS를 클라우드플레어로 설정하는 내용입니다.

 

$ ./acme.sh --issue --home . -d '내 도메인' -d '*.내 도메인' --dns "$CERT_DNS"

인증서 발급을 원하는 도메인을 넣어주시면 되는데, 저희는 와일드카드 인증서를 원하는것이기 때문에, *.도메인을 추가로 넣어줘야만 합니다.

 

이렇게 뜨면 인증이 된 것입니다.

 

만약, 인증서 발급이 제대로 되지 않는다면..

오랜만에 나스 초기화를(...)하게 되면서 인증서 발급을 하던 중 문제가 생겼습니다. zerossl에 계정 등록이 제대로 되지 않아 생긴 에러같아요.

./acme.sh --register-account -m 이메일 --issue --home . -d '도메인' -d '*.도메인' --dns "$CERT_DNS"

--register-account -m 이메일 을 삽입해서 계정 등록을 하면서 발급을 시도하니 제대로 됩니다.

 

 

3. 기본 인증서 교체

기본 인증서를 새로 발급한 인증서로 교체합니다.

$ cd /usr/local/share/acme.sh
$ export SYNO_Username='관리자 계정'
$ export SYNO_Password='암호'
$ export SYNO_Certificate="인증서설명"
$ ./acme.sh --deploy --home . -d '도메인' -d '*.도메인' --deploy-hook synology_dsm

관리자 계정 : 시놀로지 관리자 계정

암호 : 시놀로지 관리자 계정의 암호

SYNO_Certificate 란에는 설명을 적어도 됩니다.

 

마지막에 Success가 뜨면 완료

 

제어판에서 기본 인증서의 변경이 확인 가능합니다.

 

설정 -> 구성에서 서비스에 대한 인증서 설정을 해줍니다.

도메인이 여러개라면 아래의 '다른 도메인 추가' 부분을 참고하셔서 도메인을 더 추가해주세요.

 

4. 인증서 갱신 설정

제어판 -> 작업 스케줄러 -> 생성 -> 예약된 작업 -> 사용자 정의 스크립트를 선택합니다.

 

작업 : 알아볼 수 있는 이름

사용자 : root

활성화됨 체크

 

스케줄 : 문서에는 1주로 예시가 되어있습니다. 인증서는 3개월간 유효하며, 30일 이내에 갱신이 가능합니다. 일단 1주일로 설정합니다(여기서는 매주 토요일 오전 11시로 설정합니다.

1개월로 설정해도 되나, 인증서 갱신은 30일 이전부터 가능하므로, 어떠한 문제로 한번 실패 시 다시 갱신을 시도하지 않게 되어버립니다. 

 

 

실행 할 스크립트를 넣어줍니다.

# 인증서 갱신 
/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh/

이메일로 알림 받는 부분은 사용하시는분의 편의에 따라 설정하시면 될 것 같습니다.

제 경우에는 비정상 종료 여부와 관계없이 실행 후 결과를 메일로 보내고 있습니다.

 

확인을 누르면 경고가 하나 뜹니다. root 권한으로 실행하는 부분에 대한 내용이므로 확인을 눌러줍니다.

이제 인증서 적용이 완료되었습니다.

 

여기까지만 해도 되는데.. 인증서 배포 설명이 있어 일단 적용합니다.

$ cd /usr/local/share/acme.sh
$ export SYNO_Username='관리자 계정' 
$ export SYNO_Password='비밀번호' 
$ export SYNO_Scheme="http" #DSM 사용할 프로토콜
$ export SYNO_Port="5000" #DSM 포트, http인경우 5000, https인경우 5001이 됩니다.
$ export SYNO_Certificate="" 
$ ./acme.sh --insecure --deploy --home . -d '내 도메인' -d '*.내 도메인' --deploy-hook synology_dsm

만약, 포트를 변경하셨다면 바꾸셔야 하구요. http 10082 포트로 변경한 경우 아래와 같은 메시지기가 뜨면 성공입니다.

5. 다른 도메인 추가

다른 도메인을 더 등록하는 경우 아래 방법으로 추가합니다.

$ ./acme.sh --issue --home . -d '추가할 도메인' -d '*.추가할 도메인' --dns "$CERT_DNS"
$ export SYNO_Certificate="A different certificate"
$ export SYNO_Create=1
$ ./acme.sh --deploy --home . -d "추가할 도메인" -d '*.추가할 도메인' --deploy-hook synology_dsm

"A different certificate" 부분은 도메인 설명입니다.

이런 메시지가 뜨면 성공!

* 추가내용

원래 문서에는 더 많은 내용이 있습니다. 필요한 경우 해당 내용을 참고하여 사용해주세요.

 

기존에 다른 방식(이전 글의 방식으로 인증서를 추가한 경우) 으로 인증서를 사용했던 경우, 기존 인증서를 삭제하시고, 혹시모를 문제를 방지하기 위해 재부팅 후 작업을 진행하시는게 좋을 것 같스니다. 제 경우 기존 와일드카드 인증서가 적용된 상태에서 작업할 때 계속 오류가 발생해 인증서를 모두 삭제하고, 재부팅까지 거친 후 진행하니 정상 진행되었습니다.

 

DSM 업그레이드를 한 경우 아래 명령을 입력하여 환경 수정을 해야 한다고 합니다.

$ cd /usr/local/share/acme.sh
$ ./acme.sh --force --upgrade --nocron --home /usr/local/share/acme.sh

 

4에서 생성한 스크립트를 통해 갱신을 시도하면 아래와 같이 실행됩니다.

 

갱신을 시도하고, 스킵이 되면, 강제로 또 한번 시도합니다.

제 인증서는 11월 30부터 갱신이 가능하다고 뜨네요.

매주 토요일 작동하도록 설정했으니, 12월 3일에 갱신이 될 예정입니다.

 

갱신 후 내용을 더 추가하도록 하겠습니다.

 

[22/02/25] 현재까지 사무실과 집에서 사용중인 제품 모두 도메인 갱신이 아주 잘 되고 있습니다. 

시놀로지 작업 스케줄러에서는 보름마다 실행 옵션이 없네요 -_-...

1. 갱신 일자를 확인해 3개월마다 시도하도록 설정해서 한방에 끝내던가.

2. 만에하나 오류를 방지하기 위해 3개월에 한번, 12시간 단위로 시도를 한다던가.

3. 3개월째 1일, 15일에 시도를 하거나 보름마다 실행을 한다던가.. 하는 방식으로 자유롭게 쓰시면 되겠습니다.

 

 

* 기타 사용 가능한 API리스트는 github에서 확인해주세요

https://github.com/acmesh-official/acme.sh/wiki/dnsapi