(2020. 9. 9 추가)
한참 전에 작성해 두고 신경 안쓰고 있었던 글인데 간간이 참고하시는 분들이 계셔서 조금 업데이트 합니다.
docker-compose나 기타 옵션들에 대해 다소 무지할 때 작성한 글이기도 하구요.
수정내용은 따로 추가하지 않고, docker-compose.yml 부분을 직접 수정합니다.
또한, 부수적인 옵션은 제거하고 가급적 필요한 설정만 남깁니다.
-------------------------------------------------------------------
안녕하세요. 나스당에 오랜만에 들어와보네요.
혹시 관심 있는 분 계실까 해서 좀 쉽게 세팅해 보실 수 있도록 제가 쓰는 docker-compose.yml 내용을 공유해드립니다.
시놀로지 도커에서 NordVPN(OpenVPN) + Transmission + Privoxy(Web Proxy) 조합입니다.
다른 VPN이나 프록시도 방식엔 크게 차이는 없을 거라 생각합니다만, 많이들 쓰는 것 같은(?) Squid(Proxy)는 제가 세팅을 잘 못 해서인지 이상하게 잘 동작하지 않더군요.
굳이 프록시에 캐싱은 필요없을 것 같아서 별다른 설정 필요없이 심플하게 잘 동작하는 Privoxy로 선택했습니다.
그린터널은 오동작 할때가 종종 있는 것 같고, 국가 지정이나 보안 측면에서도 이게 낫겠죠.
암튼 이렇게 쓰는 장점은 하나의 vpn 접속을 여러개의 컨테이너가 공유할 수 있고, transmission-openvpn 처럼 묶여서 배포되는 컨테이너들이 생각보다 업데이트가 늦기 때문에 이렇게 하는게 각각 최신 업데이트를 적용할 수 있다는 정도겠네요.
그리고 전용 클라이언트를 이용하기 때문에 *.ovpn 파일을 따로 받아서 수정하고 하는 등의 작업이 필요없이 알아서 추천 서버로 연결해주는 건 매우 큰 장점이구요.
본론으로 들어가서, 아래는 docker-compose.yml 입니다.
version: "3"
services:
nordvpn:
image: azinchen/nordvpn:latest
container_name: nordvpn
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
network_mode: bridge # 별도 네트워크를 생성해도 되지만 bridge로 설정해도 잘 동작합니다.
ports:
- "9091:9091" # transmission web UI port
- "8118:8118" # privoxy port
environment:
- USER=username # 접속 ID
- PASS=password # 접속 PW
- COUNTRY=Japan # 접속 국가
- CATEGORY=P2P # 접속 서버 종류
- PROTOCOL=openvpn_udp # 필요할 경우 openvpn_tcp로 변경
- RANDOM_TOP=10 # 랜덤 상위 추천 서버 갯수
- RECREATE_VPN_CRON="5 */12 * * *" # 12시간마다 vpn 재접속(서버 변경)
- CHECK_CONNECTION_CRON="*/10 * * * *" # 10분마다 접속 확인
- CHECK_CONNECTION_URL="https://www.google.com" # 접속 확인용 url
- NETWORK=192.168.0.0/24 # 로컬 네트워크 대역
- OPENVPN_OPTS=inactive 3600 --ping 10 --ping-exit 60 --mute-re-play-warnings
restart: unless-stopped # 항상 켜져있길 원하면 always 도 좋습니다.
transmission:
image: linuxserver/transmission:latest
container_name: transmission
network_mode: "service:nordvpn" # 중요
environment:
- PUID=1026 # 권한 설정 오류를 피하기 위해서 시놀로지 DSM 기본 관리 계정의 PUDI/GUID를 넣어주거나
- PGID=100 # PUID=0 / GUID=0 으로 root 권한을 넣어줄 수 있지만, root 권한을 주는 것은 추천하지 않습니다.
- TZ=Asia/Seoul
- TRANSMISSION_WEB_HOME=/transmission-web-control/
- USER=username
- PASS=password
volumes: # /path/to/~ 부분을 원하는 경로로 지정
- /path/to/transmission/config:/config # 토렌트 앱 설정시 가장 부딪히기 쉬운 문제가 폴더 권한입니다.
- /path/to/downloads:/downloads # 위의 PUID/GUID 설정과 폴더 권한을 연계해서 잘 설정해주셔야 합니다.
- /path/to/transmission/watch:/watch # downloads. 폴더는 보통 'chmod -R 777 downloads' 해주는 것이 좋습니다.
restart: unless-stopped
privoxy:
image: vimagick/privoxy:latest
container_name: privoxy
network_mode: "service:nordvpn" # 중요
volumes: # 미리 해당 파일 생성. 일단 비어 있는 텍스트 형식 파일이면 됩니다. 필요한 설정은 나중에 추가 가능.
- /path/to/privoxy/user.action:/etc/privoxy/user.action
- /path/to/privoxy/user.filter:/etc/privoxy/user.filter
restart: unless-stopped
위 내용을 기본으로 변경할 것 하시고, 파일을 '/volume1/docker/nordvpn/docker-compose.yml'로 저장하셨다면 터미널에서('sudo -i'로 미리 루팅 후 진행)
docker-compose -f /volume1/docker/nordvpn/docker-compose.yml up -d
입력하시면 이미지 풀링부터 실행까지 알아서 다 진행됩니다.
(마운트 할 폴더들은 미리 생성)
옵션 등을 수정 후에도 위 커맨드로 재생성이 이루어집니다.
각 컨테이너 옵션에 대한 자세한 설명은 docker hub에서 확인해 주시구요..^^;
- NordVPN: https://hub.docker.com/r/azinchen/nordvpn
- Transmission: https://hub.docker.com/r/linuxserver/transmission
(트랜스미션 상세 옵션은 설치 후 config 폴더 내의 'settings.json' 변경)
- Privoxy: https://hub.docker.com/r/vimagick/privoxy
다른 컨테이너가 vpn을 공유하는 중요한 옵션은
network_mode: "service:nordvpn"
입니다.
그리고 주의할 점은 각각의 컨테이너에 포트를 지정하는 것이 아니라, vpn 컨테이너에 다른 서비스들이 사용할 포트를 지정해주는 겁니다.
이런 식으로 필요한 서비스를 더 추가할 수 있습니다.
만약 '/dev/net/tun'이 없다는 에러가 뜨면 OpenVPN 서버 패키지를 설치하거나 아래 사용자 스크립트를 생성해 부팅시 실행되도록 해주셔야 합니다.
# TUN.sh : 스케줄러 등록(부팅시) #!/bin/sh # Create the necessary file structure for /dev/net/tun if ( [ ! -c /dev/net/tun ] ); then if ( [ ! -d /dev/net ] ); then mkdir -m 755 /dev/net fi mknod /dev/net/tun c 10 200 fi # Load the tun module if not already loaded if ( !(lsmod | grep -q "^tun\s") ); then insmod /lib/modules/tun.ko fi
로컬 네트워크 대역을 알고 싶을 땐 아래 명령어로 확인 가능합니다.
ip route | awk '!/ (docker0|br-)/ && /src/ {print $1}'
여기까지 에러 없이 되셨으면 아마 큰 문제없이 사용 가능하리라 봅니다.
각 앱의 사용법은 다 아시리라 믿고 따로 설명 않겠습니다.
한 가지 마지막으로 골치아플 수 있는 부분은 vpn password에 특수문자가 들어가면 안된다는 겁니다.
이건 아마 OpenVPN 자체의 문제인 것 같은데요.
제 경우엔 암호를 아무리 쉽게 바꿔도 인증 실패가 떴었는데, 원인은 패스워드를 ' ' (따옴표)로 감싸서였습니다...;;;
해외 포럼을 보면 NordVPN은 user가 이메일 주소라서 @ 문자 때문에 인증 오류난다고 하는 글도 있습니다..
그럴땐 지원 채팅(영문)을 통해 vpn 접속 아이디를 이메일이 아닌 일반 아이디로 바꿀 수 있습니다.
저도 그렇게 바꾸긴 했는데 결과적으로 패스워드의 ' '가 최종 문제였기 때문에 아이디가 메일주소면 안되는지는 확인을 못했네요..ㅎㅎ;;
여기까지구요. 긴 내용 보느라 고생하셨습니다. ㅎㅎ;
저처럼 고생하시는 초보분들에게 작은 도움이나마 되면 좋겠네요~.^^
ERROR: Named volume "path to data:/config:rw" is used in service "transmission" but no declaration was found in the volumes section. root이며 원하는 경로 잡아줘도 계속 에러나는데 혹시 이 에러 보신적 있으신가요?
예를 들면 - /volume1/docker/transmission/config:/config 이런 식으로요.
폴더랑 기존 컨테이너 삭제하고 재생성해보시고 안되시면
docker-compose --build --force-recreate --renew-anon-volumes db
를 시도해보시면 어떨지...
volumes:
폴더명:
을 추가하는 방법도 있다고 하는 군요...
https://github.com/ClusterHQ/dvol/issues/67 젤 아래쪽 댓글 확인해보셔요.
좋은 정보 고맙습니다.
잘 정리되어서 이렇게 올라왔네요. 이거 참고해서 다시 한번 시도해 봐야겠네요. 감사합니다.
1. --mute-replay-warning 이 부분은 패킷 불안정(특히 wifi)으로 불필요한 로그가 많이 쌓일 때 사용하시면 되고 문제 없으면 굳이 사용 안하셔도 됩니다. MTU값 조정으로도 된다고는 하지만, haugene씨는 그건 권장하지 않는 것 같더군요.
ignore "auth-token" 이 부분도 역시 접속 기기 초과가 뜨면서 접속이 안되는 경우를 위한 옵션이라 문제없으면 사용하지 않으셔도 되구요.
2. 아마 결국 저는 패스워드에 ' '를 감싸서 문제가 되었던 것 같습니다. 엉뚱한 수고를 했군요.^^;
3. 다운로드 폴더는 여러 앱이 공유하는 경우가 많을테니 대부분 777로 주시는게 여러모로 문제가 안생기는 게 맞을 겁니다.
4. 마운트하는 폴더가 도커 폴더(docker/transmission) 외부에 있는 경우는 mount --make-shared를 미리 실행하셔야 하는게 맞을 겁니다. 그렇게 하고 도커에서 마운트할 때는 /volume1:/volume1:rshared 형식으로 뒤에 :rshared를 붙여야 하기도 하는데 볼륨이 다른 경우는 필요 없는가 보군요.
암튼 성공하셨다니 다행이네요 ^^
root@plama55:~# docker-compose -f /volume1/docker/nordvpn/docker-compose.yml up -d
ERROR: yaml.scanner.ScannerError: while scanning a simple key
in "/volume1/docker/nordvpn/docker-compose.yml", line 32, column 1
could not find expected ':'
in "/volume1/docker/nordvpn/docker-compose.yml", line 33, column 1
토렌트 다운이 안되는 원인은 대부분 권한 설정 오류가 많습니다. Transmission의 volumes에 설정해 둔 폴더들에 터미널(ssh)에서 sudo chmod -R 777 /volume1/'다운로드 폴더' 명령으로 전체 유저의 읽기/쓰기 권한을 할당하시거나, PUID / GUID 부분을 0으로 설정해서 Transmission 에 root 권한을 주는 방법등이 있습니다.
공유 폴더 설정에서 전체 유저에 권한을 주는 방법도 있을 수 있습니다.
그런데 Transmission에 root 권한을 주게 되면 다른 계정이 파일에 접근할 때 또 다른 권한 문제가 발생할 여지가 있기도 합니다.
저는 PUID=1026, GUID=100 (시놀 기본 관리 계정)으로 설정해두고 쓰고 있고, 필요에 따라 다른 서비스에도 같은 권한을 주고 실행합니다.
터미널에서 'id 계정명'을 실행하시면 USER ID 와 GROUP ID를 확인하실 수 있습니다.
어제 ssh로 루트상태(sudo -i) chmod -R 777 /volume1/'다운로드 폴더' 는 실행하였는데 안되더라구요.
오늘 말씀해주신 추가적인 부분 다시 해보겠습니다.
감사합니다!
근데 chmod 777 -R /volume1/폴더명/ 을 입력하면 원래 아무런 문구가 나오지 않는건가요? ^^;;
새로 정리해서 올려주신 내용으로도 해보았지만 파일은 올라가지만 역시나 다운은 진행이 되질 않네요.
포트로 9091과 1024를 열어두었습니다. 다운로드 폴더 하위폴더까지 적용했지만 다운이 되질 않네요 ㅠ
혹시 방화벽 문제 인지 확인 해봤는데 이 부분도 아닌거 같습니다.
chmod 명령은 에러가 없으면 결과를 보여주지 않습니다. 잘 적용됐는지는 ls -l 등으로 별도 확인하셔야 합니다.
1024 포트는 왜 열어두셨는지 모르겠네요.
개별 서비스의 로그를 확인하셔서 잘 작동되고 있는지를 확인해보셔야 할 것 같군요.
특히 nordvpn 서비스가 정상적으로 돌아가고 있는지요.
그보다는 서버에 잘 접속되어있는지만 확인하시면 됩니다.
vpn과 transmission을 따로 하는 설정이 어려우시면 haugene/transmission-openvpn 사용해 보세요.
( https://hub.docker.com/r/haugene/transmission-openvpn )
많이들 사용하는 컨테이너이고 업데이트도 꾸준하고 사용하기 좋습니다.
텍스트에디터로 yml만들때 space bar 사용하여 트리구조를 만들어야 하나보네요. 하나씩 해보고 있습니다 혹시 안되면 질문 올려 보겠습니다
와 성공했습니다 스페이스바로 트리를 만들어야 하는군요.
감사합니다
@saibi님 @千年魔王님
그런데 설치하고 작동해보면 다운까지 잘 됩니다. 그리고 나스를 재시작하면 "transmission not found"라는 에러가 뜹니다. 혹시 이런 적 있으신가요? restart: always 로 하면 멈추지만 않으면 재시작시 되긴 합니다.
-ash: docker-compose-f/volume1/docker/nordvpn/docker-compose.yml: No such file or directory