OpenVPN üzerinden iletim arka plan programı


20

Yakın zamanda bu yöntemi kullanarak Ubuntu'yu kurduğum bir BeagleBone Black aldım . Her şey şimdiye kadar çalıştı. BeagleBone'umu torrent kutusu olarak kullanmak istiyorum, ancak doğrudan İnternet bağlantım üzerinden yapmak istemiyorum (ISS'imin beğeneceğini sanmıyorum) - bu yüzden bir Avrupa sunucusundan bir VPN aboneliği satın aldım . Dizüstü bilgisayarımı daha önce bu VPN'ye manuel olarak bağladım ve Aktarım'ı çalıştırın. VPN bağlantısının Ubuntu'da çalıştığını ve ana bilgisayarın OpenVPN için kurulum bilgileri sağladığını biliyorum. Rahatsız edici bir şekilde, atanan IP adresinin dinamik yapısı, sık sık değişeceği anlamına gelir, bu yüzden dizüstü bilgisayarımı VPN ile kullandığımda, Aktarım'daki dinleme adresini manuel olarak gerekli değere ayarlayacağım.

İdeal olarak aşağıdaki kurulumu istiyorum:

  • İletim yalnızca VPN üzerinden çalışır ve normal WAN bağlantısı üzerinden torrent çalıştırmak yasaktır
  • Yalnızca İletime yönlendirilen trafik VPN üzerinden kabul edilir veya gönderilir, diğer tüm istenmeyen trafik kaldırılır
  • İletim, atanan IP adresine bağlı olarak dinlemek için uygun bağlantı noktasını kullanır
  • OpenVPN önyükleme sırasında otomatik olarak başlar ve daha sonra İletimi başlatır
  • İletimin web GUI'sine LAN üzerinden ve muhtemelen Internet üzerinden WAN bağlantımdan erişilebilir (yani VPN üzerinden geri alınamaz)

3
Kendi kendine cevaplar fena değil. Onlar için özür dileme. Ayrıca ne yaptığınızı da açıklamak zorunda değilsiniz ... Bu cesaret verici bir davranış
RobotHumans

@Hbdgaf ile aynı fikirde. Özre gerek yok. Tüm cephelerde harika çalışmalar.
JakeGould

Yanıtlar:


23

Not: (2016-02-22) Bu yapılandırmanın, VPN üzerinden göndermek yerine normal WAN üzerinden torrent izleyicilere DNS sorguları sızdırdığını fark ettim. Bunu nasıl düzelteceğimi araştırıyorum. Bağlantının kendisi VPN'yi doğru kullandığından yapılandırmamı kullanmaya devam edeceğim.


Güncelleme: Transmission'u bir gecede Beaglebone'a indirilecek şekilde ayarladığımda CPU kullanımının bir süre sonra% 100'e çıktığını fark ettim. Aynı süre sonra gerçekleşmiyor gibi görünüyor, bazen bütün gece iyi, diğer zamanlarda 10 dakika sonra mücadele ediyor. Ayrıca, tüm torrentleri duraklatarak ve CPU yükünün normale dönmesini bekleyip tekrar başlayarak da iyileşebilir. Hala araştırıyorum. Geçici bir çözüm, çok iyi bir geçici çözüm olmasa da, torrentleri periyodik olarak duraklatmak ve devam ettirmek olabilir. Bu sorunun yalnızca Beaglebone ve muhtemelen diğer ARM cihazları için geçerli olduğunu unutmayın . Bu sorunu hiç x86 işlemcide yaşamadım.


Giriş

Bu çözümü bir BeagleBone Black üzerinde çalışan Ubuntu 14.04 için geliştirdim ve test ettim. Kullandığım VPN sağlayıcısına ibVPN deniyor . Yine de desteklenen herhangi bir donanımla (yani "normal" x86 bilgisayarında), herhangi bir OpenVPN uyumlu VPN sağlayıcısıyla çalışmalı ve muhtemelen 14.10 veya üstü için çalışmalıdır. Bir noktada Ubuntu'nun önyükleme için SystemD kullanacağına inanıyorum, bu da burada kullanılan Upstart komut dosyalarının taşınması gerektiği anlamına gelir. Güncelleme: Jonas Kalderstam'ın SystemD'i kullanmak için aşağıda bir cevabı var . Ayrıca ufw güvenlik duvarı olarak kullanıldığını varsayıyorum, farklı bir şey kullanıyorsanız, burada ufw komutlarının değiştirilmesi gerekecektir.

Tüm işlerin sisteme bir SSH bağlantısı üzerinden yapıldığını varsayıyorum, ancak fiziksel bir terminale yazıldığında da işe yarayacaktır.

Bu oldukça uzun bir öğreticidir, lütfen önce hepsini okuyun ve ne yapacağınızdan emin olun.

İletimin UPnP / NAT-PMP verilerini göndermek için bir IP adresine düzgün bir şekilde bağlanmadığını da fark ettim - yani torrent verileri VPN'den doğru bir şekilde geçiyor, ancak UPnP bağlantı noktası iletme etkinse İletim bağlantı noktasını yerel yönlendiriciden iletmeyi isteyecek VPN sunucusundaki VPN üzerinden değil. Bu nedenle, Upstart komut dosyasını bağlantı noktası yönlendirmeyi devre dışı bıraktım, çünkü çalışmış gibi görünebilir, ancak çalışmadı. Debian iletim kullanıcısından VPN üzerinden tüm trafiği zorlamak için iptables ve iproute kullanmak mümkün olmalı, ancak hala buna bakıyorum. Varsayılan yol tüm Internet verilerini VPN üzerinden göndermek için değiştirilmişse de çalışmalıdır, ancak bunu yapmak istemedim çünkü bu sunucuyu başka şeyler için de kullanıyorum ve bu da tüm sistem güncellemelerinin VPN.UPnP'nin VPN üzerinde çalışmasını gerçekten istiyorsanız, bu sorunun daha fazla bilgisi vardır . Güncelleme: falk0069, VPN üzerinden UPnP'yi teşvik etmek için aşağıda harika bir ipucuna sahiptir .

OpenVPN'i kurma ve yapılandırma

VPN bağlantınızı Ubuntu'yu kullanarak burada (yani bir masaüstünden) çalışmaya başlamadan önce çalıştırmayı denemenizi tavsiye ederim. Bu, doğru yapılandırmaya sahip olduğunuzu doğrular ve hata ayıklama için harcanan zamanı azaltır.

İlk olarak, gerekli paketleri yükleyin

sudo apt-get install openvpn

Ardından, yapılandırma dosyalarını depolamak için bir dizin oluşturun. / Opt / ibVPN kullanıyorum, çünkü kullandığım sağlayıcı bu. İstediğiniz gibi değiştirin.

sudo mkdir /opt/ibVPN

Bu yeni dizinde yapılacak ilk şey, VPN istemcisini çalıştırmak için yapılandırma dosyası oluşturmaktır. ibVPN, Linux kullanıcıları için çoğunlukla kopyalayıp yapıştırdığım temel bir yapılandırma dosyası sağlar.

cd /opt/ibVPN
sudo vim config.ovpn

VPN sağlayıcınızın ayarlarını kullanarak düzenlenmiş sürümünüzü kopyalayıp vim'e yapıştırın. (FYI, Ubuntu terminaline yapıştırın Ctrl+Shift+V) Bunu VPN sağlayıcınızdan alabilmelisiniz.

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 bilgisi olmayanlar basın Insert yazmak için ya sonra basın metni yapıştırın Escape ve yazın :wq kaydedip çıkmak için. Tabii ki, vim kullanmak zorunda değilsiniz - herhangi bir metin editörü çalışacaktır.

Bu yapılandırma dosyasını hızlı bir şekilde açıklayacağım: İlk 18 satır, sunucuyla kullanılacak belirli ayarları belirtir, bunlar ibVPN'den geldi - farklı bir sağlayıcınız varsa muhtemelen sizinki biraz farklı olacaktır. Sonraki satırlar, belirttiğim değiştirilmiş seçenekler.

  • Ayarlar dosyanızda herhangi bir satır varsa auth-user*bunları yorumlayın. Bu kurulumun otomatik olarak çalışması için, içinde kullanıcı adı ve şifre bulunan bir dosyaya ihtiyacımız var - bu yüzden VPN sağlayıcısı için seçtiğiniz şifrenin güçlü, rastgele ve benzersiz olduğundan emin olun.

  • auth-user-pass passAdlı bir dosyayı bakmak için OpenVPN'i söyler passkullanıcıyı ve parola okumak için.

  • auth-nocache şifreyi bellekten kaldırır, bu da endişelenirseniz güvenliği biraz artırabilir.

  • persist-tun bağlantınız kesilirse aynı IP adresini sunucudan tutmaya çalışacaktır, bu da İletim-arka plan programının daha az başlatılması ve durdurulması anlamına gelecektir.

  • route-noexecOpenVPN istemcisine, sunucunun sağladığı tüm ağ trafiğini VPN üzerinden çekecek yolları otomatik olarak kullanmamasını söyler. Sadece torrent trafiği göndermek istiyoruz, bu yüzden farklı yönlendirme ayarları kullanmamız gerekecek.

  • lport 1195 OpenVPN istemcisine 1194 yerine 1195 bağlantı noktasını kullanmasını söyler - benim durumumda da aynı cihazda bir OpenVPN sunucusu çalıştırmak istiyorum ve sunucunun 1194 bağlantı noktasını kullanması gerekecek. Bir OpenVPN sunucusu çalıştırmasanız bile, bu değişikliği yapmak acıtmaz.

  • Ben çizgi değişti dev tapetmek dev tap1, TAP1 olmak yerine yine çünkü ayrı OpenVPN sunucusu çalışan, OpenVPN tarafından atandığı sanal cihazı zorlamak için. Bir VPN sunucusu çalıştırmasanız bile, bu değişiklik önemli değil. Güvenlik duvarı komut dosyaları kullanılmak üzere yazılmıştır tap1, bu nedenle başka bir aygıt kullanmayı tercih ederseniz, uygun olduğunda bu komut dosyalarını değiştirmeyi unutmayın.

  • lladdr 00:FF:11:AA:BB:CC OpenVPN'e musluk arayüzünü iptables güvenlik duvarı kuralları için yararlı olabilecek bu MAC adresine sahip olarak atamasını söyler.

  • route-upve downİletim-arka plan programını gerektiği şekilde başlatmak ve durdurmak için komut dosyalarını çalıştırın - bunlar burada gereklidir, çünkü bunlar İletimi doğru IP adresine ve bağlantı noktasına doğru şekilde bağlamak için gerekli olan bağlantı hakkında bilgi içeren ortam değişkenleriyle çalışır.

Benim durumumda, VPN sağlayıcısından bir sunucu sertifikası aldım - bu da yapılandırma dosyasıyla aynı dizinde olmalıdır.

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

Bunu kopyalayıp yapıştırın veya SCP veya SSHFS ile taşıyın.

-----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-----

Açıkçası bir ibVPN hesabı kullanmıyorsanız, sertifikanız farklı olacaktır.

Şimdi şifre dosyasını yapalım:

sudo vim /opt/ibVPN/pass

İlk satırın tam kullanıcı adı, ikinci satırın şifre olması gerekir. Bu, dosyanın yalnızca içeriği olmalıdır.

you@address.com
myBIGstrongpassword1234567890

Ayrıca bu dosyadaki izinleri korumalıyız, aksi takdirde OpenVPN başlamaz.

sudo chmod 400 pass

Bu, dosyayı salt okunur ve yalnızca sahip için yapar (başka bir kullanıcı dosyayı hiç okuyamaz)

Bu komutlar başlangıçta çalıştırılacak dosyaları oluşturur ve bunları yalnızca kök tarafından çalıştırılabilir olacak şekilde ayarlar.

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

Bu noktada, VPN bağlantısının gerçekten çalışıp çalışmadığını test etmek muhtemelen iyi bir fikirdir. Bağlantıyı şununla başlatın:

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

Yukarı ve aşağı harici komutların çalıştırılamayacağına dair uyarılar görürsünüz, ancak bunun için endişelenmeyin. Çalışırsa Initialization Sequence Completedterminalde göreceksiniz . Control+CBağlantıyı bitirmek için tuşuna basın . Eğer işe yaramazsa, nedenini araştırmamalı ve devam etmeden önce düzeltmelisiniz. Bazen çalışmaya başlamak birkaç zaman aldı. Şifre dosyanızın doğru olduğundan emin olun. İnternette OpenVPN hakkında birçok harika kaynak var, bu yüzden etrafa bir göz atın.

Bu noktada, muhtemelen İletimi çalıştırmaya başlamak en kolay yoldur. Hem VPN'nin hem de İletimin ayrı çalışabileceğinden emin olduktan sonra birleştirilebilirler.

İletimi Yükleme ve Yapılandırma

Gerekli paketleri kurun:

sudo apt-get install transmission-daemon

Varsayılan olarak, İletim önyüklemede otomatik olarak çalışır. Nihayetinde İletimi başlatmak için OpenVPN kullanacağımızdan, bunu devre dışı bırakmak istiyoruz. Bunu yapmak için Transmission-daemon için yapılandırma dosyasını düzenleyin

sudo vim /etc/default/transmission-daemon

Ve okumak için aşağıdaki satırı değiştirin:

ENABLE_DAEMON=0

Şimdi İletim önyüklemede başlamayacak.

Şimdi İletim ayarlarının ikamet etmesi ve indirilen torrentlerin girmesi için bir dizin oluşturalım. Bu, zaten bir tür disk kurduğunuzu ve / media / arm-disk / dizinine monte edildiğini varsayar. Güvenlik amacıyla, arka plan programı "root" veya "ubuntu" yerine kendi kullanıcısı tarafından çalıştırılır. Yükleyici tarafından iletim-arka plan programı, "debian-transmission" için yeni bir kullanıcı oluşturulur. Bu kullanıcının oluşturduğumuz klasöre sahip olması ve indirilen torrentler için depolama konumuna okuma ve yazma erişimi olması gerekir.

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

Şimdi iletimi başlatmamız gerekiyor, sadece kısaca, ihtiyacımız olan ayarlar dosyasını oluşturuyor:

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

Bu komut debian-transmission kullanıcısı olarak transmission-daemon uygulamasını başlatır, ona ayarlar dosyaları için / opt / transmission dizinini kullanmasını söyler ve ön planda çalışmaya devam etmesini söyler. Birkaç saniye çalıştıktan sonra, Control+Cbitirmek için tuşuna basın . Şimdi ayarlar dosyasını düzenleyebiliriz.

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

Şimdi okumak için varsayılanlarından aşağıdaki satırlara geçmemiz gerekiyor:

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

Kaydet ve çık (Escape, wq yazıp Enter tuşuna basın)

Ortadaki iki düzenleme, "tamamlanmamış" dizininin kullanılmasını sağlayarak, tamamlanmış torrentlerinizi bitmemiş olanlardan ayırır. Bu tamamen gerekli değil, ama kişisel olarak son derece yararlı buluyorum. Son düzenleme, web GUI'ye LAN üzerindeki herhangi bir bilgisayar tarafından erişilmesini sağlar (LAN alt ağınızın 192.168.1.0 olduğunu varsayarsak, farklıysa bunu değiştirin).

Transmission'ı tekrar çalıştırmak, çalışıp çalışmadığını ve gerçekten bir torrent indirip indiremeyeceğini görmek iyi bir fikirdir. GUI'ye erişmek ve bir torrent eklemek için bir web tarayıcı penceresi kullanacağız. İlk olarak, LAN'dan güvenlik duvarı üzerinden web GUI'ye erişime izin verelim, sonra iletim-arka plan programını tekrar çalıştıralım.

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'ta (veya hangi tarayıcıyı tercih ederseniz edin) bu URL'yi ziyaret edin: http://XXX.XXX.XXX.XXX:9091 ; burada XXX, LAN üzerindeki sunucunuzun adresi ile değiştirilir (ör. 192.168.1.10). İndirmek için bir torrent bulun, örneğin 1080p60hz'de Big Buck Bunny. Bu yasal olarak ücretsiz olarak indirilebilecek ücretsiz kısa bir film. İletim GUI'sinde "Torrent'i Aç" düğmesini tıklayın ve bu bağlantıyı (veya istediğiniz diğer torrentleri) ilk kutuya yapıştırın . Ardından "Yükle" düğmesine basın. Transmission düzgün çalışıyorsa, torrent indirilmeye başlayacaktır. Değilse, devam etmeden önce nedenini bulmanız gerekecektir. İnternette iletim-arka plan programı kullanmak için birçok kaynak bulunmaktadır. Ayrıca seçtiğiniz torrent çalışmıyor olabilir, önce birkaç tane daha deneyin.

İndirme işlemi tamamlandıktan sonra Control+Ciletim penceresini durdurmak için terminal penceresinde tuşuna basın .

VPN arayüzüne bağlanma iletimini yapılandırın

Şimdi VPN hazır olduğunda İletimi başlatmak için kullanılacak bir Upstart komut dosyası yapalım.

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

Bu şikayet ederse endişelenmeyin, sadece Upstart dosyasının bir yedeğini almak, eğer varsa, olmayabilir - olmayabilir. Yenisini düzenlemek için vim'i açalım:

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

Bunu editöre yapıştırın:

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'i kaydedin ve kapatın. ( Escapeyazın :wq). Yine, açık vim:

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

Ve bunu yapıştırın:

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

Tekrar vim kaydedin ve kapatın. ( Escapeyazın :wq). En sonunda:

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

Bunu yapıştırın:

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

Bu komut dosyaları Upstart'a "transmission-vpn-up" sinyalini dinlemesini söyler. "Transmission-up.conf" betiği daha sonra VPN arayüzü üzerinden yerel VPN adresinden trafik göndermek için gerekli yönlendirme kurallarını belirler ve güvenlik duvarını VPN'den İletim için dinleme bağlantı noktasına trafikte izin verecek şekilde ayarlar. Normal LAN arabiriminden Şanzıman'ın dinleme bağlantı noktasına yönlendirilen trafik engellendi. Daha sonra "transmission-daemon.conf" betiği, iletim-daemon'u VPN IP adresine bağlamak için gerekli ayarlarla başlatır. Bu komutun UPnP / NAT-PMP'nin devre dışı bırakılmasını da sağlayacağını unutmayın; bağlantı noktası yönlendirme hakkındaki en üstteki notuma bakın. "Güzel -15", İletimi daha düşük bir önceliğe sahip olarak ayarlar. bu da sistemi yavaşlatır. En azından düşük bir öncelikle, daha önemli sistem görevleri devam edebilir. "Transmission-down.conf" betiği, VPN durdurulduğunda güvenlik duvarı kurallarını kaldırır. İletim-arka plan programının ayrıcalıksız bir kullanıcı olarak çalıştırılabilmesi için üç farklı komut dosyası kullanılır, ancak güvenlik duvarı kuralları kök olarak çalıştırılabilir.

Şimdi OpenVPN ayarlarına geri dönelim ve İletim komut dosyamızın başlatılmasını ve durdurulmasını tetiklemek için "rota" ve "down" komut dosyalarını düzenleyelim.

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

Bunu vim'e yapıştırın:

#! /bin/bash

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

Tüm bu komut dosyasının Upstart'a aktarım-arka plan programının başlaması gerektiği ve VPN bağlantısına eklemek için gereken bilgileri verdiği söylenir.

sudo vim /opt/ibVPN/down.sh

Yine, daha fazla yapıştırma:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Bu komut dosyası daha da basittir - iletim arka plan programının durması için sinyal verir.

Bu noktada, tüm VPN yapılandırma klasörünün sahibinin kök kullanıcı olduğundan emin olmak iyi bir fikirdir - bu komut dosyaları kök olarak çalıştığından, bunları değiştirebilen herkes kök kullanıcı olarak istedikleri her şeyi çalıştırabilir.

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

Bu, artık yalnızca kök kullanıcının VPN bağlantı ayarlarını değiştirebileceği veya görüntüleyebileceği anlamına gelir.

Tamam, neredeyse bitti! Kurulumumuzun şu ana kadar çalışıp çalışmadığını test edelim:

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

İletim web GUI'sine tekrar bağlanın ve mevcut torrent'i devam ettirin veya yeni bir tane ekleyin. Belki akranları bekledikten birkaç dakika sonra indirebilmelidir. Çalışıp çalışmadığını test etmenin şık bir yolu iftop'a bakmaktır. İftop'u yükleyin ve çalıştırın:

sudo apt-get install iftop
sudo iftop -i tap1

Bu ekran VPN üzerinden çalışan tüm bağlantıları gösterecektir. Torrent'iniz indiriyorsa ve VPN'yi doğru şekilde kullanıyorsa, burada çok sayıda IP adresi ve ana bilgisayar adı olacaktır. Ayrıca LAN bağlantısı için iftop'a bakın:

sudo iftop -i eth0

Burada, tek bir IP adresine, VPN sunucusu olarak büyük miktarda trafik görmeli ve daha sonra BeagleBone cihazınızda başka hizmetler çalıştırmadığınız varsayılarak diğer LAN cihazlarına yalnızca minimum trafik görmelisiniz.

Bu talimatları uygulayarak VPN'nin çalıştığını doğrulayabilirsiniz .
Bu site, diğer eşlerin size bağlanmak için kullandıkları IP adresini görmek için bir torrent indirmenize izin verir - her şey çalışıyorsa, bu kendi WAN IP adresiniz değil, VPN IP adresi olacaktır.

Sorun yaşıyorsanız, Upstart hata günlüğünü aşağıdakileri yaparak görebilirsiniz:

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

Ayrı bir terminal / SSH penceresinde, VPN bağlantısını yukarıdaki gibi başlatırken tail komutunu çalıştırmayı deneyin ve hata mesajlarını arayın. İnşallah, internette bir kazma yoksa, sorunu hata mesajlarını görmekten çözebilir veya yorum gönderebilirsiniz.

Tümünü otomatik olarak başlayacak şekilde yapılandırın

OpenVPN tünelini başlatma komutunu manuel olarak vermekten memnunsanız veya bunu kendi komut dosyanızla yapmak istiyorsanız, işiniz bitti demektir. Ama önyüklemede başlamasını istedim, bu yüzden OpenVPN'i başlatmak için başka bir Upstart betiği yaptım.

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

Yapmamız gereken son şey bu!

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

Tüm bunlar, sistemin ağın hazır olduğunu bildirmesini beklemek ve daha sonra OpenVPN tünelini başlatacak - bu da İletimi başlatacak. Sistem kapatıldığında veya bir nedenle ağ iletişimi kapatılırsa, Upstart güvenlik duvarı kurallarını kaldırır ve iletim arka plan programını kapatır. Basit! Bu, yeniden başlatmadan sonra da çalışmaya devam edecektir, bu yüzden artık hazırsınız.

İletim ile etkileşime geçmek için, kurulum aşamasında yaptığımız gibi web GUI'sini kullanın. Bağlantı noktası yönlendirmeyi ayarlayarak GUI'yi İnternet üzerinden erişilebilir hale getirmek de mümkündür. Bunun nasıl yapılacağı konusunda çok sayıda öğretici var, bu yüzden burada tekrar etmeyeceğim.

Tamamlanan indirmeleri BeagleBone'dan almak için NFS kullanıyorum. BeagleBone'dan masaüstü bilgisayarıma LAN üzerinden yaklaşık 8 MB / s kopyalama hızı elde edebilirim - bu, düşük güçlü bir cihaz için oldukça iyidir. Ubuntu, bunu ayarlamak için bazı kullanışlı bilgiler sağlar .


Vaov! Tüm bu şeyleri aramak için ne kadar zaman harcadınız?
Ismael Miguel

Haha, oldukça uzun bir süre. Daha önce bir DD-WRT yönlendirici üzerinde yapmıştım, sonra BeagleBone için tekrar i yaparken bunu yazacağımı düşündüm, bu yüzden nasıl yapılacağını unutma. : D
seanlano

1
Ayrıca şunu da okumalısınız: unix.stackexchange.com/questions/88693/… (Harika bir cevap.) Bu size yardımcı olacaktır, eminim.
Ismael Miguel

3
DNS sunucumu OpenDNS kullanacak şekilde ayarladıktan ve istatistikleri inceledikten sonra, bu yapılandırmanın normal WAN bağlantısı üzerinden DNS sızdırdığını fark ettim . Bunu düzeltebileceğimi görmek için daha fazla araştırma yapacağım. Yine de çalışmaya devam edeceğim, çünkü bağlantının kendisi VPN üzerinden - ama ideal değil.
seanlano

1
@seanlano Bunu dikkatimize sunduğunuz için teşekkür ederiz. Bir düzeltme bulup bulmadığınızı / ne zaman bulduğunuzu bize bildirin.
Winterflags

7

Sadece SystemD kullanarak bu çalışma var bu yüzden paylaşacağımı düşündüm. Tüm komut dosyalarımı, yapılandırmalarımı ve sertifikalarımı aynı dizine/etc/openvpn/myprovider

OpenVPN yapılandırması

Bu sizin özel VPN'nize bağlıdır, ancak @ seanlano'nun yapılandırmasından bir fark, sadece bir route-upkomut dosyası kullanmamdır . Dolayısıyla, sağlanan sağlanan yapılandırmanıza ek olarak ihtiyacınız olan şeyler şu satırlardır:

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

transmission-route-up.shSenaryoyu istediğiniz yere yerleştirdiğiniz yer . Bir downkomut dosyasının bulunmadığına dikkat edin . (VPN'im zaten özel bir komut dosyası kullanıyordu, bu yüzden yine de çakışacaktı).

/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

İlk satır, printenvönemlidir. İstediğiniz yere yerleştirin, daha sonra SystemD hizmetinde kullanılır. Ben vpn yapılandırma ile aynı dizine yerleştirin.

24328'i , iletim arka plan cihazınızın dinlemesi gereken herhangi bir bağlantı noktasıyla değiştirin . Ben iptables (Debian kullanarak) kullanıyorum, bu yüzden muhtemelen bu satırları @ seanlano yapılandırmasından ufw satırlarıyla değiştirebilirsiniz.

SystemD VPN hizmeti

Bu, bizim için VPN'yi otomatik olarak başlatan hizmettir. Openvpn yolunun makinenizde doğru olduğunu ve config dosyasının yolunun da doğru olduğunu doğrulayın. Sen gerekir belirtmek tam systemd hizmetlerinde yolları.

/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 hizmetini aşağıdakilerle etkinleştirin:

systemctl enable my-vpn.service

Ve test edin:

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

Başlıyorsa / çalışıyorsa, iyisinizdir.

SystemD iletim-daemon.service

Bu komut dosyası vpn hizmetini gerektirir, bu nedenle vpn aşağı inerse iletim-daemon da aşağı iner. Bu, vpn yeniden başlatılırsa ve yeni bir IP adresi alırsanız kullanışlıdır, çünkü iletimin yeniden başlatılması ve yeniden bağlanması gerekecektir, bu da otomatik olarak ele alınmalıdır. route-upDaha önce komut dosyasında yazdırdığımız ortam değişkenlerini kullandığımızı unutmayın .

/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

Onu etkinleştir

systemctl enable transmission-daemon.service

Ve başla

systemctl start transmission-daemon.service

Yeniden başlattığınızda, her şey otomatik olarak başlamalıdır (sırayla!). Type=simpleVpn hizmetinde kullanmak komut dosyası sipariş zamanlaması için bazı sorunlara neden olduğunu unutmayın , bu nedenle forkingbunun yerine kullanmanızı öneririz .

rpc-bind-addressDaha kısıtlayıcı olmak istiyorsanız , gerçek bir ip adresi belirtebilirsiniz (bu, VPN-ip'iniz olmamalı web GUI dinleme adresidir). İletimi nice ile çalıştırmak istiyorsanız, ExecStartsatırı değiştirin ve /usr/bin/nice -n15başlangıca ekleyin .

Adres değişikliklerini işleme

Zamanla not ettiğim bir şey, herhangi bir nedenden dolayı vpn-bağlantısı yeni bir ip adresi alırsa, iletimin eski adrese bağlı olması ve çalışmayı durdurmasıdır. Ve sadece yapmak systemctl restart transmission-daemon.serviceonu kesmez. Tamamen durmalı ve sonra yeniden başlamalıdır.

Neden olduğu hakkında bir fikrim yok, ancak bu nedenle kök crontab ( sudo crontab -e) 'a aşağıdaki satırları ekledim :

# 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

Sadece ilgisiz, bu da bir BeagleBone üzerinde mi çalışıyor? Öyleyse, İletim ile ilgili performans sorunları görüyor musunuz? Ayrıca, harika bir yazı. :)
seanlano

Ah hayır. Normal masaüstü makinemde çalışıyor ve orada hiçbir sorun fark etmedim.
Jonas Kalderstam

Yeterince adil. Bir Intel makinede benim için iyi çalışıyor, bir ARM işlemci ile ucuz bir torrent kutusu yapabileceğimi umuyordum - ama görünüşe göre öyle değil.
seanlano

Rtorrent'i kontrol et. Çok performanslı
Jonas Kalderstam

Teşekkürler. ARM kutusundaki diğer şeyler iyi çalışır, bu yüzden belki de rtorrent düzgün çalışır.
seanlano

3

Transmission'ın UPnP / NAT-PMP için VPN'den geçmediğinden bahsettiğinizi fark ettim. Bunu da fark ettim ve İletim için bir yama oluşturdum, böylece UPnP için bind-address-ipv4 ayarını onurlandırdı. Varsayılan ağ geçidini belirlemeniz gerektiğinden NAT-PMP'nin uygulanması biraz daha zordur. UPnP bugünlerde kullanılan ana, bu yüzden muhtemelen yeterince iyi. Bu trac.transmissionbt sitesinde bir hata olarak oturum ve yama sağladı. Umarım gelecekteki bir sürümde yer alacaktır. https://trac.transmissionbt.com/ticket/5990

Yeniden derlemek istemiyorsanız şu an için başka bir seçenek, miniupnpc paketinden upnpc'yi manuel olarak çalıştırmaktır. Örneğin

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'niz ve 51515, istediğiniz TCP / UDP bağlantı noktasıdır.

Yönlendirmenin ne kadar sürdüğünden emin değilim. Bağlantıyı keserken bağlantı noktanızı kaldırmak için '-d' seçeneğini de kullanmak isteyebilirsiniz. Eğer bilmezsem VPN'ye tekrar giriş yaparsam aynı portu tekrar alamıyorum.

Şerefe


Yaşlarımı böyle bir çözüm bulmaya çalışarak geçirdim, keşke bulabilirdim miniupnpc! Ve umarım yama birleştirilir ve bu sorun sonsuza kadar çözülür. Bu arada kesinlikle kullanışlı ipucunu kullanmaya çalışacağım.
seanlano
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.