Dev. fenslett

Docker를 이용하여 Transmission / OpenVPN 설치 (CentOS) (수정) 본문

알아두면 좋은 글들/C.S. 정보

Docker를 이용하여 Transmission / OpenVPN 설치 (CentOS) (수정)

fenslett 2019.03.08 04:21


 본래에는 Transmission에 ExpressVPN을 결합하여 토렌트를 사용하고 있었다.

그런데 위 방법의 문제점은 파일을 공유해야 할 경우, 외부에서 접속할 방법이 없다는 게 문제였다. 리눅스 전체를 VPN에 연결했기 때문에 Split tunneling을 구현해야 하는데, 프로세스 별로 가능한 지 의문이었다. 분명 찾아보면 방법은 있겠지만, 가령 IP Alias라든가, 찾기가 너무 어려웠다.


 그래서 도입한 방법은.... 아예 Transmission을 컨테이너로 바꿔버리는 것. 바로 Docker를 이용하는 방법이었다.

최신 트렌드에 부합하기도 하고 혹시 더 고사양의 저전력 CPU를 구하게 되면 바로 이식이 가능하니 지금 상황에서는 아주 적격이었다.


 Docker Hub에서 여러 후보를 찾아보았는데, 발견한 것이 Haugene/transmission-openvpn(링크) 였다. 



 1. Docker 설치

 기본적으로 CentOS 기반으로 설치할텐데, 공식 사이트(링크)를 참조하거나 아래 명령어를 입력하면 된다.


1) 기존 docker 삭제 (옵션)

 $ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2) Repository 설정

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager \
    --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3) Docker-CE 설치

$ sudo yum install docker-ce docker-ce-cli containerd.io



 2. Docker-compose 설치

  docker를 실행할 때 사실 docker run 명령어를 사용해도 되지만, docker-compose는 세팅값을 미리 YAML 파일 형식으로 미리 지정하여 저장한 후, 이를 실행할 수 있기 때문에 docker-compose를 사용하는 것을 권장하는 편이다.


1) docker compose의 최신 버전(1.23.2) 다운

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" \
   -o /usr/local/bin/docker-compose

2) 실행 권한 부여

$ sudo chmod +x /usr/local/bin/docker-compose

 

 3. VPN 설정 파일 다운/수정

  수동으로 vpn을 설정하기 때문에 ovpn파일을 다운받아야 하는데, 이 곳(링크)에 들어가면 된다.


1) ovpn 파일 다운로드


 1. Username과 Password는 해당 파일을 사용하여 접속할 때 필요한 정보이니 따로 작성하거나 복사를 해둔다.

 2. 원하는 지역을 선택하여 다운받는다.

 3. VPN을 사용할 컴퓨터(서버)로 전송한다. 


2) ovpn 파일 수정

$ vi ovpn파일.ovpn
cipher AES-256-CBC
keysize 256
auth SHA512
sndbuf 524288
rcvbuf 524288
auth-user-pass /config/openvpn-credentials.txt

  26번째 줄, auth-user-pass를 위와 같이 수정한다.


 4. Docker-compose.yml 설정

  docker-compose 방식을 사용하게 된 궁극적인 이유는 대부분의 개발자가 관련 명령어를 전부 정리해서 적어두었기 때문인데, 이 repo도 동일했다.


1) docker-compose.yml 다운로드

$ wget https://raw.githubusercontent.com/haugene/docker-transmission-openvpn/master/docker-compose.yml

2) docker-compose.yml 수정

$ vi docker-compose.yml

version: '2'
services:
 transmission:
  image: haugene/transmission-openvpn
  cap_add:
    - NET_ADMIN
  devices:
    - /dev/net/tun
  restart: always
  ports:
    - "9091:9091"
    - "8888:8888"
  dns:
    - 8.8.8.8
    - 8.8.4.4
  volumes:
    - /etc/localtime:/etc/localtime:ro
    - /your/storage/path/:/data
  environment:
    - OPENVPN_PROVIDER=PIA
    - OPENVPN_USERNAME=username
    - OPENVPN_PASSWORD=password
    - OPENVPN_OPTS=--inactive 3600 --ping 10 --ping-exit 60
    - LOCAL_NETWORK=192.168.0.0/24
 proxy:
  image: haugene/transmission-openvpn-proxy
  links:
    - transmission
  ports:
    - 8080:8080
  volumes:
    - /etc/localtime:/etc/localtime:ro

 rss:
  image: haugene/transmission-rss
  links:
    - transmission
  environment:
    - RSS_URL=http://.../xxxxx.rss

   docker-compose.yml 파일을 열게 되면 여러 옵션이 존재한다. 이 때 수정할 부분은 크게 많지 않다.

 바인딩할 Volume 부분과 Transmission Web에 연결할 계정명, 암호 등이 있는데 자세한 옵션은 이 곳(링크)을 참조하면 된다.

$ vi docker-compose.yml

version: '2'
services:
 transmission:
  image: haugene/transmission-openvpn
  cap_add:
    - NET_ADMIN
  devices:
    - /dev/net/tun
  restart: always
  ports:
    - "9091:9091"
    - "8888:8888"
  dns:
    - 8.8.8.8
    - 8.8.4.4
  volumes:
    - *.ovpn 위치:/etc/openvpn/custom/default.ovpn
    - /etc/localtime:/etc/localtime:ro
    - Transmission이 저장될 위치:/data
  environment:
    - OPENVPN_PROVIDER=CUSTOM
    - OPENVPN_USERNAME=ExpressVPN 계정명
    - OPENVPN_PASSWORD=ExpressVPN 패스워드
    - OPENVPN_OPTS=--inactive 3600 --ping 10 --ping-exit 60
    - LOCAL_NETWORK=192.168.0.0/24
    - PUID=Transmission을 실행할 계정의 UID / 없으면 root로 설정 / 사용자 추가를 권장함
    - PGID=Transmission을 실행할 계정의 UID / 없으면 root로 설정 / 사용자 추가를 권장함
    - TRANSMISSION_WEB_HOME=Transmission이 저장될 위치/web/ui
    - TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=true
    - TRANSMISSION_RPC_HOST_WHITELIST="127.0.0.1,192.168.*.*"
    - TRANSMISSION_RPC_HOST_WHITELIST_ENABLED=true
    - TRANSMISSION_RPC_PASSWORD=Transmission 접속 시 패스워드
    - TRANSMISSION_RPC_USERNAME=Transmission 접속 계정
 proxy:
  image: haugene/transmission-openvpn-proxy
  links:
    - transmission
  ports:
    - 8080:8080
  volumes:
    - /etc/localtime:/etc/localtime:ro

  이 때, /data/completed나 /data/incompleted, /data/watch를 별도로 바인딩하지 않게 되면 Transmission이 설치될 위치 내에 저장이 된다.



 5. Docker-compose 실행

$ sudo docker-compose up

  관련 컨테이너를 받고 실행하게 되는데, 백그라운드에 실행하지 않았으므로 아래와 비슷한 메시지가 뜨면 성공한 것이다.


STARTING TRANSMISSION
NO PORT UPDATER FOR THIS PROVIDER
Transmission startup script complete.
Thu Dec 27 10:40:28 2018 /sbin/ip route add 31.204.154.122/32 via 172.18.0.1
Thu Dec 27 10:40:28 2018 /sbin/ip route add 0.0.0.0/1 via 10.35.0.121
Thu Dec 27 10:40:28 2018 /sbin/ip route add 128.0.0.0/1 via 10.35.0.121
Thu Dec 27 10:40:28 2018 /sbin/ip route add 10.35.0.1/32 via 10.35.0.121
Thu Dec 27 10:40:28 2018 Initialization Sequence Completed


 이 때, 백그라운드로 실행할 경우에는 -d 옵션을 붙이면 된다.

$ sudo docker-compose up -d




6. 테스트


1) 토렌트 Web UI 접속(브라우저에서 아래 주소 접속)

서버 ip:8080

2) 서버 IP 확인


 1. 컨테이너 ID 확인(transmission-openvpn의 Container ID)

$ docker container ls
CONTAINER ID        IMAGE                                COMMAND
aaaaaaaaaaaa        haugene/transmission-openvpn-proxy   "nginx -g 'daemon of…"
ffffffffffff        haugene/transmission-openvpn         "dumb-init /etc/open…"

 2. IP 체크 사이트에 접속하도록 명령

$ docker exec <CONTAINER ID> curl ifconfig.me



0 Comments
댓글쓰기 폼