나스 네트워크 설정
개요
내 나스를 어디에서든 접근할 수 있도록 만들어보자.
라우터 아래 물려 있으니 라우터의 공인 IP로 접근할 수 있지만, 이렇게 사용하면 너무나도 불편하다.
당연히 dns 설정을 해준다는 게 내 생각이다.
아울러 ddns가 되어 알아서 IP에 대한 추적이 가능하도록 해줄 것이다.
그리고 라우터 포트포워딩을 통해 각종 서비스에 접근할 수 있도록 만들 것이다.
내 최종 목표는 443포트만을 통해 모든 트래픽과 요청이 이뤄지도록 만드는 것이다.
그리고 그 방식은 서브도메인을 활용하는 방식이어야만 한다.
왜 서브도메인이냐?
각각의 도메인을 기능적으로 분리하여 나중에 검색을 할 때 편하게 하기 위함이다.
그래서 다음의 목표들을 세웠다.
- ddns를 통해 언제나 문제없이 도메인만으로 접속
- tls는 당연
- 모든 트래픽은 443포트로만 연결되고 내부에서 요청을 라우팅
- 서브도메인 활용
말은 꼭 모든 목표를 한번에 설정한 것마냥 이야기했지만..
아래 과정들을 여러 날 시도하면서 헤매다 정리한 것을 상단에 적었다.
기본 네트워크 설정
나스 설정페이지 네트워크 부분에서 기본 네트워크 설정을 진행한다.
DDNS, ssl 인증을 진행한다.
큐냅 클라우드를 활용한 ddns, ssl
큐냅 클라우드에서 ddns, ssl 설정을 한다.
무료 tls 인증이 있는데 굳이 돈내고 살 이유를 못 느끼겠어서 나는 let's encrypt로 진행했다.
인증서의 보장, 이런 부분들에서 구매를 하면 책임의 영역이 넘어가기 때문에 구매를 하는 것도 메리트가 없지는 않겠으나, 돈을 낼 정도의 가치는 아니라는 것이다.
싸피에 플젝할 때도 let's encrypt를 사용했고, 현업 스타트업 기업들도 사용하고 있는 방식이기에 리스크가 심각하지 않다고 판단했다.
인터넷으로 접속 가능하게 만들기
아직 공유기 포트 포워딩 설정을 하지 않았다.
그래서 그냥 연결을 시도하면 공유기 관리자 페이지로 리다이렉트된다.
선행 작업으로, 일단 나스 기기의 내부 ip를 고정한다.
그냥 나스쪽에서 설정하는 것도 가능하지만, 그래도 안전하게 공유기에 세팅하려고 한다.
어차피 dhcp서버는 공유기니까, 아예 서버 측에서 설정하는 게 혹시 모를 이슈에서 안전하다는 것이 내 판단이다.
물론 세팅할 것이 공유기에 늘어나니 관리 요소가 증가한다는 것은 하나의 단점이라고 할 수 있겠다.
kt 공유기 세팅
kt 모드는 놀랍게도, 내부 ip가 얼마냐에 따라 공인 ip를 다르게 할당해준다고 한다..![^4]
근데 다른 글을 또 찾아보니 이게 iptv를 사용할 때를 위해서 제공해주는 기능이라고 한다.[^5]
개인적인 추측으로는, iptv가 사용하는 트래픽 양이 많기도 하고 프로토콜도 다르니 이를 편하게 모니터링하기 위해 분리를 하는 게 아닐까 한다.
공유기 입장에서도 분리된 ip 주소를 통해 라우팅을 할 때 속도를 보장해줄 수 있을 것 같다.
진짜로 내가 다른 ip를 받을 수 있는 건지 테스트해보려 했는데, 안 된다.
공유기 모드로 해야 한다는 말도 있다[^6]
코넷 ip 범위 내로 시도를 해보니 이번엔 됐다.
여기를 초과하는 범위를 세팅하지 못하게 막아둔 것이다.
이걸 바꿔준다고 바로 나스 ip가 바뀌지는 않는다.
기본 임대시간인 1시간이 지나야 하는 걸까?
그런 건 아니고, 금방 ip 세팅이 바뀌어서 접속이 불가능하게 됐다.
이제는 내가 지정한 ip로 세팅이 된 것이다.
이건 큐냅 클라우드에서 인터넷 연결을 테스트하는 포트들이다.
관리
24080 -> 8080
24443 -> 443
웹서버
24081 -> 80
24444 -> 8081
일단 막연하게 이렇게 하는 방향으로 생각해보았다.
포트포워딩 설정을 마치고 https로 나스 관리 페이지로 들어가보았다.
소스 ip가 신기하게도 라우터 번호로 찍힌다?
이렇게 접속은 되는데, 이상하게 큐냅 클라우드에서의 테스트에서는 안 된다고 나온다.
서브도메인 사용해보자
그런데.. 이렇게 매번 포트를 바꿔가며 하는 건 절대 편리하지 않다.
하나의 포트로 전부 연결하는 건 어떨까?
내 나스 내부에 서브도메인을 두는 것이다.
conf.zero.. 이렇게 오면 설정페이지, 그냥 들어오면 web 이런 식으로 말이다.
리버스 프록시로 구현하는 것이 가장 일반적인 방식이고, dns를 또 세팅하는 방법도 있기는 하다.
후자의 경우 일일히 ip 세팅, 또 도메인 등록, tls 인증서도 따로 발급 받는 등의 귀찮은 점이 많은 것으로 보인다.
그래서 공부하면서 서브도메인 설정이 가능한가 봤는데, 시놀로지는 서브도메인을 지원해주지만 큐냅클라우드는 그런 게 없다!
지원 안 한다 못 박혀 있으면 맘 편히 포기하는 건데, 정보가 없어서 시간을 많이 소모했다...
시놀은 이렇게 되는데..(누군가의 IP 죄송합니다)
ㅂㄷㅂㄷ...
그래서 결국 큐냅에서 무료로 제공해주는 무료 도메인 외에, 다른 도메인을 결국 활용해야만 한다.
아니다. 방법이 없는 건 아니다.
말 그대로 ddns를 추가해서 사용하면 되지 않을까?
그러나 dns 서버들이 영 믿음직스럽지가 않아서 진행하지 않았는데, 이 정도까지 왔으면 뭔들.
그리고 이쪽은 알아서 ddns 설정까지 되기 때문에, 최소한 지금 내가 하려던 시도들과는 다르게 cname을 타고타고 가는 일은 없을 것이다.
물론 이쪽 네임 서버가 빠를지는 절대 장담할 수 없다..
한 홉을 건너서 ping을 날려볼 때, 시간이 확실히 늘어나는 것이 확인됐기에, 개인적으로 도메인끼리 연결되는 것이 탐탁치 않기도 하다.
클라우드플레어로 dns 등록
무료로 도메인을 케어해주는 곳으로 가서 cname을 쓰는 것도 방법이다.
사진은 cloudflare인데, 기본적으로 위의 서비스를 제공해준다.
오오.. 설마 해주나..?
뭔가 복합한 것들이 많다.
일단 클플의 dns 서버를 내 도메인에 대한 권한 있는 서버로 설정하는 과정이 필요하다.
이 사이트에서 내 도메인을 담당해주는 서버에 대한 정보를 찾을 수 있다.
https://lookup.icann.org/en/lookup 들어가서 확인하면 대충 나온다.
그래서 내 도메인의 부모를 확인할 수 있다.
그러나.. 큐냅 클라우드 서버는 마음대로 네임서버를 등록하지 못하게 막는 듯하다.
잘보니까, 이건 이전을 막는 거지 네임 서버 변경을 막는 건 아닐 수도 있다.
그러나 결국 dns 할당자에게 클플의 네임서버를 추가해달라는 요청을 할 수 있어야 하는데 그게 현재 불가능한 상태이다.
무료 도메인에 대해서는 관리를 안 해준다는 이야기도 있다.[^7]
... 결국 가비아에서 도메인을 구매하기로 결정했다.
앞으로 계속 쓸 거 생각하고 그냥 하나 얻는 것도 나쁘지 않겠다 싶었다.
그냥 디지털 주소 난민 하면서 매년 500원? 나쁘지 않지..
이름하야 zerotay.xyz
싼마이 느낌 나서 맘에 들었다 ㅋㅋ
이제 이 놈을 클라우드 플레어에 두고 본격적으로 관리해보겠다.[^8]
가비아 싫어하는 사람이 있던데, 일단 툴이 두 개가 있고 이 둘이 설정할 수 있는 게 묘하게 다르다.
엄청 불편한 것 같다.
나는 궁극적으로 ddns가 되면서 서브도메인이 가능한 환경을 구성하는 것이 목표다.
이를 위해서는 모든 서브도메인과 루트 도메인을 통한 요청이 일단 나스로 들어오게 해야 한다.
처음에는 이런 식으로 하고 진행해야 하는 건 줄 알았다.
그러나 도메인을 산 이후에 그냥 바로 클라우드플레어에서 관리를 시작하면 되는 거였다..
클플에서 제공하는 네임서버를 가비아 쪽에 등록하면 된다.
그러나.. 왜인지 등록이 실패한다.
아까 처음에는 이유도 없이 실패해서 다시 시도하니 이번에는 네임서버가 동일해서 실패랜다.
어떤 문제인지는 구체적으로 모르겠다.
다만 당장은 클라우드 플레어쪽에서 진행하는 검증도 확인해봐야 할 것 같다.
여차하면 월요일에 연락을 해봐야할 수도 있겠다.
아.. 이거 돈 날린 느낌도 살짝 드는데 ㅋㅋ
다음 날 보니까 활성화됐다.
CloudFlare to NAS
엥! 시간이 너무 오래 걸리는 이슈가 발생한다.
그냥 도메인을 입력했을 때는 정상적으로 들어가는 것을 보니, 클플 측 네임서버가 주소를 가져오는데 시간이 오래 걸리는 것이 아닐까 한다.
이건 조금 더 지켜봐야 할 것으로 보인다.
근데 그거랑 별개로 la까지 트래픽이 가야한단 건 꽤 지연이 발생할 것으로 들리는데..
큐냅이 사용하는 도메인 네임 서버의 위치와 가까운 곳으로 선정된 게 맞긴 한 건가?
분석 페이지를 들어와보니 어떤 곳에서 쿼리가 이뤄지는지 확인해볼 수 있었다.
음. dns 모니터링할 때 매우 유용할 것 같다.
혹시 ssl 문제일까?
curl을 통해 계속 요청을 날려보니, ssl 인증서 문제가 있다는 것이 확인됐다.
그래서 나스에 아예 내 도메인으로 값을 바꿔넣어 보았다.
그런데 아직 여전하다..
아무래도 발급 기관이 클라우드플레어라 신뢰할 수 있는 기관이 아니라고 판단하는 것인가?
여태 클라우드 플레어는 dns 서버로서만 연결하게 했는데, 프록시 역할을 하도록 해본다.
이 경우에는 플레어가 내 도메인에 대한 내용을 그대로 돌려주는 입장이 되니까 달라질 수도..
나스 방화벽이 문제였다
왜 계속 프록시로 설정을 바꾸면 나스가 반응을 안 하는가에 대한 원인을 찾은 것 같다.
QFirewall에서 막고 있었던 것으로 보인다.
원래는 GeoIP로 차단을 걸고 있었는데, 클플의 네임서버가 요청을 날릴 때 우리나라의 IP가 아니기에 생기는 이슈인 것이다.
이걸 풀고 싶지는 않은데.. 일단 해보자.
오케이.. 해결했다.
이제 트래픽 자체는 클플에서 내게로 주기 때문에, 클플에서 제공하는 ssl이 쓰인다.
아까 사용했던 클플의 ssl은 클플이 내 나스와 통신할 때 사용된다.
근데, 이럴 거면 굳이 클플 인증서로 바꿀 이유는 없었..으니 다시 렛츠인크립트로 바꿔주어야겠다.
서브도메인 매우 훌륭!
리버스 프록시
내부 리버스프록시 설정이 되는가 확인하고 있다.
보니까 httpd로 열려있었다.
내부에서는 리버스프록시가 잘 먹는다.
결국 서브도메인 dns가 안 되는 문제인 게 확실한 상황이라는 것이다.
그렇다면 나는 이를 어떻게 해결할 것인가?
일단, 큐냅의 리버스 프록시는 심각하게 불편하다.
고유한 도메인 이름을 지정했음에도 포트 번호를 원하는대로 열 수 없다.
또한 라우팅할 경로에 대해서는 패스를 지정할 수 없게 되어 있다.
이게 맞냐?
안 그래도 컨테이너 스테이션을 깔아두었으니, 컨테이너로 나만의 리버스 프록시를 만들어야겠다.
리버스 프록시 서버 선택
여러 가지 방안이 있다.
- nginx
- 내게는 가장 만만한 놈이긴 하다.
- 경량 웹서버 기능은 확실히 해줄 것으로 기대되나, 더 경량의 웹 서버가 있다면 그쪽으로 고려하고 싶다.
- nginx unit
- 내가 이전에 도전해보고 싶었던 웹서버.
- was 역할도 해줄 수 있고, 모든 설정을 json으로만 구성하면 된다.
- 멀티프로세스, 멀티스레딩 방식을 지원한다.
- 그러나 리소스는 어떠한지 비교가 필요할 것 같다.
- httpd
- httpd는 직접 해보지는 않았으나, 설정 난이도가 높다고 말하는 듯.
- 동시에 여러 개의 프로세스를 생성하는 방식이라 기본적으로 성능이 안 좋다고 알려져 있는 것으로 안다.
- traefik
- ha proxy
- lighttpd
고려할 게 참 많다.
어떻게 비교하냐..?
라고 나는 걱정할 필요가 그다지 없다고 생각한다.
직접 비교해보면 되니까.
각 서버 비교
일단 어떻게 비교할 건지를 구체화할 필요가 있다.
- 기본적인 메모리 사용량
- 트래픽이 많아졌을 때
- 처리 속도
- 메모리 사용량