OpenVPN을 통한 전송 데몬


20

최근 에이 방법을 사용하여 Ubuntu 설치 한 BeagleBone Black을 구입했습니다 . 지금까지 모두 효과가있었습니다. BeagleBone을 토렌트 박스로 사용하고 싶지만 인터넷 연결을 통해 직접 사용하고 싶지 않습니다. (ISP가 좋아할 것이라고 생각하지 않습니다.) 유럽 서버에서 VPN 구독을 구입했습니다. . 전송하기 전에 랩톱을이 VPN에 수동으로 연결했습니다. VPN 연결이 Ubuntu에서 작동하고 호스트가 OpenVPN에 대한 설정 정보를 제공한다는 것을 알고 있습니다. 짜증나게, 할당 된 IP 주소의 동적 특성은 자주 바뀌는 것을 의미하므로 랩톱을 VPN과 함께 사용할 때 전송에서 수신 주소를 수동으로 필요한 값으로 설정했습니다.

이상적으로는 다음 설정을 원합니다.

  • 전송은 VPN을 통해서만 실행되며 일반 WAN 연결을 통해 토렌트를 실행할 수 없습니다.
  • 전송으로 향하는 트래픽 만 VPN을 통해 수락 또는 전송되며 다른 모든 원치 않는 트래픽은 삭제됩니다
  • 전송은 할당 된 IP 주소에 따라 적절한 포트를 사용하여 청취
  • 부팅시 OpenVPN이 자동으로 시작된 다음 전송이 시작됩니다
  • 전송의 웹 GUI는 LAN을 통해 그리고 가능하면 WAN 연결을 통해 인터넷을 통해 액세스 할 수 있습니다 (즉, VPN을 통해 다시 연결되지 않음)

3
자기 답은 나쁘지 않습니다. 그들에게 사과하지 마십시오. 당신은 또한 당신이하고있는 일을 설명 할 필요도 없습니다 ... 그것은 권장되는 행동입니다
RobotHumans

@hbdgaf와 동의 함. 사과 할 필요가 없습니다. 모든면에서 훌륭합니다.
JakeGould

답변:


23

참고 : (2016-02-22)이 구성은 VPN을 통해 보내는 대신 일반 WAN을 통해 토런트 추적기에 DNS 쿼리를 유출한다는 것을 알았습니다. 이 문제를 해결하는 방법을 조사 중입니다. 연결 자체가 VPN을 올바르게 사용하기 때문에 구성을 계속 실행하려고합니다.


업데이트 : Beaglebone에서 전송을 밤새 다운로드하도록 설정하면 CPU 사용량이 잠시 후 100 %로 이동합니다. 같은 시간이 지나면 발생하지 않는 것 같습니다. 때로는 밤새 괜찮으며 다른 시간에는 10 분 후에 어려움을 겪습니다. 또한 모든 토런트를 일시 중지하고 CPU로드가 정상으로 돌아 오기를 기다렸다가 다시 시작하여 복구 할 수 있습니다. 아직 조사 중입니다. 해결 방법은 좋지 않지만 정기적으로 급류를 일시 중지했다가 다시 시작하는 것이 좋습니다. 참고 이 단지는 Beaglebone 적용 문제, 그리고 아마도 다른 ARM 장치. x86 CPU 에서이 문제가 발생하지 않았습니다.


소개

BeagleBone Black에서 실행되는 Ubuntu 14.04에 대한이 솔루션을 개발하고 테스트했습니다. 내가 사용하는 VPN 공급자를 ibVPN 이라고 합니다 . OpenVPN 호환 VPN 공급자와 함께 지원되는 모든 하드웨어 (예 : "일반"x86 컴퓨터)에서 작동해야하며 14.10 이상에서 작동해야합니다. 언젠가 우분투가 부팅을 위해 SystemD를 사용할 것이라고 생각합니다. 이것은 여기서 사용 된 Upstart 스크립트를 마이그레이션해야한다는 것을 의미합니다. 업데이트 : Jonas Kalderstam SystemD 사용 에 대한 답변이 아래 에 있습니다. 또한 ufw가 방화벽으로 사용되고 있다고 가정하고 있습니다. 다른 것을 사용하는 경우 여기에서 ufw 명령을 변경해야합니다.

모든 작업은 시스템에 대한 SSH 연결을 통해 수행된다고 가정 하지만 실제 터미널에 입력하면 제대로 작동합니다.

이것은 매우 긴 튜토리얼이므로 먼저 모든 내용을 읽고 수행 할 작업에 익숙해야합니다.

또한 UPnP / NAT-PMP 데이터 전송을 위해 전송이 IP 주소에 올바르게 바인딩되지 않는 것으로 나타났습니다. 예를 들어 토렌트 데이터가 VPN을 올바르게 통과하지만 UPnP 포트 전달이 활성화 된 경우 전송은 로컬 라우터에서 포트 전달을 요청합니다 VPN 서버의 VPN을 통하지 않습니다. 따라서 Upstart 스크립트가 포트 포워딩을 비활성화했습니다. 작동하는 것처럼 보일 수는 있지만 포트 포워딩은 작동하지 않습니다. iptables와 iproute를 사용하여 debian-transmission 사용자의 모든 트래픽을 VPN을 통해 강제로 실행할 수는 있지만 여전히 조사 중입니다. 기본 경로가 VPN을 통해 모든 인터넷 데이터를 보내도록 변경 된 경우에도 작동해야하지만이 서버를 다른 용도로도 사용하기 때문에 그렇게하고 싶지 않으며 모든 시스템 업데이트가 VPN.UPnP가 VPN을 통해 작동하게하려면이 질문에 추가 정보가 있습니다 . 업데이트 : falk0069에는 VPN을 통해 UPnP를 장려하는 데 유용한 환상적인 팁이 있습니다 .

OpenVPN 설치 및 구성

우분투를 사용하기 전에 VPN 연결을 시도하는 것이 좋습니다. 데스크톱에서. 구성이 올 바르고 디버깅에 소요되는 시간이 줄어 듭니다.

먼저 필요한 패키지를 설치하십시오

sudo apt-get install openvpn

다음으로, 구성 파일을 저장할 디렉토리를 만드십시오. / opt / ibVPN을 사용하고 있습니다. 사용중인 제공자이기 때문입니다. 원하는대로 변경하십시오.

sudo mkdir /opt/ibVPN

이 새 디렉토리에서 가장 먼저 할 일은 VPN 클라이언트를 실행하기위한 구성 파일을 작성하는 것입니다. ibVPN은 리눅스 사용자를위한 기본 설정 파일을 제공합니다.

cd /opt/ibVPN
sudo vim config.ovpn

VPN 제공 업체의 설정을 사용하여 편집 한 버전을 vim에 복사하여 붙여 넣습니다. 참고로, Ubuntu 터미널에 붙여 넣기는 Ctrl+Shift+V입니다. VPN 제공 업체에서이 정보를 얻을 수 있습니다.

remote 888.888.888.888 1194 udp      #This address will be different for you
client
dev tap1
resolv-retry infinite
script-security 3 system
explicit-exit-notify 3
persist-key
mute-replay-warnings
ca ibvpn.com.crt
comp-lzo
verb 3
mute 20
ns-cert-type server
fragment 1300
route-delay 2
reneg-sec 0
max-routes 5000
link-mtu 1578

auth-user-pass pass
auth-nocache
persist-tun
route-noexec
lport 1195
lladdr 00:FF:11:AA:BB:CC
route-up "/opt/home/openvpn/route-up.sh"
down "/opt/home/openvpn/down.sh"

vim에 익숙하지 않은 사용자는 Insert 을 눌러 텍스트를 입력하거나 붙여 넣은 다음을 누르고 Escape 입력 :wq 하여 저장하고 종료하십시오. 물론 vim을 사용할 필요는 없습니다. 모든 텍스트 편집기가 작동합니다.

이 구성 파일에 대해 빨리 설명하겠습니다. 처음 18 줄은 서버와 함께 사용할 특정 설정을 지정합니다.이 설정은 ibVPN에서 제공됩니다. 다른 제공 업체가있는 경우 사용자 설정이 약간 다를 수 있습니다. 다음 줄은 내가 지정한 옵션으로 수정되었습니다.

  • 설정 파일에가있는 줄이 있으면 auth-user*주석 처리하십시오. 이 설정이 자동으로 작동하려면 사용자 이름과 비밀번호가 포함 된 파일이 있어야합니다. 따라서 VPN 제공 업체에 대해 선택한 비밀번호가 강력하고 무작위이며 고유해야합니다.

  • 이 명령 auth-user-pass pass은 OpenVPN에 pass사용자 및 암호를 읽기 위해 호출 된 파일을 찾도록 지시 합니다.

  • auth-nocache 메모리에서 비밀번호를 제거하므로 걱정되는 경우 보안이 약간 향상 될 수 있습니다.

  • persist-tun 연결이 끊어지면 서버에서 동일한 IP 주소를 유지하려고 시도하므로 전송 데몬 시작 및 중지가 줄어들 것입니다.

  • route-noexecOpenVPN 클라이언트가 서버가 제공 한 경로를 자동으로 사용하지 않도록 지시합니다.이 경로는 VPN을 통해 모든 네트워크 트래픽을 가져옵니다. 토렌트 트래픽 만 보내려고하므로 다른 라우팅 설정을 사용해야합니다.

  • lport 1195 OpenVPN 클라이언트가 1194 대신 포트 1195를 사용하도록 지시합니다. 필자의 경우 동일한 장치에서 OpenVPN 서버를 실행하고 싶습니다. 서버는 포트 1194를 사용해야합니다. OpenVPN 서버를 실행하지 않더라도 OpenVPN 서버는 이 변경을 위해 아프지 않습니다.

  • 별도의 OpenVPN 서버를 실행하기 때문에 다시 OpenVPN에 의해 ​​할당되지 않고 tap1이되도록 가상 회선 dev tap을으로 변경했습니다 dev tap1. VPN 서버를 실행하지 않더라도이 변경은 중요하지 않습니다. 방화벽 스크립트는 사용하도록 작성 tap1되었으므로 다른 장치를 사용하려는 경우 해당 위치에서 해당 스크립트를 변경해야합니다.

  • lladdr 00:FF:11:AA:BB:CC 이 MAC 주소를 갖도록 탭 인터페이스를 할당하도록 OpenVPN에 지시합니다. 이는 iptables 방화벽 규칙에 유용 할 수 있습니다.

  • route-updown실행 스크립트를 시작하고 필요에 따라 전송 - 데몬을 중지합니다 - 그들은 올바른 IP 주소와 포트에 제대로 결합 전송에 필요한 연결에 대한 정보를 포함하는 환경 변수로 실행되기 때문에이 여기에 필요하다.

필자의 경우 VPN 공급자의 서버 인증서가 있는데 구성 파일과 동일한 디렉토리에 있어야합니다.

sudo vim /opt/ibVPN/ibvpn.com.crt

이것을 복사하여 붙여 넣거나 SCP 또는 SSHFS를 통해 이동하십시오.

-----BEGIN CERTIFICATE-----
MIIDeDCCAuGgAwIBAgIJAMVKgpjMPUfxMA0GCSqGSIb3DQEBBQUAMIGFMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCQ0ExFTATBgNVBAcTDFNhbkZyYW5jaXNjbzEVMBMG
A1UEChMMRm9ydC1GdW5zdG9uMRgwFgYDVQQDEw9Gb3J0LUZ1bnN0b24gQ0ExITAf
BgkqhkiG9w0BCQEWEm1lQG15aG9zdC5teWRvbWFpbjAeFw0xMDA3MjExOTU5MzVa
Fw0yMDA3MTgxOTU5MzVaMIGFMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFTAT
BgNVBAcTDFNhbkZyYW5jaXNjbzEVMBMGA1UEChMMRm9ydC1GdW5zdG9uMRgwFgYD
VQQDEw9Gb3J0LUZ1bnN0b24gQ0ExITAfBgkqhkiG9w0BCQEWEm1lQG15aG9zdC5t
eWRvbWFpbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz23m3BXY5Asiw8Dx
T4F6feqsp+pIx6ivftTniyUCbSAxI1J1s1x75DzxmUpIwPu5xavzgPXgZr8FT81X
JGqF9km4AE95iddJawKx0wNgdTo7GximQq9rw0dsQIB5hZZQ9TJwHC3VOnmEic5A
OawKOCybMcRs8saLakZOgh7Xc+UCAwEAAaOB7TCB6jAdBgNVHQ4EFgQUeRhE2N4l
XwL4H1dbjkZ4ou6fj3AwgboGA1UdIwSBsjCBr4AUeRhE2N4lXwL4H1dbjkZ4ou6f
j3ChgYukgYgwgYUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEVMBMGA1UEBxMM
U2FuRnJhbmNpc2NvMRUwEwYDVQQKEwxGb3J0LUZ1bnN0b24xGDAWBgNVBAMTD0Zv
cnQtRnVuc3RvbiBDQTEhMB8GCSqGSIb3DQEJARYSbWVAbXlob3N0Lm15ZG9tYWlu
ggkAxUqCmMw9R/EwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQASt0pl
WzVseQLTNM8Mlgw4ZnGAv/x2xnijmMqrkE+F7pnaOicGpxgCfMKzjZuJu0TNJqF2
fibE7GhMdomD4dLFgIu8Wb5E7iQ1CSBEOGumRhK8qCsDzjr7WXUdhqA6Xvo+ylU6
DMzy0Wn3NNvfGC+qxOgybYCJwDnVPi0CEDSbzQ==
-----END CERTIFICATE-----

ibVPN 계정을 사용하지 않는 경우 인증서가 달라집니다.

이제 비밀번호 파일을 만들어 봅시다 :

sudo vim /opt/ibVPN/pass

첫 번째 줄은 전체 사용자 이름이어야하고 두 번째 줄은 비밀번호 여야합니다. 이 파일의 유일한 내용이어야합니다.

you@address.com
myBIGstrongpassword1234567890

또한이 파일에 대한 권한을 확보해야합니다. 그렇지 않으면 OpenVPN이 시작되지 않습니다.

sudo chmod 400 pass

이렇게하면 파일을 읽기 전용으로 만들고 소유자 만 사용할 수 있습니다 (즉, 다른 사용자는 전혀 읽을 수 없음)

이 명령은 시작시 실행할 파일을 작성하고 루트에서만 실행할 수 있도록 설정합니다.

sudo touch route-up.sh
sudo touch down.sh
sudo chmod 700 route-up.sh
sudo chmod 700 down.sh

이 시점에서 VPN 연결이 실제로 작동하는지 테스트하는 것이 좋습니다. 다음을 사용하여 연결을 시작하십시오.

sudo openvpn --cd /opt/ibVPN --config config.ovpn

up 및 down 외부 명령을 실행할 수 없다는 경고가 표시되지만 걱정하지 마십시오. 작동 Initialization Sequence Completed하면 터미널에 표시됩니다. 누르면 Control+C연결이 종료됩니다. 작동하지 않으면 이유를 조사하고 계속하기 전에 수정해야합니다. 때로는 작업을 시작하는 데 몇 번이 걸렸다는 것을 알았습니다. 비밀번호 파일이 올바른지 확인하십시오. 인터넷에는 OpenVPN에 관한 많은 훌륭한 자료가 있으므로 둘러보십시오.

이 시점에서 Transmission을 시작하고 실행하는 것이 가장 쉬운 방법 일 것입니다. VPN과 전송이 개별적으로 실행될 수 있다고 확신하면 결합 할 수 있습니다.

전송 설치 및 구성

필요한 패키지를 설치하십시오.

sudo apt-get install transmission-daemon

기본적으로 전송은 부팅시 자동으로 실행됩니다. 우리는 결국 OpenVPN을 사용하여 전송을 시작할 것이기 때문에 이것을 비활성화하고 싶습니다. 그렇게하려면 Transmission-daemon에 대한 구성 파일을 편집하십시오.

sudo vim /etc/default/transmission-daemon

그리고 다음 줄을 읽도록 변경하십시오.

ENABLE_DAEMON=0

이제 부팅시 전송이 시작되지 않습니다.

이제 전송 설정이 상주하고 다운로드 한 토렌트가 들어갈 디렉토리를 만들어 봅시다. 이것은 어떤 종류의 디스크를 이미 설정했고 / media / arm-disk /에 마운트되어 있다고 가정합니다. 보안상의 이유로 데몬은 루트 또는 "ubuntu"가 아닌 자체 사용자가 실행합니다. 설치 프로그램이 전송 데몬 "debian-transmission"을 위해 새 사용자를 만듭니다. 이 사용자는 우리가 생성 한 폴더를 소유해야하며 다운로드중인 토렌트의 저장 위치에 대한 읽기 및 쓰기 액세스 권한이 있어야합니다.

sudo mkdir /opt/transmission
sudo chown debian-transmission:debian-transmission /opt/transmission
sudo mkdir /media/arm-disk/torrents-complete
sudo chown debian-transmission:debian-transmission /media/arm-disk/torrents-complete
sudo mkdir /media/arm-disk/torrents-incomplete
sudo chown debian-transmission:debian-transmission /media/arm-disk/torrents-incomplete

이제 간단하게 전송을 시작하여 필요한 설정 파일을 생성해야합니다.

sudo -u debian-transmission -g debian-transmission /usr/bin/transmission-daemon --config-dir /opt/transmission --foreground

이 명령은 debian-transmission 사용자로 transmission-daemon을 시작하고 설정 파일에 / opt / transmission 디렉토리를 사용하도록 지시하고 포 그라운드에서 계속 실행되도록 지시합니다. 몇 초 동안 실행되면를 눌러 Control+C종료하십시오. 이제 설정 파일을 편집 할 수 있습니다.

sudo -u debian-transmission vim /opt/transmission/settings.json

이제 기본값을 다음 줄로 변경해야합니다.

"download-dir": "/media/arm-disk/torrents-complete",

"incomplete-dir": "/media/arm-disk/torrents-incomplete",

"incomplete-dir-enabled": true,

"rpc-whitelist": "127.0.0.1,192.168.1.*",

저장하고 종료하십시오 (Escape, : wq를 입력하고 Enter를 누르십시오)

가운데 두 개의 편집을 수행하면 "불완전한"디렉토리를 사용하여 완성 된 토런트를 완료되지 않은 토런트와 분리 할 수 ​​있습니다. 이것은 반드시 필요한 것은 아니지만 개인적으로 매우 유용합니다. 마지막 편집을 통해 LAN의 모든 컴퓨터에서 웹 GUI에 액세스 할 수 있습니다 (LAN 서브넷이 192.168.1.0이라고 가정하고 다른 경우이를 수정하십시오).

이제 Transmission을 다시 실행하여 작동하고 실제로 토렌트를 다운로드 할 수 있는지 확인하는 것이 좋습니다. 웹 브라우저 창을 사용하여 GUI에 액세스하고 토렌트를 추가합니다. 먼저 LAN에서 방화벽을 통해 웹 GUI에 액세스 한 다음 전송 데몬을 다시 실행 해 봅시다.

sudo ufw allow in from 192.168.0.0/16 to any port 9091
sudo -u debian-transmission -g debian-transmission /usr/bin/transmission-daemon --config-dir /opt/transmission --foreground

Firefox (또는 선호하는 브라우저)에서이 URL을 방문하십시오 : http://XXX.XXX.XXX.XXX:9091 여기서 XXX는 LAN상의 서버 주소 (예 : 192.168.1.10)로 대체됩니다. 다운로드 할 토렌트를 찾으십시오 (예 : 1080p60hz의 Big Buck Bunny). 이것은 합법적으로 무료로 다운로드 할 수있는 무료 단편 영화입니다. Transmission GUI에서 "Open Torrent"버튼을 클릭 하고이 링크를 붙여 넣습니다. (또는 원하는 다른 토렌트)를 첫 번째 상자에 . 그런 다음 "업로드"를 누르십시오. 전송이 제대로 작동하면 토렌트 다운로드가 시작됩니다. 그렇지 않은 경우 계속하기 전에 이유를 해결해야합니다. 전송 데몬을 사용하기 위해 인터넷에서 사용할 수있는 많은 리소스가 있습니다. 선택한 급류가 작동하지 않을 수도 있습니다. 다른 몇 가지를 먼저 시도하십시오.

다운로드가 완료되면 Control+C터미널 창 에서을 눌러 전송 데몬을 중지하십시오.

VPN 인터페이스에 바인딩 전송 구성

이제 VPN이 준비되면 전송을 시작하는 데 사용될 Upstart 스크립트를 만들어 봅시다.

sudo mv /etc/init/transmission-daemon.conf /etc/init/transmission-daemon.conf.bak

이것이 불만이더라도 걱정하지 마십시오. Upstart 파일이 존재하는 경우 Upstart 파일을 백업하는 것입니다. 새로운 vim을 편집하기 위해 vim을 열어 봅시다 :

sudo vim /etc/init/transmission-daemon.conf

이것을 편집기에 붙여 넣으십시오.

description "transmission-daemon, attached to OpenVPN tunnel tap1"

start on transmission-daemon-start
stop on runlevel [!2345] or transmission-vpn-down

# This includes the information from OpenVPN into this environment

export LOCAL_IP
env PORT=51413

# give time to send info to trackers
kill timeout 30

# Run as unprivileged user
setuid debian-transmission
setgid debian-transmission

# Start transmission again if it stops for some reason
respawn
# If transmission stops 5 times in a minute, give up trying to respawn it
respawn limit 5 60

exec /usr/bin/nice -15 /usr/bin/transmission-daemon --config-dir /opt/transmission --bind-address-ipv4 $LOCAL_IP --peerport $PORT --no-portmap --foreground

vim을 저장하고 닫습니다. ( Escape)를 입력 :wq하십시오. 다시 vim을여십시오 :

sudo vim /etc/init/transmission-up.conf

그리고 이것을 붙여 넣으십시오 :

description "Script to create firewall and routing rules for transmission-daemon"

start on transmission-vpn-up

# This includes the information from OpenVPN into this environment
export VPN_GATEWAY
export LOCAL_IP
env PORT=51413

task

script
    # Set up IP route, firewall rules
    # It doesn't matter if they already exist, they will be skipped
    /sbin/ip route add default via $VPN_GATEWAY dev tap1 table 200
    /sbin/ip rule add from $LOCAL_IP table 200
    /sbin/ip route flush cache
    /usr/sbin/ufw insert 1 reject out on eth0 from any port $PORT
    /usr/sbin/ufw insert 1 reject in on eth0 to any port $PORT
    /usr/sbin/ufw insert 1 deny in on tap1 to any
    /usr/sbin/ufw insert 1 allow in on tap1 to any port $PORT proto udp

    # Start the actual transmission-daemon process, in a separate task so that unprivileged user/group can be set
    /sbin/initctl emit transmission-daemon-start LOCAL_IP=$LOCAL_IP

end script

다시 vim을 저장하고 닫습니다. ( Escape)를 입력 :wq하십시오. 드디어:

sudo vim /etc/init/transmission-down.conf

붙여 넣기

description "Script to remove firewall rules for transmission-daemon"

start on runlevel [!2345] or stopping openvpn-transmission
env PORT=51413

task

script
    # Take down IP route, firewall rules
    # It doesn't really matter if they don't get taken down, but this will be cleaner
    /usr/sbin/ufw delete reject out on eth0 from any port $PORT
    /usr/sbin/ufw delete reject in on eth0 to any port $PORT
    /usr/sbin/ufw delete deny in on tap1 to any
    /usr/sbin/ufw delete allow in on tap1 to any port $PORT proto udp

    /sbin/ip route flush cache

end script

이 스크립트는 Upstart에게 "transmission-vpn-up"신호를 수신하도록 지시합니다. 그런 다음 "transmission-up.conf"스크립트는 VPN 인터페이스를 통해 로컬 VPN 주소에서 트래픽을 전송하는 데 필요한 라우팅 규칙을 설정하고 VPN에서 전송을 위해 수신 포트로 트래픽을 허용하도록 방화벽을 설정합니다. 일반 LAN 인터페이스에서 Transmission의 청취 포트로 향하는 트래픽이 차단되었습니다. 그런 다음 "transmission-daemon.conf"스크립트는 필요한 설정으로 전송 데몬을 시작하여 VPN IP 주소에 바인딩합니다. 이 명령은 UPnP / NAT-PMP가 비활성화되도록합니다. 포트 포워딩에 대한 맨 위의 노트를 참조하십시오. "nice -15"는 전송의 우선 순위를 낮게 설정하는데, 이는 낮은 사양의 BeagleBone을 사용할 때 유용하다는 것을 알게되었습니다. 시스템 속도가 느려집니다. 최소한 우선 순위가 낮 으면 더 중요한 시스템 작업을 계속 실행할 수 있습니다. "transmission-down.conf"스크립트는 VPN이 중지 될 때 방화벽 규칙을 제거합니다. 전송 데몬을 권한없는 사용자로 실행할 수 있도록 방화벽 규칙을 루트로 실행할 수 있도록 세 가지 다른 스크립트가 사용됩니다.

이제 OpenVPN 설정으로 돌아가서 "route-up"및 "down"스크립트를 편집하여 Transmission 스크립트 시작 및 중지를 트리거합니다.

sudo vim /opt/ibVPN/route-up.sh

이것을 vim에 붙여 넣으십시오.

#! /bin/bash

/sbin/initctl emit transmission-vpn-up VPN_GATEWAY=$route_vpn_gateway LOCAL_IP=$ifconfig_local

이 스크립트는 Upstart에게 전송 데몬이 시작되어야한다고 말하고 VPN 연결에 연결하는 데 필요한 정보를 제공합니다.

sudo vim /opt/ibVPN/down.sh

다시 더 붙여 넣기 :

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

이 스크립트는 훨씬 더 간단합니다. 전송 데몬이 중지하라는 신호입니다.

이 시점에서 전체 VPN 구성 폴더의 소유자가 루트 사용자인지 확인하는 것이 좋습니다. 이러한 스크립트는 루트로 실행되므로 스크립트를 변경할 수있는 사람은 누구나 루트 사용자로 원하는 것을 실행할 수 있습니다.

sudo chown root:root -R /opt/ibVPN
sudo chmod 700 -R /opt/ibVPN
sudo chmod 400 /opt/ibVPN/pass

이는 이제 루트 사용자 만 VPN 연결 설정을 수정하거나 볼 수 있음을 의미합니다.

좋아, 거의 끝났어! 지금까지 설정이 작동하는지 테스트 해 보겠습니다.

sudo openvpn --cd /opt/ibVPN --config config.ovpn

Transmission 웹 GUI에 다시 연결하고 기존 토렌트를 재개하거나 새 토렌트를 추가하십시오. 피어를 기다리는 몇 분 후에 다운로드 할 수 있어야합니다. 그것이 작동하는지 여부를 테스트 한 멋진 방법은 iftop을 보는 것입니다. iftop을 설치하고 다음을 실행하십시오.

sudo apt-get install iftop
sudo iftop -i tap1

이 화면에는 VPN을 통해 실행중인 모든 연결이 표시됩니다. 토렌트가 다운로드 중이고 VPN을 올바르게 사용하고 있다면 여기에 많은 IP 주소와 호스트 이름이 있습니다. LAN 연결에 대한 iftop도보십시오 :

sudo iftop -i eth0

여기서는 BeagleBone에서 다른 서비스를 실행하지 않는다고 가정 할 때 VPN 서버 인 단일 IP 주소에 대한 대량의 트래픽이 표시되고 다른 LAN 장치에 대한 최소 트래픽 만 표시됩니다.

다음 지침따라 VPN이 작동 중인지 확인할 수 있습니다 .
이 사이트에서는 토런트를 다운로드하여 다른 피어가 귀하에게 연결하는 데 사용하는 IP 주소를 확인할 수 있습니다. 모든 것이 작동하는 경우 자신의 WAN IP 주소가 아닌 VPN IP 주소가됩니다.

문제가 발생하면 다음을 수행하여 Upstart 오류 로그를 볼 수 있습니다.

sudo tail -f /var/log/upstart/transmission-daemon.log

별도의 터미널 / SSH 창에서 위와 같이 VPN 연결을 시작하는 동안 tail 명령을 실행하고 오류 메시지를 찾으십시오. 인터넷을 둘러 보거나 의견을 게시하지 않은 경우 오류 메시지가 표시되어 문제를 해결할 수 있기를 바랍니다.

자동으로 시작되도록 모두 구성

OpenVPN 터널을 시작하는 명령을 수동으로 발행하거나 자신의 스크립트를 사용하여 수행하려는 경우 작업이 완료된 것입니다. 그러나 부팅시 시작하기를 원했기 때문에 OpenVPN을 시작하기 위해 다른 Upstart 스크립트를 만들었습니다.

sudo vim /etc/init/openvpn-transmission.conf

이것은 우리가 마지막으로 붙여야 할 것입니다!

description "OpenVPN client, with attached transmission-daemon"

start on started networking
stop on runlevel [!2345] or stopped networking

# Give time for Transmission to send info to trackers, wait for graceful close
kill timeout 45

# Start the OpenVPN tunnel again if it stops for some reason
respawn
# If it stops 5 times in a minute, give up trying to respawn it
respawn limit 5 60


exec openvpn --cd /opt/ibVPN --config config.ovpn

post-stop script
    # Pause for a few seconds, before exiting
    /bin/sleep 3s
end script

이 작업은 시스템이 네트워크가 준비되었다는 신호를 보낸 다음 OpenVPN 터널을 시작하여 전송을 시작하기 만하면됩니다. 시스템이 꺼져 있거나 어떤 이유로 네트워킹이 종료되면 Upstart는 방화벽 규칙을 제거하고 전송 데몬을 닫습니다. 단순한! 재부팅 후에도 계속 작동하므로 이제 모두 설정되었습니다.

Transmission과 상호 작용하려면 설정 단계에서했던 것처럼 웹 GUI를 사용하십시오. 포트 전달을 설정하여 인터넷을 통해 GUI에 액세스 할 수도 있습니다. 이 작업을 수행하는 방법에 대한 많은 자습서가 있으므로 여기서는 반복하지 않겠습니다.

BeagleBone에서 다운로드를 완료하기 위해 NFS를 사용하고 있습니다. BeagleBone에서 데스크탑 컴퓨터로 LAN을 통해 복사하는 속도는 약 8MB / s입니다. 이는 저전력 장치에 매우 좋습니다. 우분투는 이것을 설정하기위한 편리한 정보제공 합니다.


와! 이 모든 것을 찾기 위해 얼마나 시간을 보냈습니까?
Ismael Miguel

하하, 꽤 DD-WRT 라우터에서 한 번 한 번 해본 다음 BeagleBone을 위해 다시 할 때 이것을 작성하는 방법을 잊지 않기로 생각했습니다. : D
seanlano 2019

1
unix.stackexchange.com/questions/88693/… 도 읽어야합니다. (정답입니다.) 도움이 될 것입니다.
Ismael Miguel

3
방금 DNS 서버를 OpenDNS를 사용하도록 설정하고 통계를 살펴본 후이 구성이 정상적인 WAN 연결을 통해 DNS를 유출 한다는 것을 깨달았습니다 . 이 문제를 해결할 수 있는지 자세히 조사하겠습니다. 연결 자체가 VPN을 통해 이루어지기 때문에 어쨌든 계속 실행하려고하지만 이상적이지는 않습니다.
seanlano

1
@seanlano이 점에 주목 해 주셔서 감사합니다. 수정 사항이 있으면 알려주세요.
Winterflags

7

방금 SystemD를 사용 하여이 작업을 수행 했으므로 공유 할 것이라고 생각했습니다. 스크립트, 구성 및 인증서를 모두 동일한 디렉토리에 배치했습니다./etc/openvpn/myprovider

OpenVPN 설정

이것은 특정 VPN에 따라 다르지만 @seanlano의 구성과 다른 점은 route-up스크립트 만 사용한다는 것 입니다. 작업 제공 config 외에도 필요한 것은 다음과 같습니다.

route-noexec
route-up "/etc/openvpn/myprovider/transmission-route-up.sh"

원하는 곳 어디 transmission-route-up.sh에서나 스크립트 를 배치 할 수 있습니다. down스크립트 가 없다는 점에 유의하십시오 . (내 VPN은 이미 사용자 정의 다운 스크립트를 사용하고 있었으므로 어쨌든 충돌했을 것입니다).

/etc/openvpn/myprovider/transmission-route-up.sh :

#!/bin/sh

# Print environment variables for transmission's benefit
printenv > /etc/openvpn/myprovider/vpn.env


# Set up VPN routes
ip route add default via $route_vpn_gateway dev $dev table 10

ip rule add from $ifconfig_local/32 table 10
ip rule add to $route_vpn_gateway/32 table 10

ip route flush cache


# Add firewall rules
iptables -A INPUT -i $dev -p udp --dport 24328 -j ACCEPT
iptables -A INPUT -i $dev -p tcp --dport 24328 -j ACCEPT

iptables -A OUTPUT -o $dev -p udp --sport 24328 -j ACCEPT
iptables -A OUTPUT -o $dev -p tcp --sport 24328 -j ACCEPT

첫 줄 printenv은 중요합니다. 원하는 곳에 배치하면 나중에 SystemD 서비스에서 사용됩니다. 내 VPN 설정과 동일한 디렉토리에 배치합니다.

24328 을 전송 데몬이 수신해야하는 포트로 바꾸 십시오. 나는 iptables (데비안 사용)를 사용하므로 @seanlano의 설정에서 ufw 줄로 해당 줄을 바꿀 수 있습니다.

SystemD VPN 서비스

이것은 VPN을 자동으로 시작하는 서비스입니다. 시스템에서 openvpn의 경로가 올바른지, 구성 파일의 경로도 올바른지 확인하십시오. 당신은 해야한다 지정 전체 SystemD 서비스의 경로를.

/etc/systemd/system/my-vpn.service :

[Unit]
Description=VPN connection
After=network.target

[Service]
Type=forking
PIDFile=/var/run/openvpn/vpn.pid
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/myprovider --config /etc/openvpn/myprovider/myconfig.ovpn --daemon --writepid /var/run/openvpn/vpn.pid

[Install]
WantedBy=multi-user.target

다음을 사용하여 VPN 서비스를 활성화하십시오.

systemctl enable my-vpn.service

그리고 그것을 테스트하십시오 :

systemctl start my-vpn.service
systemctl status my-vpn.service

시작 / 실행 중이라면 괜찮습니다.

SystemD 전송 데몬 서비스

이 스크립트에는 vpn-service가 필요하므로 vpn이 다운되면 transmission-daemon도 다운됩니다. VPN을 다시 시작하면 전송이 다시 시작되고 다시 바인딩되어야하므로 자동으로 처리해야하므로 새 IP 주소를 얻는 경우 편리합니다. route-up이전 에 스크립트 에서 인쇄 한 환경 변수를 사용합니다 .

/etc/systemd/system/transmission-daemon.service :

[Unit]
Description=Transmission BitTorrent Daemon Under VPN
After=network.target my-vpn.service
Requires=my-vpn.service

[Service]
User=debian-transmission
Type=notify
EnvironmentFile=/etc/openvpn/vpn.env
ExecStart=/usr/bin/transmission-daemon -f --log-error --bind-address-ipv4 $ifconfig_local --rpc-bind-address 0.0.0.0 --no-portmap
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

사용

systemctl enable transmission-daemon.service

그리고 시작해

systemctl start transmission-daemon.service

재부팅하면 모두 자동으로 시작됩니다 (순서대로!). Type=simpleVPN 서비스에서 사용 하면 스크립트 순서에 문제가 생길 수 있으므로 forking대신 사용 하는 것이 좋습니다 .

rpc-bind-address보다 제한적이기를 원하는 경우 실제 IP 주소를 지정할 수 있습니다 (이는 VPN GUI가 아니어야하는 웹 GUI 수신 주소입니다). 그리고 멋진 전송을 실행하려면 ExecStart라인을 변경 /usr/bin/nice -n15하고 시작 부분에 추가 하십시오.

주소 변경 처리

시간이 지남에 따라 한 가지 주목할 점은 어떤 이유로 VPN 연결이 새로운 IP 주소를 얻는다면 전송은 여전히 ​​이전 주소에 바인딩되어 작동을 멈출 것입니다. 그리고 단순히 그렇게하는 systemctl restart transmission-daemon.service것이 잘리지 않습니다. 완전히 멈춘 다음 새로 시작해야합니다.

이유는 모르겠지만 그 이유 때문에 루트 crontab ( sudo crontab -e)에 다음 줄을 추가했습니다 .

# m h  dom mon dow   command
0 6 * * * /bin/systemctl stop my-vpn.service; /bin/systemctl start my-vpn.service
1 6 * * * /bin/systemctl stop transmission-daemon.service; /bin/systemctl start transmission-daemon.service

흥미롭게도 BeagleBone에서도 실행됩니까? 그렇다면 전송에 성능 문제가 있습니까? 또한 훌륭한 글쓰기. :)
seanlano

아뇨 일반 데스크탑 컴퓨터에서 실행 중이며 아무런 문제가 없습니다.
조나스 칼더 스탐

그럴 수 있지. Intel 컴퓨터에서 나에게 잘 작동하지만 ARM 프로세서로 저렴한 토런트 상자를 만들 수 있기를 바랐습니다.
seanlano

토런트를 확인하십시오. 매우 성능이 뛰어납니다
Jonas Kalderstam

고마워요 다른 것들은 ARM 상자에서 제대로 실행되므로 rtorrent가 제대로 작동 할 수 있습니다.
seanlano

3

전송이 UPnP / NAT-PMP 용 VPN을 거치지 않는다는 것을 언급했습니다. 나는 이것도 알았고 Transmission을위한 패치를 만들었으므로 UPnP의 bind-address-ipv4 설정을 준수합니다. NAT-PMP는 기본 게이트웨이를 결정해야하기 때문에 구현하기가 조금 더 어렵습니다. UPnP는 요즘 사용되는 주요 제품이므로 아마도 충분할 것입니다. 나는 이것을 trac.transmissionbt 사이트에 버그로 기록하고 패치를 제공했습니다. 앞으로 릴리스에 포함되기를 바랍니다. https://trac.transmissionbt.com/ticket/5990

다시 컴파일하지 않으려는 경우의 또 다른 옵션은 miniupnpc 패키지에서 upnpc를 수동으로 실행하는 것입니다. 예 :

sudo apt-get install miniupnpc
upnpc -m 10.10.10.51 -a 10.10.10.51 51515 51515 TCP
upnpc -m 10.10.10.51 -a 10.10.10.51 51515 51515 UDP

여기서 10.10.10.51은 VPN IP이고 51515는 요청한 TCP / UDP 포트입니다.

전달이 얼마나 오래 지속되는지 잘 모르겠습니다. 또한 '-d'옵션을 사용하여 연결을 끊을 때 포트를 제거 할 수 있습니다. 그렇지 않으면 VPN에 다시 로그인하면 동일한 포트를 다시 얻을 수 없다는 것을 알았습니다.

건배


나는 이와 같은 해결책을 찾으려고 여러 해를 보냈다 miniupnpc. 패치가 병합되기를 바라며이 문제는 영원히 해결 될 것입니다. 그 동안 나는 당신의 편리한 팁을 사용하려고 노력할 것입니다.
seanlano
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.