운영하고 있는 홈랩 구조 상 최대한 외부 리소스를 사용하지 않고 운영하고 있다. 그래서 단순히 도메인을 연결하는 것부터 꽤 번거롭지만 학습에 무게를 둔다면 이 방식이 훨씬 좋기에 도메인이 추가될 때 어떤 식으로 하고 있는 메모를 할 예정이다.
구조
현재 구성된 홈랩 구조는 위 사진과 같다. 공유기를 통해 사용하고 있어서 DDNS는 DuckDNS를 가지고 있는 도메인을 통해 CNAME으로 추가했다. 각 도메인은 서브 도메인으로 서비스를 분류하고 있다 예를 들어서 젠킨스는 jenkins.xxx.xxxx.xx이고 깃랩은 gitlab.xxx.xxxx.xx 이런 식으로 설정해 둔다.
서비스 도메인으로 분류하는 이유는 각 서비스마다 IP로 설정하는 경우 공유기 내부에 Port forward 테이블이 너무 복잡해지고 포트를 정리하는 것도 실수할 것 같아 구성했다. 이런 서버를 열어두면 러시아 친구들이 항상 이상한 페이로드를 담아서 이곳저곳 찌르는 경우가 많아서 무차별 대입 공격(Brute forcing)이 가능한 포트가 아닌, 서브도메인을 통해 구성했다. 그리고 포트로 하는 경우 접속할 때 매번 포트 번호로 구분해서 접속하는 것도 번거롭고..
정리하자면
- 외부 공격으로부터 보호
- human-frendly 한 주소 체계
이다.
설정
DNS 정보 추가
본격적으로 서버를 추가하는 과정을 알아보자. 먼저 GoDaddy에 서비스에 해당하는 서브 도메인을 가진 도메인을 CNAME으로 DDNS와 연결하는 것이 첫 번째이다.
예시로 들 도메인 주소는 모니터링 주소이기 때문에 비밀✨
NGINX 라우팅 정보 추가
이제 DNS 정보를 통해서 DDNS를 접근하고, DDNS에 홈랩 서버로 접근하는 과정까지 알아봤다. 하지만 내부 인터넷에 도달해서 NGINX까지 도달했지만 해당하는 서브 도메인에 해당하는 라우팅 정보가 없기 때문에 404가 뜰 것이다. 따라서 NGINX 서버에서 다음 라우팅 정보를 추가한다.
# vi /etc/nginx/nginx.conf
server {
server_name DNS에 등록한 서브도메인을 포함한 주소;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://목적지 서비스 IP;
}
}
설정 완료되면 nginx에 대해서 systemctl 3 총사(daemon-reload, restart, status)를 수행한다. 그러면 이제 http로는 접속이 가능한 상태가 된다.
인증서 발행
HTTPS를 이용하기 위해서 letsencrypt로 인증서를 발행해 보자. certbot을 이용하면 명령어 한 줄로 적용이 가능하다.
certbot --nginx -d <서비스 도메인 주소>
비하인드
20000
'메모' 카테고리의 다른 글
서버 성능 병목은 어디서 발생할까? (0) | 2023.11.29 |
---|---|
AWS에 MySQL을 설치하려다 포기한 당신을 위해 (0) | 2023.11.29 |
나만의 홈랩(HomeLab) 구축기 (0) | 2023.11.10 |
우당탕탕 k8s 기록 (0) | 2023.11.10 |
Type<Challenge[]> #Medium (0) | 2022.02.05 |