시놀로지 나스에서 HAProxy 패키지를 사용하여 도메인으로 내부 여러 서버 또는 서비스를 쉽게 접속하는 방법입니다.

이 팁을 적용하면 아래와 같은 방식으로 나스의 각종 서비스에 접속할 수 있습니다.

https://photo.mydomain.com -> 포토스테이션

https://file.mydomain.com -> 파일스테이션

https://note.mydomain.com -> 노트스테이션

1. 지원 모델 확인

HAProxy 패키지를 설치할 수 있는 Architectures는 아래와 같습니다.

braswell armada38x x86 bromolow cedarview avoton 88f628x alpine alpine4k armada370 armada375 armadaxp comcerto2k evansport ppc853x qoriq monaco

위 아키텍처에 맞는 모델명은 아래 사이트에서 확인 바랍니다.

https://github.com/SynoCommunity/spksrc/wiki/Architecture-per-Synology-model

https://www.synology.com/en-us/knowledgebase/DSM/tutorial/General/What_kind_of_CPU_does_my_NAS_have

2. HAProxy 패키지 설치

패키지 센터를 실행한 후 “설정” 버튼을 눌러 “패키지 소스” 탭에서 아래 그림과 같이 소스를 추가합니다.

이름: SynoCommunity

위치: http://packages.synocommunity.com/ (DSM 버전에 따라 마지막 /는 없어야 될 수도 있음)

“일반” 탭을 선택한 후 아래 화면과 같이 “신뢰 수준“을 “모든 게시자“로 선택

왼쪽에서 “커뮤니티” 메뉴를 선택하고 오른쪽에서 “Python” 패키지(Python3는 안됨)를 설치

HAProxy 패키지 설치

이제 패키지 센터의 왼쪽 메뉴에서 “설치됨“을 선택하고 위에서 설치한 PythonHAProxy 패키지를 실행합니다.

3. HAProxy 설정

Frontends 설정

HAProxy Frontends 설정

Binds 설정을 보면 기본 값으로 http는  5080, https는 5443 포트를 사용합니다.

  • 공유기를 사용한다면 외부 80 포트를 나스의 5080으로, 외부 443 포트를 나스의 5443 포트로 포트포워딩합니다.
  • 공유기없이 바로 연결된 상태라면 Binds부분의 http는 80으로, https는 443으로 설정하면 됩니다.

다음은 https로 접속하기 위해서 SSL 인증서를 적용하기 위한 과정이며 http만 사용한다면 이 과정은 무시해도 됩니다.

아래 글에서 “HAProxy 설정에 인증서 적용” 부분 참고

(DSM6.x의 DSM에서 자동 생성한 SSL 인증서 적용은 저도 해보지 않아서 모르겠습니다)

Synology NAS DSM 5.x에서 Lets’ Encrypt SSL 인증서 발급/자동 갱신

Backends 설정

아래 화면과 같이 Backends에 원하는 내부 서비스를 추가합니다.

HAProxy Backends 설정

서비스 Name Servers Options
파일스테이션 file file localhost:7000 check
노트스테이션 note note localhost:5001 ssl check verify none acl is_root path -i /,reqrep ^([^\ ]*\ /)(.*) \1note\2 if is_root
포토스테이션 photo photo localhost:80 check acl is_root path -i /,reqrep ^([^\ ]*\ /)(.*) \1photo\2 if is_root

위 설정은(서브도메인은 이후 설명될 Associations에서 결정됨)

  • 파일스테이션의 경우 전용포트(7000)를 사용하였습니다. 전용포트를 사용하면 뒤에 별칭 /file 없이 사용할 수 있습니다.
  • 노트스테이션의 경우 DSM의 HTTPS 포트 5001과 별칭(note)를 사용한 접속입니다. https://note.mydomain.com으로 접속하면 자동으로 https://note.mydomain.com/note로 이동되어 접속됩니다. 만약 HTTPS 서비스를 사용하지 않고 5000번 포트를 사용해서 접속하려면 Servers에서 note localhost:5000으로 설정하고, 접속할 때 꼭 https://note.mydomain.com/note 처럼 별칭(/note)까지 직접입력해야 접속 가능합니다.
  • 포토스테이션의 경우 기본 웹서비스 80포트와 별칭(photo)을 사용한 접속입니다. https://photo.mydomain.com으로 접속하면 자동으로 https://photo.mydomain.com/photo로 자동 이동되어 접속됩니다. 파일스테이션처럼 별칭을 사용하지 않으려면 포토스테이션 설정에서 전용포트를 사용하도록 설정하고, Servers 설정에 해당 포트를 사용하면 됩니다.

위 세 가지 형식 중 본인이 원하는 형식으로 활용하면 됩니다.

아래 화면은 위 설정대로 동작시키기 위한 응용프로그램포털과 DSM 설정입니다.

DSM 응용프로그램 포털 설정

DSM 설정

Associations 설정

아래 화면과 같이 Associations에 Frontend와 Backend가 서로 연결되도록 설정합니다.

HAProxy Associations 설정

서비스 Frontend Backend Condition
파일스테이션 https file if { hdr_beg(Host) -i file. }
노트스테이션 https note if { hdr_beg(Host) -i note. }
포토스테이션 https photo if { hdr_beg(Host) -i photo. }

위 설정은

  • 파일스테이션의 경우 Host가 “file.”으로 시작(file.mydomain.com처럼)하면 Frontend 중 https와 Backend 중 file을 서로 연결합니다.
  • 나머지 설정도 동일합니다. Host를 시작하는 문자가 아닌 전체로 비교하려면 hdr_beg(Host)대신 hdr(Host)를 사용하면 됩니다.

설정 사항 적용

설정된 사항은 Configuration 메뉴에서 “Write configuration” 버튼을 눌러주면 적용됩니다.

HAProxy 설정 적용

4. 동작 확인

웹브라우저에서 아래와 같이 접속합니다.

https://photo.mydomain.com -> 포토스테이션

https://file.mydomain.com -> 파일스테이션

https://note.mydomain.com -> 노트스테이션

모바일 앱에서도 설정한 도메인으로 접속하면 됩니다.(https의 경우 체크 필요)

HAProxy를 알려주신 하얀전쟁님께 감사드립니다^^

http://cafe.naver.com/synol/3138