# 개인참고용 이므로 많이 축약됨
고정아이피는 유료 서비스이다.
때문에 DDNS를 이용해서 아이피가 변경되더라도 외부접속을 가능하게하려고 했다.
Cloudflare 가입후 api키를 발급받으면 편하다.
그런데 나는 duckDNS를 재미삼아 해봤다.
[window10에서 테스트]
1. DuckDNS의 특징
- 무료 : 광고나 제한 없이 완전히 무료로 사용 가능합니다.
- 커스텀 도메인 : yourname.duckdns.org 형식의 서브도메인을 제공합니다.
- 다양한 플랫폼 지원 : Windows, Linux, macOS, 라즈베리파이, 공유기 등에서 클라이언트 실행 가능.
- 간단한 API : IP 업데이트를 위해 HTTP 요청만으로 관리할 수 있습니다.
- IPv6 지원 : IPv4와 IPv6 모두 호환됩니다.
2. DuckDNS 사용 방법
1단계: 계정 생성
- DuckDNS 홈페이지 에 접속합니다.
- Sign Up 을 클릭하고, Google계정으로 로그인합니다.
- 이메일 주소나 별도의 비밀번호는 필요 없습니다.
2단계: 도메인 추가
- 대시보드에서 **"Add Domain"**을 클릭합니다.
- 원하는 이름(예: myhome)을 입력하면 myhome.duckdns.org가 생성됩니다.
- "Create" 버튼을 눌러 저장합니다.
3단계: 클라이언트 설정 (IP 자동 업데이트)
DuckDNS는 IP가 변경될 때마다 도메인 레코드를 업데이트하는 클라이언트 스크립트 를 제공합니다.
아래 방법 중 하나를 선택해 설정합니다.
레코드란 말은 그냥 신경쓸 필요없다. 그냥텍스트다
ip -> 도메인 연결하는 텍스트를 레코드라고 하는듯
duckdns_update.bat 파일 : (이 코드는 duckdns에 ip갱신 업데이트를 보내는거다)
@echo off
set DUCKDNS_TOKEN="your duck token"
echo [%date% %time%] DuckDNS 업데이트 시작 >> C:\duckdns_update.log
curl -k "https://www.duckdns.org/update?domains='your domain'&token=%DUCKDNS_TOKEN%" >nul 2>&1
echo [%date% %time%] DuckDNS 업데이트 완료 >> C:\duckdns_update.log
exit
이 파일을 윈도우 스케줄러에 등록하고 5분간격으로 실행하게 하면된다 .
근데 이렇게하면 cmd창이 5분마다 켜져서 거슬리는데
때문에 업데이트 로그 찍는거랑
>nul 2>&1
exit 같은걸로 해결해보려고 했지만 안됬다.
아무튼 해당스케줄 속성에서 일반 - 보안옵션 - 사용자의 로그온 여부에 관계없이 실행 체크- 가장높은 수준 권한 체크-
숨김 체크 하면 된다.
그다음 공유기에서 필요한 포트를 개방한다.
그리고 테스트로 nestjs 서버를 띄우고
3000번 포트로 접속하면
신뢰할수없는 사이트라고 뜨는데
ca인증을 받아야 ssl 통신이 가능하다.
서버단에서 nginx로 설정도 가능하긴하다고 하는거같으나 뭐암튼
받으면 좋으니 받는다.
보통 Certbot으로 받는거같은데
나는 DNS-01 챌린지로 발급 했다.
1.acme.sh 스크립트 설치:
curl https://get.acme.sh | sh
2.DuckDNS API 키 설정 :
export DUCKDNS_TOKEN="your token"
3.인증서 발급:
acme.sh --issue --dns dns_duckdns -d "your domain"
그런데 이렇게하면 아마 에러가 뜰거다.
경로문제면
# acme.sh 전체 경로로 실행
/c/Users/W10/.acme.sh/acme.sh --issue --dns dns_duckdns -d "your domain"
환경변수 문제면
Windows 시스템 PATH 추가
- 환경 변수 설정 :
- 제어판 → 시스템 → "고급 시스템 설정" → "환경 변수".
- 시스템 변수 에서 Path 선택 → 편집 .
- C:\Users\W10\.acme.sh 추가.
- 터미널 재시작 :
- Git Bash 또는 CMD를 완전히 종료 후 다시 실행.
3. 인증서 발급 명령어 재시도
# DUCKDNS_TOKEN 설정 확인
export DUCKDNS_TOKEN="토큰"
# 인증서 발급 (DNS-01 챌린지)
/c/Users/W10/.acme.sh/acme.sh --issue --dns dns_duckdns -d "도메인"
socat경고는 무시한다.
- acme.sh는 자동으로 인증서 갱신 작업을 스케줄링합니다.
인증서 설치 확인
- 인증서 저장 경로 :
gitbash
ls -l ~/.acme.sh/도메인_ecc
마지막 _ecc에 주의하자
그런데 아마 없을거다 왜냐면
요새는 ZeroSSL이 기본인증기관으로 사용된다고 하는듯
이거 로그인해야함
# 이메일 주소로 ZeroSSL 계정 등록
BASH
/c/Users/W10/.acme.sh/acme.sh --register-account -m your_email@example.com
그럼 콘솔에 머 사이트인증하라고 하는데 누르면댐
인증서 재발급
# DNS 챌린지로 인증서 발급
/c/Users/W10/.acme.sh/acme.sh --issue --dns dns_duckdns -d 도메인
근데아마 또 안될건데
bash
# 환경 변수에 DuckDNS 토큰이 설정되었는지 확인
echo $DUCKDNS_TOKEN
출력결과로 토큰이 나와야댐
근데 안나올건데
환경변수 미인식 문제임
시스템 환경변수에 새로만들기하고
변수이름 DuckDNS_Token
변수값 토큰 넣고
bash 재실행한다음에 재인증하면댐
/c/Users/W10/.acme.sh/acme.sh --renew -d 도메인 --force --debug
잘됬으면
C:\Users\W10\.acme.sh\도메인_ecc 디렉토리안에
도메인.key 이거랑
fullchain.cer 이게 있어야함. (이게중요함 이건 인증되야만 생김)
typescript 예시
// main.ts
const certPath = path.join('C:', 'Users', 'W10', '.acme.sh', '도메인.org_ecc');
const httpsOptions = {
key: fs.readFileSync(path.join(certPath, '도메인.key')),
cert: fs.readFileSync(path.join(certPath, 'fullchain.cer')),
};
인증서 파일위치 시각화
C:\Users\W10\.acme.sh
└── 도메인.org_ecc
├── 도메인.key
├── fullchain.cer
└── ...
포트포워딩 예시
외부 포트
|
내부 IP
|
내부 포트
|
프로토콜
|
3000
|
192.168.x.x (서버 IP)
|
3000
|
TCP/UDP
|
80
|
192.168.x.x
|
80
|
TCP
|
내컴터는 172로 시작하더라
아무튼 172랑 192가 표준규격임
cmd 에서 ipconfig 치면 나옴
포트 열렸는지 확인
CanyouSeeMe 에서 3000 포트가 열렸는지 확인
HTTP → HTTPS 리다이렉트 수정
- 포트 80 리스닝 확인 :
// main.ts
http.createServer(httpApp).listen(80, '0.0.0.0', () => {
console.log('HTTP server running on port 80');
});
이렇게 하면 외부에서
도메인:80 포트로 접속했을때
3000으로 매핑?? 리디렉션?? 암튼 그렇게되서 연결됨
'Tip' 카테고리의 다른 글
영어공부는 이제 진짜 필요없다. (교육의 중앙화에 대한 생각) (0) | 2025.04.10 |
---|---|
pcb, 메인보드 고장 발생 시 의심되는 부품과 고장 확률 (경험적 추정치) (0) | 2025.03.17 |
하루 방문자수 1000명의 블로그,유튜브,인스타그램 등등의 월수익 비교는 원으로 얼마정도 될까 ?? 그리고 sns 여러군데에 동시에 컨텐츠를 올리는게 트래픽 유입에 유리하겠지?? (2) | 2025.03.12 |
SSH, SFTP root로그인, mobaxterm sftp permission denied #31 (0) | 2023.11.07 |
WIFI환경(내부망) Windows 원격제어 Permission denied (publickey,keyboard-interactive) 문제해결방법 (0) | 2023.06.07 |