차완기 - @8/17/2024, 5:26:00 PM
사설 DNS
pfSense는 사설 DNS 서버를 포함하고 있어, DNS Resolver를 사용하면 내부망을 URL로 깔끔하게 정리할 수 있습니다. 보통 홈랩에서는 .home.arpa를 사용하는 편이지만, 제가 참고했던 자료에서는 어떤어떤(?) 이유로 개인 도매인을 권장해, 앞에 local을 붙인 .local.varofla.com을 사용하게 되었습니다.
NAS의 경우 nas.local.varofla.com, HomeAssistant의 경우 ha.local.varofla.com 이런식이죠. 외우기 편리하고 특히 블로그 포스팅에서 개인 서비스의 URL이 노출될 일이 없다는 점이 장점이였습니다.
홈랩 특성 상 네트워크의 규모가 전혀 크지 않았기 때문에 외부에 노출되지 않는 서비스는 대충 자체 서명 인증서를 박아 SSL을 적용해두었는데요, 접속할 때 마다 뜨는 경고문도 그렇고 저런 빨간 추노마크가 붙어있는게 항상 마음에 들지 않았습니다. ???: 연결이 안전하지 않다고 주인놈아
자체 서명 인증서를 위한 CA 서버를 굴리는 경우가 있는데, 또 하나의 컨테이너를 늘리기 보다는 정식 인증서를 활용해보기로 했습니다. 사설 DNS 도메인에 개인 URL을 사용하기 때문에 가능한데요, 처음 설정한 당시에는 별 생각 없었는데, 지금 와서 보니 나름 잘 선택했던 것 같습니다.
인증서 발급
보통 Let's Encrypt로 인증서를 발급한다면 80번 포트를 개방해 웹 페이지를 통해 도메인의 소유 여부를 검증받습니다. 문제는 NAS 등의 Web UI를 외부에 노출했다가는 먹잇감이 되기 좋죠. 이런 경우 DNS challenge를 통해 소유 여부를 검증할 수 있습니다. 도메인의 TXT 레코드에 특정 값을 입력해 도메인의 소유 여부를 검증받는 것이죠.
pfSense는 인증서를 쉽게 관리할 수 있도록 도와주는 ACME 패키지를 지원합니다. ACME에 CloudFlare API 키를 집어넣으면 자동으로 Let's Encrypt DNS challenge를 처리합니다.
DNS 챌린지를 사용하면 와일드카드를 사용할 수 있죠. 와일드카드를 적용한 *.local.varofla.com에 대한 인증서를 발급받았습니다.
DNS 연결 수정
기존에는 URL별 서버의 IP를 바라보고 있었다면, 지금은 역방향 프록시 서버를 바라보도록 변경해야 합니다. 뒤에서 언급하겠지만 pfSense의 내장 역방향 프록시 서버를 사용하기 때문에 모조리 라우터의 IP로 향하도록 했습니다. (네트워크 장비는 88.0 네트워크를 사용하기에 라우터만 다른 LAN에 물렸습니다)
잘 반영되었네요.
역방향 프록시 세팅
pfSense에서 역방향 프록시는 HAProxy 패키지를 사용합니다.
프론트엔드와 백엔드를 적당히 설정했습니다.
테스트
테스트를 위해 TrueNAS의 Web UI에 접속했습니다. 인증서가 잘 먹는게 보이죠.
이렇게 간단한걸 왜 이제야 했는지 모르겠습니다. 이제 Vaultwarden처럼 SSL을 강제하는 서비스도 잘 굴릴 수 있겠네요. 조만간 가상화를 위한 하드웨어를 구해다가 박아둬야겠습니다.