개인 도메인을 시놀로지 NAS에 DDNS로 연결하고 인증서 적용하기
자신이 보유한 도메인을 DDNS 서비스 하듯이 IP에 따라서 변경을 하고
해당 도메인에 대해서 SSL 인증서를 적용하자
자 일단 이 일의 시작은 시놀로지의 HDD 절전 때문이다.
시놀로지는 그냥 패킷 하나 발생해도 절전모드를 해제해 버리기 때문에 절전모드는 그냥 포기하는게 좋을 것 같다
아무튼 그 빈도를 하나라도 줄이고자 synology.me 라던지 하는 시놀로지 제공 DDNS 와 quickconnect 를 꺼버렸다.
iptime 공유기도 사용하기 때문에 iptime.org 도메인으로 ddns 연결은 가능하지만 인증서 발급이 안되는 도메인이기에...
자 시작하자.
준비물 asus 공유기(멀린펌) 또는 시놀로지 NAS 또는 라즈베리파이 등등 리눅스 서버
가. 개인 도메인을 DDNS로 연결하기
1. 보유 도메인의 DNS 변경
1차 samara.ns.cloudflare.com
2차 watson.ns.cloudflare.com
자신이 보유한 도메인 관리 업체에 로그인하여 위와 같이 바꾼다.
위 DNS는 바뀌기도 하니 www.cloudflare.com 에서 직접 확인해 보도록 하자.
2. cloudflare.com 가입하기
무료 회원 가입하면 된다.
3. DDNS로 사용할 도메인 주소 등록
Type : A
Name : nas (예제)
IPv4 address : 1.1.1.1 (일단 임시 등록)
자세한 내용은 seolin.tistory.com/118 참고하도록 한다.
4. DDNS 자동 갱신
등록 절차를 마쳤으면 API 주소 확인하기.
토큰이니 zone id 이니 있는데 전부 메모장에 기재하도록 하자.
중요한 데이터이니 외부에 노출되는 일이 없도록 하자.
라즈베리는 위 링크 따라하도록하고
asus 공유기는 blog.gomgom.net/setting-cloudflare-ddns-on-asus-router/
이 절차를 따라하도록 하자.
하나 수정 하자면 현재 자신의 IP 주소가 나와 있는 스크립트
NEW_IP='wget http://ipinfo.io/ip -qO -' 이 부분을
NEW_IP=$(wget http://ipinfo.io/ip -qO -) 이렇게 수정 하자
위의 절차대로 API 값 입력하여 파일 생성 및 자동 갱신 등록 완료 되었다면
해당 스크립트를 실행 하면 cloudflare.com 에서 현재 IP 주소로 갱신이 되는걸 볼 수 있다.
-- 아래 내용 변경 사항 추가 --
이제 절반 왔다.
6. 인증서 발급 받기
이제 자신의 도메인으로 인증서를 발급 받아야 한다.
Let's encrypt 에서 받는다. 3개월마다 갱신해야 하는대신 무료이다.
귀찮으면 1년짜리 돈주고 사면 된다.
인증서 발급 참조 blog.naver.com/jcjee2004/221831609605
시놀로지는 GUI상에서 발급 받을수 있도록 하는 메뉴가 있는데 이상하게 잘 안된다.
그냥 와일드 카드로 받아버리면 만사 해결 도 되고 추가로 리버스 프록시 주소 생성해서 확장하기에도 좋다.
-내용 추가-
갑자기 어느 순간부터 갱신이 안된다
2가지 문제가 있었는데
첫번째는 인증서 발급 절차에서
Domain: '_acme-challenge.내 도메인'
TXT value: "키 값"
위 값이 추가 되었다(변경 되었다?) 그래서 본인은 총 4개의 값을 dns에 입력하였다
두번째는 인증서 갱신 위치 변경
/usr/syno/etc/certificate/_archive
본래 위의 경로 하단에 있는 위치에서 인증서 갱신을 해주고 nginx 리로딩 또는 리스타트를 해주면 적용이 되었는데
/usr/syno/etc/certificate/system/default/
이 경로도 같이 바꿔줘야 적용이 되었다
리버스 프록시 때문인지 암튼 저 경로들 추가하면 되었다.
-내용 추가-
먼저 _acme-challenge 값이 너무 자주 바뀐다 1개월에 한번은 바뀌는 것 같다
그래서 이걸 자동 등록 해주는 스크립트를 짜 봤다
우선 기존에 시놀로지에 등록하는 발급 acme.sh 가
/파일 경로/acme.sh --renew --dns --force -d 도메인.kr --yes-I-know-dns-manual-mode-enough-go-ahead-please
이와 같았을 건데
/파일 경로/acme.sh --renew --dns --force -d 도메인.kr --yes-I-know-dns-manual-mode-enough-go-ahead-please --server letsencrypt &> /파일 경로/acme_result.txt 2>&1
이와 같이 수정하면
acme.sh 가 있는 경로에 acme_result.txt 라는 파일에 _acme-challenge 값의 기록이 남게 된다.
그럼 dns_txt_record.sh 라는 스크립트를 하나 더 만들어서 위의 내용을 cloudflare 에 curl 을 이용하여 등록 하게 되는 것인데 이게 조금 복잡 하다
먼저 4번 항목에서 기존에 사용하던 주소가 아니다 api 주소가 다르다
curl -X GET "https://api.cloudflare.com/client/v4/zones/{API 키 영역ID}/dns_records/" \
-H "X-Auth-Email: {이메일 주소 입력}" \
-H "X-Auth-Key: {Global API Key 입력}" \
-H "Content-Type: application/json" \
위의 정보를 입력하면 _acme-challenge 필드의 ID 값을 알 수 있다
위의 api 키 영역 ID와 _acme-challenge 라고 써 있는 필드에 선두에 있는 id 값이 그것에 해당 한다
그 필드의 content 값을 변경해 주면 acme.sh 를 통하여 자동 업데이트 스크립트가 완성 되는 것이다.
cat /파일 경로/acme_result.txt | grep value > /파일 경로/acme_result_txt.txt
sed "s/...........................................//" /파일 경로/acme_result_txt.txt > /파일 경로/acme_result_txt1.txt
sed "s/.$//" /파일 경로/acme_result_txt1.txt > /파일 경로/acme_result_txt2.txt
sed "2d" /파일 경로/acme_result_txt2.txt > /파일 경로/acme_result_txt2_1.txt
sed "1d" /파일 경로/acme_result_txt2.txt > /파일 경로/acme_result_txt2_2.txt
value1=$(</파일 경로/acme_result_txt2_1.txt)
if ! [ -z $value1 ]; then
curl -X PUT "https://api.cloudflare.com/client/v4/zones/{영역id 값}/dns_records/{수정할 필드의 id값}" \
-H "X-Auth-Email: {이메일 주소}" \
-H "X-Auth-Key: {글로벌 키값}" \
-H "Content-Type: application/json" \
--data "{\"type\":\"TXT\",\"name\":\"_acme-challenge\",\"content\":\"$value1\",\"ttl\":1,\"proxied\":false}"
#위에 --data 한 줄임
else
echo "fail"
fi
위의 내용을 dns_txt_record.sh 라는 파일에 넣고
chmod 755 dns_txt_record.sh
로 실행 권한을 주고
시놀로지 스케쥴러에 acme.sh 밑에 줄에 같이 등록해 주면 된다.
acme.sh 에서 실행 되는 응답 값을 acme_result 에 저장하고 그 값에서 _acme 값을 추출하여
해당 값만 놔두고 나머지를 하나하나 지우는 방식의 작업으로 진행 했다
사실 저 행위 전체를 변수로 진행해도 결과는 같았을 것이라 문제 없지만
진행 상황을 한단계씩 확인 하기 위해서 저렇게 만들 었다가 수정하기 귀찮아서 그냥 쓰는 중이다.
'팁' 카테고리의 다른 글
windows 10 -> windows 11 upgrade 및 초기 설정 (1) | 2022.09.24 |
---|---|
Lenovo P11 pro 2021 TTS 사용하기 (0) | 2022.06.19 |
Ublock origin 에서 특정 팝업만 차단하기 (0) | 2022.04.23 |
갤럭시 S21 ADB 명령어로 GOS 해제 하기 (0) | 2022.03.22 |
firefox tworld 로그인 오류 문제2 (0) | 2022.01.17 |