Synology NAS 사용자라면 한때 유행했던(?) RSS를 활용하여 자동으로 다운로드하시는 분들이 많으셨을 거예요.
이 글은 과거의 방식보다는 좀 더 복잡하게 느껴질 수 있지만, 원리는 동일하고 단계가 조금 다르게 진행됩니다.
먼저 글을 쭉 훑어보고 판단하시면 될 것 같고 이 글로 인해 발생하는 문제의 책임은 본인에게 있습니다.
이 글에서 저는 "목적어"는 빠진 내용을 작성할 예정이며 스무고개 하듯이 진행하셔야 할 수도 있습니다.
시작하기에 앞서 이 방식은 매달 3.5$의 비용이 발생합니다.
믿을 수 있는 지인들끼리 한 서버를 공유하든 여러분의 자유입니다. 읽어보고 판단하시면 됩니다.
목적
Synology NAS의 Download Station에서 RSS를 통해 원하는 콘텐츠를 자동으로 다운로드하게 시키는 것입니다.
국내 인터넷 환경이 사이트 차단(Warning 사이트로 이동하는...)되는 경우가 많기 때문에 AWS 클라우드 서비스로 해외 Region VM을 하
나 생성하고 우회하도록 하는 방식입니다.
우회하는 방식은 다양하지만 제 환경에서는 이 방식이 가장 저렴하기 적용했습니다.
torrssen2라는 좋은 프로그램을 배포하고 있는 분이 계신데... 저는 저렴한 제품군이라 도커가 설치 안 되는 버전이기 때문에 스킵했습니다.
지금 이 글은 인텔 CPU를 사용하지 않는 저렴이 Synology 제품군을 사용하는 (Docker 활용이 불가능한) 분들에게 추천드립니다.
키워드
다음 키워드와 관련된 내용이 포함됩니다.
- Synology NAS, Download Station
- 토렌트
- RSS
- AWS, 클라우드
- 프록시
- node js
생소한 용어가 있을 수 있습니다. 편하게 스크롤 하면서 읽어주세요.
진행과정
전체적인 과정은 다음과 같습니다.
- RSS를 제공하는 토렌트 사이트 찾기
- AWS lightsail 인스턴스 생성
- Proxy 기능을 할 소스 배포
- Synology NAS Download Station에서 RSS 설정
1. RSS를 제공하는 토렌트 사이트 찾기
이전의 방식은 일반 토렌트 사이트에서 RSS 형식으로 변환해주는 php소스를 내 NAS 올려놓고 다운받는 방식이었습니다. 사이트에 부하를 많이 주는 방식이고 운영자가 소스를 변경할 경우 php 소스를 수정해야 하는데 개발자가 아닌 이상 일반인은 접근하기 힘들 거에요.
그래서 좀 더 범용적이고 구조적으로 안정적인 방법으로 접근하기 위해 RSS를 사이트 자체적으로 제공하는 곳을 찾아서 진행하였습니다.
물론 개인적으로 파싱한 다음 RSS를 직접 생성하셔도 됩니다.
현재는 토렌XX 에서 RSS를 제공하고 있고 여기도 막히면 또 그때 가서 생각해보려고 합니다.
XX는 아래 이미지가 뭔지 생각해보시면 될 듯..
2. AWS lightsail 인스턴스 생성
AWS는 Amazon Web Service의 약자로 클라우드 서비스를 제공하는 대표적인 회사입니다. 여러분이 아시는 아마존닷컴의 클라우드 컴퓨팅 사업부에서 운영하는 서비스입니다.
쉽게 말해서 "내 컴퓨터 말고 돈내고 어딘가에 있는 서버를 쓰겠다" 입니다. 서버라고 해서 대단한 건 아니고 저사양, 저비용 가상 서버입니다.
여기서 매달 3.5 달러의 비용이 발생합니다.
AWS Lightsail을 활용하는 이유는 가장 저렴하고 비용관리가 편리하기 때문엡니다.
저는 일본 리전에서 서버 생성을 추천해 드립니다. (해외 중에서 응답속도가 비교적 빠른 이유로)
토렌트 사이트가 차단당하는 것은 인터넷 회선 제공자 단계에서 차단당하기 때문에 해외에 서버를 활용하는 것이고 개념상 프록시 역학을 하게 됩니다.
이해하기 쉽게 그림으로 도식화 해봤습니다.
https://lightsail.aws.amazon.com
가입 후 메인화면을 접속부터 시작하겠습니다.
가입 후 로그인 시 2단계 인증 활성화하실 것을 권장합니다.
(타 사이트와 같은 아이디 패스워드를 쓰다가 해킹당한 후 누군가가 비싼 인스턴스를 생성하여 코인 채굴 돌리는 불상사가 벌어질 수 있습니다.)
처음엔 생성된 인스턴스가 없을 거예요.
인스턴스 생성을 눌러줍니다.
리전을 도쿄로 선택합니다.
OS는 리눅스 중 배포판은 Ubuntu로 하겠습니다.
가장 저렴한 플랜을 선택합니다.
인스턴스 이름을 지정해주고 인스턴스 생성을 눌러줍니다.
잠시 대기 중이다가 실행중으로 변경됩니다.
아직은 고정 IP가 없기 때문에 할당해줍니다. 관리 메뉴로 들어가서 네트워킹 탭으로 갑니다.
고정 IP 생성을 눌러 줍니다.
이름을 지정해주고 생성해줍니다.
외부에서 접속 가능한 IP가 생성되었습니다.
추후 인스턴스를 삭제할 때 고정 IP도 반드시 삭제해야 합니다. 할당되지 않은 고정 IP는 과금됩니다.
접속은 편의상 사이트에서 제공하는 콘솔로 진행하겠습니다. 홈 화면으로 돌아와서 콘솔 모양의 아이콘을 클릭합니다.
콘솔로 접속이 됩니다.
깔려있는 기본 패키지를 최신 버전으로 업데이트해 줍니다.
아래 명령어를 실행해주세요. 안 해도 상관없습니다만 일반적으로 리눅스는 서버 설치 또는 인스턴스 생성 후 기본적으로 진행하는 작업이 있습니다.
$ sudo apt update && sudo apt upgrade -y
설치가 끝나면 서버 시간대를 서울로 변경해줍니다.
# 시간 확인
$ date
# 기본 설정은 UTC 기준시로 되어있습니다.
# 시간대 서울로 변경
$ sudo timedatectl set-timezone Asia/Seoul
# 시간 재확인
$ date
재부팅해줍니다.
$ sudo reboot
3. Proxy 기능을 할 소스 배포
여기서부터는 생성된 서버에 프록시 역할을 할 프로그램을 넣고 잘 돌아가는지 테스트해 볼 단계입니다.
node js + express 조합으로 프록시 역할을 할 API 서버라고 보시면 될 것 같고 뭔소린지 모르겠다 하시면 그냥 어디로 우회하는 기능을 준비해놓는다 정도로 이해하시면 될 것 같습니다.
우선 nodejs npm 패키지 설치가 필요합니다.
공식사이트에서 제공하는 설치법 중 가장 쉬운 패키지 설치 방식
https://github.com/nodesource/distributions/blob/master/README.md#debinstall
장기 지원 버전으로 설치
# 차례대로 명령어 실행
$ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
$ sudo apt-get install -y nodejs
nodejs와 npm 버전 확인
설치가 잘 되었네요.
이제 proxy 역할을 할 소스를 받습니다.
# 현재 경로 확인
$ pwd
/home/ubuntu
# 소스 다운로드
$ git clone https://github.com/angkk2u/proxy_url.git
# 소스 받아졌는지 확인
$ ls -al
# proxy_url 디렉토리가 있는지 확인
# 받은 소스의 디렉토리로 이동
$ cd proxy_url
# npm 으로 의존성 패키지 설치
$ npm install
# 웹 서비스 실행
$ node bin/www
# 이렇게 실행해두고 창을 닫지마세요.
# 잘 동작하는지 테스트 후 pm2 패키지를 설치한 후 닫을 거에요.
# 아래쪽으로 계속 작업
방화벽에 3000포트로 접속할 수 있도록 추가해줍니다. 브라우저로 돌아가서 AWS Lightsail 사이트에서 관리로 들어갑니다.
네트워킹 탭에서 방화벽의 3000 포트를 추가합니다.
테스트 및 PM2 설치
지금까지 소스를 받아서 작업한 내용은 어떤 특정한 역할을 하는 웹 서비스를 생성한 작업입니다.
그 "역할" 이라는 것이 내가 원하는 주소를 일본 서버에서 읽어서 나에게 전달해줘 가 됩니다.
내가 국내 망에서 토렌트 사이트를 호출하면 차단당하니까요.
브라우저에서 http://35.74.211.133:3000 를 접속해봅니다.
저는 고정 아이피로 35.74.211.133을 할당받았습니다. 각자 받은 아이피에 맞게 수정해주세요.
(이 글을 볼 시점엔 저 아이피와 인스턴스는 사라지고 없을 거에요.)
Express 기본 페이지가 호출된다면 일단 서비스는 정상적으로 구동 된 것입니다.
http://[ip주소로변경]:3000/proxy/xml?protocol=https&domain=blog.oriang.net&path=rss
그리고 RSS 서비스 호출을 테스트해 봅니다. (제 블로그의 RSS로 테스트하였습니다.)
여기까지 보이시면 RSS 프록시 기능도 잘 동작하네요.
이제 서버를 백그라운드에서 계속 구동되도록 작업을 해줍니다.
pm2 패키지를 설치할 텐데요. pm2는 백그라운드 구동뿐만 아니라 node가 죽어도 살려주는 역할도 하게 됩니다.
# pm2 패키지 설치
$ sudo npm install pm2 -g
# pm2가 잘 설치되었는지 확인
$ pm2 -v
pm2에 프록시 웹 서비스를 등록해줍니다. 저와 동일하게 작업하셨다면 경로 또한 동일할 거에요.
$ pm2 start /home/ubuntu/proxy_url/bin/www
pm2에 프록시 웹 서비스를 등록해줍니다. 저와 동일하게 작업하셨다면 경로 또한 동일할 거에요.
$ pm2 list
pm2 모니터링 명령어는
$ pm2 monit
이제 실제 토렌트 사이트로 테스트해 봅니다.
토렌트 사이트의 RSS 주소가 https://torrentxxx.net/rss/ft/list 라고 가정하겠습니다.
위 주소를 해체하여 각각 조립하듯이 세팅하여 호출할 것입니다.
(추후에 다른 사이트를 활용하기 위해 좀 더 범용적으로 만들기 위해 쪼개서 사용하도록 작업하였습니다.)
우리가 지금까지 세팅한 서버 주소는 http://35.74.211.133:3000/proxy/xml 입니다.
저 주소 뒤에 어떤 걸 붙이느냐에 따라 목적지에서 가져올 데이터가 달라집니다.
주소로 조립할 파라미터 명은 protocol, domain, path가 있습니다.
- protocol : http 또는 https
- domain : 토렌트 사이트의 도메인 (torrentxxx.net)
- path : 토렌트 사이트의 도메인을 제외한 슬러시(/) 이후 오른쪽 값 (rss/ft/list)
이제 일본에 있는 내 서버에 시켜볼 차례입니다.
http://35.74.211.133:3000/proxy/xml?protocol=https&domain=torrentxxx.net&path=rss/ft/list
파란색은 파라미터 명으로 미리 정해놓은 이름입니다.
초록색은 파라미터에 해당하는 값입니다. 변경해주는 값입니다.
빨간색 ?는 파라미터=값 형태의 전달하는 정보를 시작하는 구분자로 생각하시면 됩니다.
빨간색 &는 파라미터=값 을 구분 지어주는 기호입니다.
호출이 잘 되면 이제 자동으로 다운로드를 시켜볼 단계로 넘어갑니다.
저 URL은 국내 TV RSS인데 한번에 50개 호출되고 있더라고요. 50개 이상이 갑자기 등록될 경우 내가 원하는 키워드가 다운로드되기 전에 최신리스트에서 넘어갈 수도 있습니다.
정확한 키워드가 있는 경우 그 키워드를 찜 한 뒤 생성된 그 URL을 활용하여 Download Station RSS에 등록해주면 좋습니다.
제가 예전에 세팅할 당시엔 50개가 아니었던 것 같은데..
어느 정도 살펴보니 그냥 이 주소로 해도 충분할 것 같습니다.
4. Synology NAS Download Station에서 RSS 설정
Synology DSM으로 접속한 뒤 Download Station 에서 RSS 설정을 해줍니다.
실제로 자동으로 다운로드를 시켜볼 차례입니다.
추가된 이후에 이름을 편집해서 변경할 수 있고 RSS Feeds 란에 항목들이 떠야 정상입니다.
키워드를 입력하여 일치하는 것만 다운로드 되도록 합니다.
다운로드 필터 탭으로 이동한 뒤 추가 버튼을 누르면 자동으로 다운로드 할 조건을 입력할 수 있습니다.
영상소스가 720p 인 것만 받기 위해 정규식을 사용하여 구문 분석을 체크하고
"키워드" "720" 만 수정하여 사용하세요.
.*(키워드).*(720).*
두 개 이상 조합 시 아래 "키워드1" "키워드2" "720"만 수정하여 사용하세요.
.*(키워드1).*(키워드2).*(720).*
정규식에 지원하는 문법 안내가 공식 사이트에 없네요. 안되는 문법이 있어서 일반적인 정규표현식을 생각하고 막 넣으면 동작 안 하더라구요.
Lookaround, Character classes 정규표현식 패턴 테스트에서 되는 기능들이 일부 안돼서 정교한것 보단 잘못 받아지더라도 좀 더 포괄적인 표현식을 쓰는 것이 좋을 것 같습니다.
정리
이렇게 국내에서 막혀서 접속 못 하는 토렌트 사이트 RSS를 해외 서버로 우회하여 자동으로 다운로드하도록 적용해보았습니다.
각 단계별로 선택지가 더 많이 있습니다마는
- 일단 저의 시놀로지는 도커가 안된다. (가장 큰 제약)
- 도커가 안되니 시놀에서 차단 사이트 우회를 직접 하지 못한다.
NAS에서 직접 도커를 못쓰는 상태라면 이 방식이 가장 저렴하고 안정적이라 생각됩니다.
아래 추가 사항은 따로 검색하셔서 작업해두시면 좋습니다.
추가. 토렌트 다운로드 완료 시 다운로드 작업 삭제
추가. 토렌트 다운로드 완료 시 알림
긴 글 읽어주셔서 감사합니다.