설치
[Torrent만 VPN 적용] haugene/transmission-openvpn 설치
본 장에서는 ExpressVPN을 이용한 방법으로 설명을 합니다. 설명이 부족한 부분은 아래 공식 홈페이지를 참고하세요.
공식홈페이지 : https://haugene.github.io/docker-transmission-openvpn/
Github : https://github.com/haugene/docker-transmission-openvpn
ExpressVPN이 아닌 다른 VPN을 이용하신다면 아래 링크를 참고하여 Yaml 문장을 수정해 주시면 됩니다.
- Supported Providers : https://haugene.github.io/docker-transmission-openvpn/supported-providers/
environment의 OPENVPN_PROVIDER 변수에 사용하시는 "Provider Name"의 "Config Value (OPENVPN_PROVIDER)" 값을 찾아 입력하시면 됩니다. - OpenVPN Config : https://github.com/haugene/vpn-configs-contrib
1) openvpn 디렉토리로 이동합니다.
2) 해당되는 VPN Provider 디렉토리로 이동합니다.
3) environment의 OPENVPN_CONFIG 변수에 원하시는 지역의 config 파일명을 입력합니다. (.ovpn은 생략 후 파일명만 입력 합니다.) - VPN 계정인증 : 각 VPN Provider마다 인증하는 방식이 다릅니다. VPN 제공사의 설명을 참고하세요.
먼저 볼륨을 Mapping할 디렉트로를 생성합니다. 이 디렉토리로 Torrent 파일을 올리고, 다운로드 경로가 설정 됩니다.
제 경우 "/volume2/Transmission" 이라는 디렉토리를 생성하고, 하위에 "config"와 "data" 디렉토리를 생성 합니다.
mkdir /volume2/Transmission
mkdir /volume2/Transmission/config
mkdir /volume2/Transmission/data
아래와 같이 "docker-compose.yml" 파일을 작성합니다.
version: '3.3'
services:
transmission-openvpn:
restart: always
cap_add:
- NET_ADMIN
volumes:
- '/volume2/Transmission/data/:/data' # incomplete, completed, torrentfile 디렉토리 볼륨입니다.
- '/volume2/Transmission/config/:/config' # json, log와 같이 config 파일이 있는 볼륨입니다.
environment:
- OPENVPN_PROVIDER=EXPRESSVPN # 사용하시는 VPN Provider 입니다. 위 본문을 참고하세요.
- OPENVPN_USERNAME=[설명1] # VPN Provider에서 요구하는 방식을 따르셔야 합니다.
- OPENVPN_PASSWORD=[설명1] # VPN Provider에서 요구하는 방식을 따르셔야 합니다.
- OPENVPN_CONFIG=my_expressvpn_south_korea_-_2_udp # 한국 서버를 예제로 합니다. .opvn은 생략하고 입력합니다.
- OPENVPN_OPTS=--inactive 3600 --ping 10 --ping-exit 60 # 킬스위치 기능입니다.
- LOCAL_NETWORK=192.168.1.0/24 # 사용하는 네트워크 대역대로 변경이 필요합니다. 예제는 192.168.1.*의 대역대를 가정했습니다.
- CREATE_TUN_DEVICE=true
- TZ=Asia/Seoul
- HEALTH_CHECK_HOST=google.com
- TRANSMISSION_WEB_UI=flood-for-transmission # 스킨 옵션 입니다. 가장 유명한 flood-for-transmission 스킨을 예제로 합니다.
- PUID=1026 #ssh에서 'id 계정명'으로 맞는 값을 찾아 입력
- PGID=100 #ssh에서 'id 계정명'으로 맞는 값을 찾아 입력
- TRANSMISSION_WATCH_DIR_ENABLED=true
- TRANSMISSION_WATCH_DIR=/data/torrentfile # 이 위치에 .torrent 파일을 넣으면 자동으로 다운로드가 시작되고 원본 파일은 .added로 변경 됩니다.
# 아래는 보안 옵션 입니다. Nginx Proxy Manager 접속 인증 같은 별도 접속 인증을 사용하신다면 생략을 권장 드립니다.
# 이유는 잦은 인증과정에서 브라우저 쿠키에 문제가 생겨 가끔 브라우저의 쿠키 초기화가 필요하기 때문입니다.
#- TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=true
#- TRANSMISSION_RPC_USERNAME=webgui_id
#- TRANSMISSION_RPC_PASSWORD=webgui_pw
#- TRANSMISSION_RPC_HOST_WHITELIST="127.0.0.1,192.168.1.*"
logging:
driver: json-file
options:
max-size: 10m
ports:
- '9091:9091'
image: haugene/transmission-openvpn
만일 VPN Provider가 mullvad 일때는 아래를 yaml에 추가해 줍니다.
sysctls:
- "net.ipv6.conf.all.disable_ipv6=0"
[주의] 다운로드 디렉토리는 위 예제와 같이 "/data" 하나만 볼륨으로 맵핑하셔야 합니다. "/data" 볼륨하나만 맵핑해도 아래의 3개의 하위 디렉토리가 자동으로 생성됩니다. 만일 "completed"와 "incomplete"를 따로 볼륨으로 맵핑하신다면, 다운로드 완료 시 "incomplete"에서 "completed"로 이동과정이 copy (완료 후 소스 delete)로 동작되고, copy 과정에서 transmission 랙이 발생 됩니다.
[설명1] ExpressVPN 계정코드
OPENVPN_USERNAME : ExpressVPN 사용자명
OPENVPN_PASSWORD : ExpressVPN 비밀번호
이 값은 ExpressVPN 아래와 같이 확인 할 수 있습니다.
[설명2] LOCAL_NETWORK : 사용하시는 네트워크 대역대를 입력 합니다. 여러개 일 경우 "," 여러개를 지정할 수 있습니다.
예제 : "192.168.1.0/24" (CIDR 값을 사용해야 합니다.)
Docker를 실행 합니다.
docker-compose up -d
Transmission이 사용하는 IP가 정상적으로 VPN을 통한 IP인지 확인하기 위해 도커쉘에 접속해 아래 명령을 입력합니다.
curl ifconfig.me
설치를 마치면 "/volume1/Transmission/data" 디렉토리가 아래와 같이 구성 됐음을 확인 할 수 있습니다.
"completed" : 다운로드가 끝난 파일이 옮겨지는 디렉토리 입니다.
"incomplete" : 다운로드가 진행 중인 파일이 있는 디렉토리 입니다.
"torrentfile" : Transmission이 Watch 중인 디렉토리로 ".torrent" 파일을 이 디렉토리로 위치 시 바로 다운로드가 시작 됩니다.
다운로드 후 목록에서 자동 삭제하고 텔레그램 봇으로 다운로드 완료 상태를 안내하기 위해 작성한 스크립트로 다른장에서 별도 설명 드리겠습니다.
설치가 완료되면 "IP:9091"로 접속 합니다.
보안 옵션 미적용시 관리 페이지의 외부 노출이 걱정될 경우 Nginx Proxy Manager의 Proxy Host를 통해
"Access List"에 인증정보를 넣어 접속시에 2차 인증 절차를 추가하실 수 있습니다.
[NAS 전체 VPN 적용] 시놀로지 NAS VPN 적용 방법
VPN 설정
시놀로지 NAS기준 ExpressVPN을 가정한 방법을 설명 합니다.
1. DSM에 접속해 "제어판 > 네트워크 > 네트워크 인터페이스"로 들어가 "생성"을 누릅니다.
2. "VPN 프로파일 생성"을 선택하고 OpenVPN 항목을 선택 합니다.
3.아래와 같이 값을 입력하고 .ovpen에 VPN 제공사에서 다운받은 원하시는 지역의 .opvn 파일을 업로드 합니다.
4. 아래와 같이 고급 설정 값을 선택해 줍니다.
5. "제어판 > 네트워크 > 네트워크 인터페이스"에 들어가보면 아래와 같이 VPN 프로파일이 생성됐음을 확인할 수 있으며 상단의 "연결"을 클릭합니다.
자동 재연결 설정
이제 킬스위치 (VPN이 끊어질 시 자동 재연결)을 설정할 차례 입니다.
아래 내용으로 "killswitch.sh" 파일을 생성하고, DSM의 작업스케줄러에서 "생성", "예약된 작업", "사용자 정의 스크립트"로 들어가서 아래의 "bash /경로값/killswitch.sh"를 입력해 줍니다. (주기는 5분 주기로 설정해 줍니다.)
#-------------------------------------------------------------------------------
# 네트워크 작동 여부 확인
#-------------------------------------------------------------------------------
ping -c 1 8.8.8.8
if [ "$?" == "0" ] ; then
echo "네트워크가 정상 작동중입니다." >> log.txt
else
echo "네트워크가 정상 작동하지 않습니다. VPN 재연결을 시도합니다." >> log.txt
if [[ -f /usr/syno/etc/synovpnclient/l2tp/l2tpclient.conf ]]; then
L2TP_CONFIG=$(cat /usr/syno/etc/synovpnclient/l2tp/l2tpclient.conf)
else
L2TP_CONFIG=""
fi
if [[ -f /usr/syno/etc/synovpnclient/openvpn/ovpnclient.conf ]]; then
OPENVPN_CONFIG=$(cat /usr/syno/etc/synovpnclient/openvpn/ovpnclient.conf)
else
OPENVPN_CONFIG=""
fi
if [[ -f /usr/syno/etc/synovpnclient/pptp/pptpclient.conf ]]; then
PPTP_CONFIG=$(cat /usr/syno/etc/synovpnclient/pptp/pptpclient.conf)
else
PPTP_CONFIG=""
fi
#-------------------------------------------------------------------------------
# 설정 파일 확인
#-------------------------------------------------------------------------------
# 설정 파일 연결
CONFIGS_ALL="$L2TP_CONFIG $OPENVPN_CONFIG $PPTP_CONFIG"
# VPN 프로필 개수 확인
CONFIGS_QTY=$(echo "$CONFIGS_ALL" | grep -e '\[l' -e '\[o' -e '\[p' | wc -l)
# VPN 프로필이 하나일 때만 작동하도록 하기
if [[ $CONFIGS_QTY -eq 1 ]]; then
echo "[I] 1개의 VPN 프로필이 있음. 계속 진행..."
elif [[ $CONFIGS_QTY -gt 1 ]]; then
echo "[E] $CONFIGS_QTY 개의 VPN 프로필이 있음. 이 스크립트는 1개의 VPN 프로필까지만 지원이 가능함. 종료..."
exit 1
else
echo "[W] VPN 프로필이 존재하지 않음. VPN 프로필 생성 필요. 종료..."
exit 1
fi
#-------------------------------------------------------------------------------
# 변수 설정
#-------------------------------------------------------------------------------
PROFILE_ID=$(echo $CONFIGS_ALL | cut -d "[" -f2 | cut -d "]" -f1)
PROFILE_NAME=$(echo "$CONFIGS_ALL" | grep -oP "conf_name=+\K\w+")
PROFILE_RECONNECT=$(echo "$CONFIGS_ALL" | grep -oP "reconnect=+\K\w+")
if [[ $(echo "$CONFIGS_ALL" | grep '\[l') ]]; then
PROFILE_PROTOCOL="l2tp"
elif [[ $(echo "$CONFIGS_ALL" | grep '\[o') ]]; then
PROFILE_PROTOCOL="openvpn"
elif [[ $(echo "$CONFIGS_ALL" | grep '\[p') ]]; then
PROFILE_PROTOCOL="pptp"
fi
/usr/syno/bin/synovpnc kill_client
sleep 20
echo conf_id=$PROFILE_ID > /usr/syno/etc/synovpnclient/vpnc_connecting
echo conf_name=$PROFILE_NAME >> /usr/syno/etc/synovpnclient/vpnc_connecting
echo proto=$PROFILE_PROTOCOL >> /usr/syno/etc/synovpnclient/vpnc_connecting
/usr/syno/bin/synovpnc connect --id=$PROFILE_ID
sleep 20
#-------------------------------------------------------------------------------
# VPN 연결 여부 다시 확인
#-------------------------------------------------------------------------------
if [[ $(/usr/syno/bin/synovpnc get_conn | grep Uptime) ]]; then
echo "[I] VPN이 성공적으로 재접속됨. 종료..." >> log.txt
exit 1
else
echo "[E] VPN 재접속에 실패. 종료..." >> log.txt
exit 1
fi
sleep 20
echo conf_id=$PROFILE_ID > /usr/syno/etc/synovpnclient/vpnc_connecting
echo conf_name=$PROFILE_NAME >> /usr/syno/etc/synovpnclient/vpnc_connecting
echo proto=$PROFILE_PROTOCOL >> /usr/syno/etc/synovpnclient/vpnc_connecting
/usr/syno/bin/synovpnc connect --id=$PROFILE_ID
sleep 20
fi
외부 DSM 접속 허용
VPN 외부에서 DSM에 접속하기 위해서는 아래와 같이 다중게이트웨이 설정이 필요합니다.
1. DSM에 접속해 "제어판 > 네트워크 > 일반"으로 들어가 "고급설정"을 선택 합니다.
2. "다중 게이트웨이 활성화"를 체크 합니다.
3. NAS의 IPv4를 DHCP가 아닌 수동으로 IP를 설정해 줍니다. 예를 들어 제 경우 "192.168.1.200"으로 설정했습니다.
4. "제어판 > 네트워크 > 일반"에서 기본 게이트웨이 옆 "편집"을 눌러줍니다.
5. "서비스 순서"를 보면 사용하는 네트워크와 VPN네트워크가 보입니다. 순서를 조정해 VPN네트워크가 상단해 위치하게 조정합니다. 반드시 상단에 있어야 VPN 뒤에 실제 사용 네트워크를 위치시킬 수 있습니다.