Skip to main content

duckdns 와일드 카드

image.png

docker/certbot/config/duckdns.ini 생성

dns_duckdns_token = [duckdns 토큰]


chmod 600 /volume1/docker/certbot/config/duckdns.ini

보안을 위해 적절한 권한 수정

nano Dockerfile

image.png

FROM certbot/certbot

RUN apk add --no-cache py3-pip \
    && pip install certbot-dns-duckdns

Ctrl X로 저장 y로 저장

docker build -t certbot-dns-duckdns .

image.png

image.png

SSH

docker run --rm -it \
  -v "/volume1/docker/certbot/config:/etc/letsencrypt" \
  -v "/volume1/docker/certbot/log:/var/log/letsencrypt" \
  certbot-dns-duckdns certonly --manual --preferred-challenges=dns -d '*.[DDNS]' -d '[DDNS]'

02 이메일.png

(위 이미지는 certbot/certbot으로 돼 있지만, certbot-dns-duckdns가 올바른 문구입니다. 필자의 실수입니다)

이메일 입력

image.png

동의

03 밸류.png

밸류 메모

duckdns spec에 따라 아래 명령어


01 duckdns 토큰.png

토큰은 메인에 있음

https://www.duckdns.org/update?domains=[도메인]&token=[토큰]&txt=[밸류]

도메인은 noriarchive
토큰은 위에서 복붙
밸류는 SSH에서 나온 걸 "마우스 드래그" 절대 Ctrl C 금지. 종료됨.
그리고 밸류 값은 실행할 때마다 다른 게 나오니까, 실수로 종료했다면 처음부터 다시.

만약 실수로 밸류 값을 잘못 넣거나 했다면 

https://www.duckdns.org/update?domains=[도메인]&token=[토큰]&txt=&clear=true

이렇게 지울 수 있고

https://toolbox.googleapps.com/apps/dig/#TXT/ 해당 사이트에서

밸류 값 위에 있는 _acme로 시작하는 값을 넣는 것으로 조회가 가능.

04 구글 밸류.png

image.png

밸류 값이 업데이트가 됐다면, 엔터를 클릭

이제 개인 키와 인증서를 뽑아와야 함.

다만 도커 컨테이너 내부에 저장된 거고, certbot은 그냥 꺼져버리기 때문에, 편법이 필요함.

docker run --rm -it --entrypoint /bin/sh \
  -v "/volume1/docker/certbot/config:/etc/letsencrypt" \
  certbot-dns-duckdns

05 도커 안 꺼지게.png

이상태가 됐다면 ssh를 새로 열고

sudo -i 권한을 얻은 뒤 docker ps

06 컨테이너 아이디.png

certbot의 컨테이너 아이디 드래그. (드래그가 복사임)

새로 연 곳에서 마찬가지로 다음 명령어 입력

docker exec -it [컨테이너 ID] /bin/sh


image.png

다음 명령어 입력해서 키, 인증서를 임시 폴더로 복사

cp /etc/letsencrypt/live/noriarchive.duckdns.org/fullchain.pem /tmp/fullchain.pem
cp /etc/letsencrypt/live/noriarchive.duckdns.org/privkey.pem /tmp/privkey.pem

image.png

exit 입력해서 빠져나오기

image.png

docker cp [컨테이너 ID]:/tmp/fullchain.pem /volume1/docker/certbot/config/fullchain.pem
docker cp [컨테이너 ID]:/tmp/privkey.pem /volume1/docker/certbot/config/privkey.pem

컨테이너 ID 입력하고 복붙

image.png

image.png

복사됨

ssh 새 창은 닫고 원래 창에서 exit

image.png

그럼 자동으로 도커 종료됨

07 보안.png

08 인증서.png

image.png

새 인증서를 추가하든, 기존 인증서 (duckdns 쓰던 게 있다면)를 교체하든

image.png

인증서 가져오기

image.png

이러고 확인

image.png

그라믄 이렇게 되는데 이제 역방향 프록시든 뭐든 그냥 제한 없이 다 쓸 수 있고

적용까지 5분~10분 정도 걸리니께 좀 기다려보이소


자동 갱신

어.. 그러니까 갱신도 하고 ~ 인증서를 교체까지 하는 거다.

image.png

 

#!/bin/bash

# 인증서 복사 경로
CERT_PATH="/etc/letsencrypt/live/[DDNS]"
TARGET_PATH="/volume1/docker/certbot/config"

# 인증서 복사
cp "$CERT_PATH/fullchain.pem" "$TARGET_PATH/fullchain.pem"
cp "$CERT_PATH/privkey.pem" "$TARGET_PATH/privkey.pem"

# 시놀로지 nginx 서비스 재시작
sudo synosystemctl restart nginx

09 작업 스케줄러.png

10 사용자 정의 스크립트.png

image.png

image.png

image.png


docker run --rm \
  -v "/volume1/docker/certbot/config:/etc/letsencrypt" \
  -v "/volume1/docker/certbot/renew_cert.sh:/renew_cert.sh" \
  certbot-dns-duckdns renew --dns-duckdns-credentials /etc/letsencrypt/duckdns.ini --post-hook "/renew_cert.sh" --quiet

만료일 30일 남았을 때부터 갱신이 가능함.

 


1. DuckDNS 인증서 발급 준비

  • duckdns.ini 파일 생성
    경로: /volume1/docker/certbot/config/duckdns.ini
    내용:

    ini
    dns_duckdns_token = [duckdns 토큰]
  • 권한 설정

    bash
    chmod 600 /volume1/docker/certbot/config/duckdns.ini

2. Certbot-DNS-DuckDNS 이미지 생성

  • Dockerfile 생성
    명령어:
    bash
    nano Dockerfile
    내용:
    dockerfile
    FROM certbot/certbot RUN apk add --no-cache py3-pip \ && pip install certbot-dns-duckdns
    • 저장 후 Docker 이미지 빌드:
    bash
    docker build -t certbot-dns-duckdns .

3. 와일드카드 인증서 발급

  • 인증서 발급 명령어 실행
    bash
    docker run --rm -it \ -v "/volume1/docker/certbot/config:/etc/letsencrypt" \ -v "/volume1/docker/certbot/log:/var/log/letsencrypt" \ certbot-dns-duckdns certonly --manual --preferred-challenges=dns -d '*.[DDNS]' -d '[DDNS]'

4. TXT 레코드 업데이트

  • TXT 레코드 업데이트
    브라우저에서 아래 URL을 수정하여 입력:
    url
    https://www.duckdns.org/update?domains=[도메인]&token=[토큰]&txt=[밸류]

5. 개인 키와 인증서 발급

  • TXT 레코드가 업데이트되었다면, Enter로 진행하여 개인 키와 인증서를 발급받기
    (이 인증서는 certbot-dns-duckdns 컨테이너 내부에 저장됨)

6. PEM 파일 복사

  • SSH를 새로 열고 Certbot 컨테이너에 접근
    권한 얻기:

    bash
    sudo -i
  • 컨테이너 ID 찾기

    bash
    docker ps
  • 컨테이너 ID로 쉘 접근

    bash
    docker exec -it [컨테이너 ID] /bin/sh
  • PEM 파일을 임시 저장소로 복사

    bash
    cp /etc/letsencrypt/live/noriarchive.duckdns.org/fullchain.pem /tmp/fullchain.pem cp /etc/letsencrypt/live/noriarchive.duckdns.org/privkey.pem /tmp/privkey.pem
  • Exit로 빠져나오기

    bash
    exit

7. PEM 파일 로컬 저장소로 복사

  • 로컬 저장소로 PEM 파일 복사
    bash
    docker cp [컨테이너 ID]:/tmp/fullchain.pem /volume1/docker/certbot/config/fullchain.pem docker cp [컨테이너 ID]:/tmp/privkey.pem /volume1/docker/certbot/config/privkey.pem

8. 시놀로지 제어판에서 인증서 교체

  • 시놀로지 제어판 보안 인증서에서 기존 인증서 교체
    privkey.pem과 fullchain.pem을 사용하여 와일드카드 인증서로 변경.

9. 자동 갱신 설정

  • 작업 스케줄러에 등록
    자동 갱신 명령어:
    bash
    docker run --rm -v "/volume1/docker/certbot/config:/etc/letsencrypt" certbot-dns-duckdns renew --dns-duckdns-credentials /etc/letsencrypt/duckdns.ini --quiet
    • 작업 스케줄러에 주기적으로 실행되도록 등록.

10. 인증서 자동 교체를 위한 스크립트 생성

  • renew_cert.sh 생성
    내용:
    bash
    #!/bin/bash # 인증서 복사 경로 CERT_PATH="/etc/letsencrypt/live/noriarchive.duckdns.org" TARGET_PATH="/volume1/docker/certbot/config" # 인증서 복사 cp "$CERT_PATH/fullchain.pem" "$TARGET_PATH/fullchain.pem" cp "$CERT_PATH/privkey.pem" "$TARGET_PATH/privkey.pem" # 시놀로지 nginx 서비스 재시작 sudo synosystemctl restart nginx

11. 자동 갱신 명령어에 후크 추가

  • 작업 스케줄러에 등록할 명령어
    bash
    docker run --rm \ -v "/volume1/docker/certbot/config:/etc/letsencrypt" \ -v "/volume1/docker/certbot/renew_cert.sh:/renew_cert.sh" \ certbot-dns-duckdns renew --dns-duckdns-credentials /etc/letsencrypt/duckdns.ini --post-hook "/renew_cert.sh" --quiet