Demon transmisji przez OpenVPN


20

Niedawno nabyłem BeagleBone Black, na którym zainstalowałem Ubuntu przy użyciu tej metody . Do tej pory wszystko działało. Chcę używać mojego BeagleBone jako torrenta, ale nie chcę tego robić bezpośrednio przez moje połączenie internetowe (nie sądzę, aby mój ISP to polubił) - więc kupiłem subskrypcję VPN z europejskiego serwera . Ręcznie podłączyłem laptopa do tej sieci VPN i uruchomiłem Transmisję. Wiem, że połączenie VPN działa w systemie Ubuntu, a host zapewnia informacje o konfiguracji OpenVPN. Irytujące, dynamiczny charakter przypisanego adresu IP oznacza, że ​​często się zmieniał, więc kiedy korzystałem z laptopa z VPN, ręcznie ustawiałem adres nasłuchiwania w Transmisji na wymaganą wartość.

Idealnie chciałbym następującą konfigurację:

  • Transmisja odbywa się tylko przez VPN i zabrania się uruchamiania torrentów przez normalne połączenie WAN
  • Tylko ruch skierowany do Transmisji zostanie zaakceptowany lub wysłany przez VPN, cały pozostały niezamówiony ruch zostanie odrzucony
  • Transmisja używa odpowiedniego portu do nasłuchiwania, na podstawie przypisanego adresu IP
  • OpenVPN uruchamia się automatycznie podczas rozruchu, który następnie rozpoczyna transmisję
  • Do internetowego interfejsu GUI transmisji można uzyskać dostęp przez sieć LAN i ewentualnie przez Internet z mojego połączenia WAN (tj. Nie z powrotem przez VPN)

3
Odpowiedzi własne nie są złe. Nie przepraszaj za nich. Nie musisz też wyjaśniać, że to właśnie robisz ... Jest to zachęcane zachowanie
RobotHumans

Uzgodniony z @hbdgaf. Nie ma potrzeby przepraszać. Świetna praca na wszystkich frontach.
JakeGould,

Odpowiedzi:


23

Uwaga: (2016-02-22) Zdałem sobie sprawę, że ta konfiguracja przecieka zapytania DNS do trackerów torrentowych przez normalną sieć WAN, zamiast wysyłać je przez VPN. Badam, jak to naprawić. Będę jednak nadal uruchamiać konfigurację, ponieważ samo połączenie prawidłowo korzysta z VPN.


Aktualizacja: Zauważyłem, że kiedy ustawiam Transmission na pobieranie z Beaglebone na noc, użycie procesora po pewnym czasie spada do 100%. Wydaje się, że nie dzieje się to po tym samym czasie, czasem jest w porządku przez całą noc, innym razem walczy po 10 minutach. Można go również odzyskać, zatrzymując wszystkie torrenty i czekając, aż obciążenie procesora powróci do normy, a następnie uruchom ponownie. Nadal badam. Obejściem może być okresowe wstrzymywanie i wznawianie torrentów, chociaż nie jest to zbyt dobre obejście. Uwaga: ten problem dotyczy tylko Beaglebone i prawdopodobnie innych urządzeń ARM. Nigdy nie miałem tego problemu na procesorze x86.


Wprowadzenie

Opracowałem i przetestowałem to rozwiązanie dla Ubuntu 14.04, działającego na BeagleBone Black. Dostawca VPN, którego używam, nazywa się ibVPN . Powinien jednak działać z każdym obsługiwanym sprzętem (tj. Na „normalnym” komputerze x86), z dowolnym dostawcą VPN zgodnym z OpenVPN - i prawdopodobnie powinien działać dla wersji 14.10 lub nowszej. W pewnym momencie wierzę, że Ubuntu użyje SystemD do rozruchu, co oznacza, że ​​skrypty Upstart użyte tutaj będą musiały zostać zmigrowane. Aktualizacja: Jonas Kalderstam ma poniżej odpowiedź dotyczącą używania SystemD. Zakładam również, że jako zapora ogniowa używana jest ufw, jeśli używasz czegoś innego, musisz zmienić polecenia ufw tutaj.

Zakładam, że cała praca jest wykonywana przez połączenie SSH z systemem, choć równie dobrze działałoby, gdyby zostało wpisane w fizycznym terminalu.

To dość długi samouczek, przeczytaj go najpierw i upewnij się, że czujesz się dobrze z tym, co będziesz robić.

Zauważyłem również, że Transmisja nie wiąże się poprawnie z adresem IP do wysyłania danych UPnP / NAT-PMP - tzn. Dane torrentów poprawnie przechodzą przez VPN, ale jeśli przekierowanie portów UPnP jest włączone Transmisja zażąda przekazania portu z routera lokalnego , nie przez VPN z serwera VPN. Dlatego skrypt Upstart wyłącza przekierowywanie portów, ponieważ może się wydawać, że działał, ale nie działał. Powinno być możliwe użycie iptables i iproute, aby wymusić cały ruch od użytkownika transmisji debian przez VPN, ale nadal się tym zajmuję. Powinno to również działać, jeśli domyślna trasa została zmieniona, aby wysyłać wszystkie dane internetowe przez VPN, ale nie chciałem tego robić, ponieważ używam tego serwera również do innych rzeczy, a to również spowodowałoby, że wszystkie aktualizacje systemu przeszłyby przez VPN.To pytanie zawiera dodatkowe informacje, jeśli naprawdę chcesz, aby UPnP działał przez VPN . Aktualizacja: falk0069 ma fantastyczną wskazówkę poniżej, która pomaga zachęcić UPnP przez VPN.

Instalowanie i konfigurowanie OpenVPN

Zalecam, aby spróbować uruchomić połączenie VPN przy użyciu Ubuntu, zanim spróbujesz go uruchomić tutaj - tj. Z komputera. Potwierdzi to prawidłową konfigurację i skróci czas debugowania.

Najpierw zainstaluj wymagane pakiety

sudo apt-get install openvpn

Następnie utwórz katalog, w którym będą przechowywane pliki konfiguracyjne. Używam / opt / ibVPN, ponieważ to jest dostawca, którego używam. Zmień to na co tylko chcesz.

sudo mkdir /opt/ibVPN

Pierwszą rzeczą do zrobienia w tym nowym katalogu jest utworzenie pliku konfiguracyjnego do uruchomienia klienta VPN. ibVPN zapewnia podstawowy plik konfiguracyjny dla użytkowników Linuksa, który w większości właśnie skopiowałem i wkleiłem.

cd /opt/ibVPN
sudo vim config.ovpn

Skopiuj i wklej edytowaną wersję do vima, korzystając z ustawień swojego dostawcy VPN. (FYI, wklej w terminalu Ubuntu jest Ctrl+Shift+V) Powinieneś być w stanie uzyskać to od swojego dostawcy 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"

Dla tych, którzy nie znają vima, naciśnij, Insert aby wpisać lub wkleić tekst, a następnie naciśnij Escape i wpisz, :wq aby zapisać i wyjść. Oczywiście nie musisz używać vima - dowolny edytor tekstu będzie działał.

Wyjaśnię szybko ten plik konfiguracyjny: pierwsze 18 wierszy określa konkretne ustawienia, które mają być używane z serwerem, pochodzą one z ibVPN - twoje będą prawdopodobnie nieco inne, jeśli masz innego dostawcę. Kolejne wiersze to zmodyfikowane opcje, które określiłem.

  • Jeśli plik ustawień zawierał jakieś wiersze auth-user*, skomentuj je. Aby ta konfiguracja działała automatycznie, musimy mieć plik z nazwą użytkownika i hasłem - upewnij się więc, że hasło wybrane dla dostawcy VPN jest silne, losowe i unikalne.

  • auth-user-pass passMówi OpenVPN szukać pliku o nazwie passczytać użytkownika i hasła.

  • auth-nocache usuwa hasło z pamięci, co może nieco zwiększyć bezpieczeństwo, jeśli się o to martwisz.

  • persist-tun spróbuje zachować ten sam adres IP z serwera, jeśli połączenie zostanie przerwane, co, miejmy nadzieję, powinno oznaczać mniej uruchamiania i zatrzymywania demona transmisji.

  • route-noexecmówi klientowi OpenVPN, aby nie korzystał automatycznie z tras dostarczonych przez serwer - co spowodowałoby zatrzymanie całego ruchu sieciowego przez VPN. Chcemy tylko wysłać ruch torrentowy, więc będziemy musieli użyć różnych ustawień routingu.

  • lport 1195 mówi klientowi OpenVPN, aby używał portu 1195 zamiast 1194 - w moim przypadku chcę również uruchomić serwer OpenVPN na tym samym urządzeniu, a serwer będzie musiał użyć portu 1194. Nawet jeśli nie korzystasz z serwera OpenVPN, to nie zaszkodzi dokonać tej zmiany.

  • Zmieniłem linię dev tapna dev tap1, aby zmusić urządzenie wirtualne do tap1 zamiast przypisywania przez OpenVPN, ponownie z powodu uruchomienia osobnego serwera OpenVPN. Nawet jeśli nie korzystasz z serwera VPN, ta zmiana nie powinna mieć znaczenia. Skrypty zapory zostały napisane do użycia tap1, więc jeśli wolisz korzystać z innego urządzenia, pamiętaj o zmianie tych skryptów w razie potrzeby.

  • lladdr 00:FF:11:AA:BB:CC mówi OpenVPN, aby przypisał interfejs tap do tego adresu MAC, co może być przydatne w regułach zapory iptables.

  • route-upi downuruchamiaj skrypty, aby uruchamiać i zatrzymywać demona transmisji zgodnie z wymaganiami - są one potrzebne tutaj, ponieważ działają ze zmiennymi środowiskowymi zawierającymi informacje o połączeniu, które są potrzebne do prawidłowego powiązania transmisji z odpowiednim adresem IP i portem.

W moim przypadku miałem certyfikat serwera od dostawcy VPN - który również musi znajdować się w tym samym katalogu co plik konfiguracyjny.

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

Skopiuj i wklej to lub przenieś za pomocą SCP lub 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-----

Oczywiście, jeśli nie korzystasz z konta ibVPN, twój certyfikat będzie inny.

Stwórzmy teraz plik haseł:

sudo vim /opt/ibVPN/pass

Pierwszy wiersz musi być pełną nazwą użytkownika, następnie drugi wiersz musi być hasłem. To musi być jedyna zawartość tego pliku.

you@address.com
myBIGstrongpassword1234567890

Musimy również zabezpieczyć uprawnienia do tego pliku, w przeciwnym razie OpenVPN nie uruchomi się.

sudo chmod 400 pass

Spowoduje to, że plik będzie tylko do odczytu i tylko dla właściciela (tzn. Żaden inny użytkownik nie będzie mógł go odczytać)

Te polecenia utworzą pliki, które będą uruchamiane podczas uruchamiania, i ustawią je tak, aby były uruchamialne tylko przez root.

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

W tym momencie prawdopodobnie dobrym pomysłem jest sprawdzenie, czy połączenie VPN faktycznie działa. Rozpocznij połączenie z:

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

Zobaczysz ostrzeżenia, że ​​nie można uruchomić zewnętrznych poleceń w górę iw dół, ale nie martw się tym. Jeśli to zadziała, zobaczysz Initialization Sequence Completedna terminalu. Naciśnij, Control+Caby zakończyć połączenie. Jeśli to nie zadziała, będziesz musiał dowiedzieć się, dlaczego nie i naprawić, zanim przejdziesz dalej. Przekonałem się, że czasami zajęło kilka minut, aby zacząć działać. Upewnij się, że plik hasła jest poprawny. Istnieje wiele wspaniałych zasobów w Internecie na temat OpenVPN, więc rozejrzyj się.

W tym momencie prawdopodobnie najłatwiej jest przejść do uruchomienia Transmission. Gdy masz pewność, że zarówno VPN, jak i Transmisja mogą działać osobno, można je połączyć.

Instalowanie i konfigurowanie transmisji

Zainstaluj wymagane pakiety:

sudo apt-get install transmission-daemon

Domyślnie skrzynia biegów uruchomi się automatycznie podczas rozruchu. Ponieważ w końcu będziemy używać OpenVPN do rozpoczęcia transmisji, chcemy to wyłączyć. W tym celu edytuj plik konfiguracyjny dla Transmission-daemon

sudo vim /etc/default/transmission-daemon

I zmień następujący wiersz, aby przeczytać:

ENABLE_DAEMON=0

Teraz transmisja nie rozpocznie się przy rozruchu.

Utwórzmy teraz katalog, w którym będą przechowywane ustawienia transmisji i do których będą pobierane torrenty. Zakłada się, że już skonfigurowałeś jakiś dysk i jest on zamontowany w / media / arm-disk /. Ze względów bezpieczeństwa demon będzie uruchamiany przez własnego użytkownika, a nie jako root lub „ubuntu”. Instalator tworzy nowego użytkownika dla demona transmisji „debian-transmisja”. Ten użytkownik musi być właścicielem folderu, który tworzymy, oraz mieć dostęp do odczytu i zapisu w miejscu przechowywania pobieranych torrentów.

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

Teraz musimy krótko rozpocząć transmisję, aby utworzyć potrzebny plik ustawień:

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

Ta komenda uruchamia demona transmisji jako użytkownik debian-transmisji, mówi mu, aby używał katalogu / opt / transmisja dla plików ustawień i każe mu kontynuować działanie na pierwszym planie. Po kilku sekundach naciśnij, Control+Caby zakończyć. Możemy teraz edytować plik ustawień.

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

Musimy teraz przejść do następujących wierszy z ich ustawień domyślnych, aby przeczytać:

"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.*",

Zapisz i wyjdź (Escape, wpisz: wq i naciśnij Enter)

Dwie środkowe zmiany umożliwią użycie katalogu „niekompletnego”, oddzielając gotowe torrenty od niedokończonych. Nie jest to całkowicie konieczne, ale osobiście uważam to za niezwykle przydatne. Ostatnia edycja umożliwia dostęp do internetowego interfejsu GUI z dowolnego komputera w sieci LAN (zakładając, że twoja podsieć LAN to 192.168.1.0, zmień ją, jeśli jest inna).

Teraz dobrym pomysłem jest ponowne uruchomienie Transmission, aby sprawdzić, czy działa i czy rzeczywiście może pobrać torrent. Użyjemy okna przeglądarki internetowej, aby uzyskać dostęp do GUI i dodać torrent. Najpierw zezwólmy na dostęp do GUI przez zaporę sieci LAN, a następnie ponownie uruchom demona transmisji.

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

Odwiedź ten adres URL w przeglądarce Firefox (lub dowolnej innej przeglądarce): http://XXX.XXX.XXX.XXX:9091 , gdzie XXX jest zastąpiony adresem Twojego serwera w sieci LAN (tj. 192.168.1.10). Znajdź torrenta do pobrania, na przykład Big Buck Bunny w 1080p60hz. Jest to darmowy film krótkometrażowy, legalnie dostępny do pobrania za darmo. W interfejsie GUI transmisji kliknij przycisk „Otwórz torrent” i wklej ten link (lub dowolny inny torrent, który chcesz) do pierwszego pola. Następnie naciśnij „Prześlij”. Jeśli Transmisja działa poprawnie, torrent zacznie się pobierać. Jeśli tak się nie stanie, musisz dowiedzieć się, dlaczego, zanim przejdziesz dalej. W Internecie dostępnych jest wiele zasobów do używania demona transmisji. Może to być również torrent, który wybrałeś nie działa, wypróbuj najpierw kilka innych.

Po zakończeniu pobierania naciśnij Control+Cw oknie terminala, aby zatrzymać demona transmisji.

Skonfiguruj transmisję wiązania do interfejsu VPN

Teraz stwórzmy skrypt Upstart, który będzie używany do rozpoczęcia Transmisji, gdy VPN będzie gotowy.

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

Nie martw się, jeśli to narzeka, wystarczy wykonać kopię zapasową pliku Upstart, jeśli taki istniał - może nie mieć. Otwórzmy vima, aby edytować nowy:

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

Wklej to do edytora:

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

Zapisz i zamknij vim. ( Escape, a następnie wpisz :wq). Ponownie otwórz vim:

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

I wklej to:

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

Ponownie zapisz i zamknij vim. ( Escape, a następnie wpisz :wq). Wreszcie:

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

Wklej to:

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

Skrypty te informują Upstart, aby nasłuchiwał sygnału „transmisja-VPN-up”. Skrypt „Transmission-up.conf” następnie konfiguruje wymagane reguły routingu, aby wysyłać ruch z lokalnego adresu VPN za pośrednictwem interfejsu VPN, i ustawia zaporę sieciową, aby zezwalać na ruch z VPN do portu nasłuchiwania dla transmisji. Ruch kierowany do portu nasłuchiwania transmisji z normalnego interfejsu LAN jest blokowany. Następnie skrypt „transmisja-daemon.conf” uruchamia demona transmisji z ustawieniami wymaganymi do powiązania go z adresem IP VPN. Zauważ, że to polecenie zapewni również wyłączenie UPnP / NAT-PMP - patrz moja uwaga na górze na temat przekierowywania portów. „Ładne -15” ustawia Transmission na niższy priorytet, co uważam za użyteczne przy użyciu BeagleBone o niższej specyfikacji - czasami Transmisja może pochłaniać zasoby, co spowalnia system. Przynajmniej z niskim priorytetem mogą nadal działać ważniejsze zadania systemowe. Skrypt „transmisja-w dół.conf” usunie reguły zapory, gdy VPN zostanie zatrzymany. Wykorzystywane są trzy różne skrypty, dzięki którym demon transmisji może być uruchamiany jako użytkownik nieuprzywilejowany, ale reguły zapory można uruchamiać jako root.

Teraz wróćmy do ustawień OpenVPN i edytuj skrypty „route-up” i „down”, aby uruchomić uruchamianie i zatrzymywanie naszego skryptu Transmission.

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

Wklej to do vima:

#! /bin/bash

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

Wszystko, co robi ten skrypt, mówi Upstartowi, że demon transmisji powinien się uruchomić, i dostarcza mu informacji potrzebnych do przyłączenia się do połączenia VPN.

sudo vim /opt/ibVPN/down.sh

Ponownie, więcej wklejania:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Ten skrypt jest jeszcze prostszy - sygnalizuje zatrzymanie demona transmisji.

W tym momencie prawdopodobnie dobrym pomysłem jest upewnienie się, że właścicielem całego folderu konfiguracji VPN jest użytkownik root - ponieważ te skrypty działają jako root, każdy, kto mógłby je zmienić, może uruchomić wszystko, co chce jako użytkownik root.

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

Oznacza to teraz, że tylko użytkownik root może modyfikować lub przeglądać ustawienia połączenia VPN.

OK, już prawie gotowe! Sprawdźmy, czy nasza konfiguracja działa do tej pory:

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

Połącz się ponownie z internetowym interfejsem GUI Transmission i wznów istniejący torrent lub dodaj nowy. Powinien być w stanie pobrać, może po kilku minutach oczekiwania na rówieśników. Sprytny sposób na sprawdzenie, czy działa, to sprawdzenie iftop. Zainstaluj iftop i uruchom:

sudo apt-get install iftop
sudo iftop -i tap1

Ten ekran pokaże wszystkie połączenia działające przez VPN. Jeśli Twój torrent pobiera i poprawnie korzysta z VPN, będzie tutaj wiele adresów IP i nazw hostów. Zobacz także iftop dla połączenia LAN:

sudo iftop -i eth0

Tutaj powinieneś zobaczyć dużą ilość ruchu do jednego adresu IP, będącego serwerem VPN, a następnie tylko minimalny ruch do innych urządzeń LAN - zakładając, że nie korzystasz z innych usług na BeagleBone.

Możesz potwierdzić, że VPN działa, postępując zgodnie z tymi instrukcjami .
Ta strona pozwala ci pobrać torrent, aby zobaczyć adres IP, z którego korzystają inni rówieśnicy, aby się z tobą połączyć - jeśli wszystko działa, będzie to adres IP VPN, a nie twój własny adres IP WAN.

Jeśli masz problemy, możesz wyświetlić dziennik błędów Upstart, wykonując:

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

W osobnym oknie terminalu / SSH spróbuj uruchomić komendę tail podczas uruchamiania połączenia VPN jak wyżej i poszukaj komunikatów o błędach. Mamy nadzieję, że uda Ci się rozwiązać problem, wyświetlając komunikaty o błędach, jeśli nie masz dostępu do Internetu lub opublikujesz komentarz.

Skonfiguruj wszystko, aby uruchamiało się automatycznie

Jeśli jesteś zadowolony z ręcznego wydania polecenia uruchomienia tunelu OpenVPN lub chcesz to zrobić za pomocą własnego skryptu, to koniec. Ale chciałem, żeby zaczął się przy rozruchu, więc stworzyłem kolejny skrypt Upstart, aby uruchomić OpenVPN.

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

To ostatnia rzecz, którą musimy wkleić!

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

Wystarczy poczekać, aż system zasygnalizuje, że sieć jest gotowa, a następnie uruchomi tunel OpenVPN - co z kolei rozpocznie transmisję. Gdy system zostanie wyłączony lub z jakiegoś powodu sieć zostanie zamknięta, Upstart usunie reguły zapory i zamknie demona transmisji. Prosty! To będzie nadal działać po ponownym uruchomieniu, więc teraz wszystko jest gotowe.

Aby wchodzić w interakcje z transmisją, użyj internetowego interfejsu GUI, tak jak w fazie konfiguracji. Możliwe jest również udostępnienie interfejsu GUI przez Internet poprzez skonfigurowanie przekierowania portów. Istnieje wiele samouczków, jak to zrobić, więc nie powtórzę tego tutaj.

Jeśli chodzi o pobieranie ukończonych pobrań z BeagleBone, używam NFS. Mogę uzyskać prędkość około 8 MB / s kopiowania przez sieć LAN z BeagleBone na mój komputer stacjonarny - co jest całkiem dobre w przypadku tak słabego urządzenia. Ubuntu zawiera przydatne informacje na temat konfiguracji.


Łał! Jak długo spędziłeś na poszukiwaniu tych wszystkich rzeczy?
Ismael Miguel

Haha, dość długo. Zrobiłem to już raz na routerze DD-WRT, a potem, gdy robiłem to ponownie dla BeagleBone, pomyślałem, że napiszę to, więc nie zapomnę, jak to zrobić. : D
seanlano

1
Powinieneś także przeczytać to: unix.stackexchange.com/questions/88693/… (To świetna odpowiedź.) To ci pomoże, jestem tego pewien.
Ismael Miguel

3
Właśnie zdałem sobie sprawę, po ustawieniu mojego serwera DNS do korzystania z OpenDNS i przejrzeniu statystyk, że ta konfiguracja przecieka DNS przez normalne połączenie WAN . Zbadam dalej, aby sprawdzić, czy mogę to naprawić. I tak będę nadal działać, ponieważ samo połączenie odbywa się przez VPN - ale nie jest idealne.
seanlano

1
@seanlano Dziękujemy za zwrócenie nam na to uwagi. Daj nam znać, jeśli / kiedy znajdziesz poprawkę.
Winterflags,

7

Właśnie uruchomiłem ten system za pomocą SystemD, więc pomyślałem, że się podzielę. Umieściłem wszystkie moje skrypty, konfiguracje i certyfikaty w tym samym katalogu, do którego będę się odnosił/etc/openvpn/myprovider

Konfiguracja OpenVPN

Zależy to od konkretnej sieci VPN, ale jedna różnica w porównaniu z konfiguracją @ seanlano polega na tym, że używam tylko route-upskryptu. Więc oprócz potrzebnej konfiguracji pod warunkiem , potrzebujesz:

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

Gdzie umieścisz transmission-route-up.shskrypt gdziekolwiek chcesz. Zwróć uwagę na brak downskryptu. (Moja sieć VPN już używała niestandardowego skryptu wyłączania, więc i tak byłaby w konflikcie).

/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

printenvWażna jest pierwsza linia . Umieść go w dowolnym miejscu, będzie później używany w usłudze SystemD. Umieszczam go w tym samym katalogu, co moja konfiguracja VPN.

Zastąp 24328 dowolnym portem, na którym demon transmisji powinien nasłuchiwać. Używam iptables (używam Debiana), więc prawdopodobnie możesz zamienić te linie na linie ufw z konfiguracji @ seanlano.

Usługa SystemD VPN

Jest to usługa, która automatycznie uruchamia dla nas VPN. Sprawdź, czy ścieżka do openvpn jest poprawna na twoim komputerze, a także czy ścieżka do pliku konfiguracyjnego jest poprawna. Państwo musi podać pełne ścieżek w usługach 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

Włącz usługę VPN za pomocą:

systemctl enable my-vpn.service

I przetestuj za pomocą:

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

Jeśli jest uruchomiony / działa, jesteś dobry.

SystemD Transmission-daemon.service

Ten skrypt wymaga usługi VPN, więc jeśli VPN ulegnie awarii, demon transmisji również ulegnie awarii. Jest to przydatne, jeśli VPN zostanie zrestartowane, a otrzymasz nowy adres IP, ponieważ transmisja będzie musiała się zrestartować i ponownie powiązać, co powinno być obsługiwane automatycznie. Zauważ, że korzystamy ze zmiennych środowiskowych, które wydrukowaliśmy route-upwcześniej w skrypcie.

/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

Odblokuj to

systemctl enable transmission-daemon.service

I zacznij to

systemctl start transmission-daemon.service

Po ponownym uruchomieniu wszystko powinno rozpocząć się automatycznie (w kolejności!). Zauważ, że używanie Type=simplew usłudze VPN powoduje pewne problemy z czasem zamawiania skryptów, dlatego zalecam używanie forkingzamiast tego.

Możesz podać rzeczywisty adres IP dla, rpc-bind-addressjeśli chcesz być bardziej restrykcyjny (jest to adres nasłuchiwania w GUI sieci, który nie powinien być twoim VPN-ip). A jeśli chcesz ładnie uruchomić transmisję, po prostu zmień ExecStartlinię i dodaj /usr/bin/nice -n15do początku.

Obsługa zmian adresu

Z czasem zauważyłem, że jeśli połączenie VPN z jakiegoś powodu otrzyma nowy adres IP, transmisja będzie nadal wiązana ze starym adresem i przestanie działać. I po prostu robienie systemctl restart transmission-daemon.servicetego nie ogranicza. Musi się całkowicie zatrzymać, a następnie zacząć od nowa.

Nie mam pojęcia dlaczego, ale z tego powodu dodałem następujące wiersze do mojej root 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

Nie interesuje mnie to, czy działa to również na BeagleBone? Jeśli tak, czy widzisz problemy z wydajnością transmisji? Również świetne napisanie. :)
seanlano

Ah nie. Działa na moim normalnym komputerze stacjonarnym i nie zauważyłem żadnych problemów.
Jonas Kalderstam

Słusznie. Działa dla mnie dobrze na maszynie Intela, miałem nadzieję, że uda mi się stworzyć tani box torrentowy z procesorem ARM - ale najwyraźniej tak nie jest.
seanlano

Sprawdź rtorrent. Jest bardzo wydajny
Jonas Kalderstam

Dzięki, będe. Inne rzeczy działają poprawnie na ramce ARM, więc może rtorrent będzie działał poprawnie.
seanlano

3

Zauważyłem, że wspomniałeś, że transmisja nie przechodzi przez VPN dla UPnP / NAT-PMP. Zauważyłem to również i stworzyłem łatkę do Transmisji, która honoruje ustawienie bind-address-ipv4 dla UPnP. NAT-PMP jest nieco trudniejszy do wdrożenia, ponieważ musisz określić domyślną bramę. UPnP jest jednak głównym obecnie używanym, więc prawdopodobnie jest wystarczająco dobry. Zalogowałem to jako błąd na stronie trac.transmissionbt i podałem łatkę. Mam nadzieję, że zostanie włączony do przyszłej wersji. https://trac.transmissionbt.com/ticket/5990

Inną opcją dla teraz, jeśli nie chcesz ponownej kompilacji, jest ręczne uruchomienie upnpc z pakietu miniupnpc. Na przykład

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

Gdzie 10.10.10.51 to Twój adres IP VPN, a 51515 to żądany port TCP / UDP.

Nie jestem pewien, na jak długo spedycja jest dobra. Możesz także użyć opcji „-d”, aby usunąć port podczas odłączania. Odkryłem, że jeśli tego nie zrobię, nie będę mógł uzyskać tego samego portu, jeśli ponownie zaloguję się do sieci VPN.

Twoje zdrowie


Spędziłem wieki próbując znaleźć takie rozwiązanie, szkoda, że ​​nie znalazłem miniupnpc! Mam nadzieję, że łatka zostanie scalona i ten problem zostanie rozwiązany na zawsze. W międzyczasie na pewno będę próbował użyć twojej przydatnej wskazówki.
seanlano,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.