Daemon transmisi melalui OpenVPN

20

Saya baru-baru ini mengakuisisi BeagleBone Black, yang telah saya instal Ubuntu menggunakan metode ini . Semuanya telah bekerja sejauh ini. Saya ingin menggunakan BeagleBone saya sebagai kotak torrent, tetapi saya tidak ingin melakukannya secara langsung melalui koneksi Internet saya (saya tidak berpikir ISP saya akan menyukainya) - jadi saya telah membeli langganan VPN dari server Eropa . Saya sudah menghubungkan laptop saya secara manual ke VPN ini sebelum dan menjalankan Transmisi. Saya tahu bahwa koneksi VPN berfungsi di Ubuntu, dan host menyediakan informasi pengaturan untuk OpenVPN. Yang menjengkelkan, sifat dinamis dari alamat IP yang ditetapkan berarti akan sering berubah, jadi ketika saya menggunakan laptop saya dengan VPN, saya akan secara manual mengatur alamat mendengarkan dalam Transmisi ke nilai yang diperlukan.

Idealnya saya ingin pengaturan berikut:

  • Transmisi hanya berjalan melalui VPN, dan dilarang menjalankan torrent melalui koneksi WAN normal
  • Hanya lalu lintas yang diarahkan ke Transmisi yang akan diterima atau dikirim melalui VPN, semua lalu lintas yang tidak diminta akan dijatuhkan
  • Transmisi menggunakan port yang sesuai untuk didengarkan, berdasarkan alamat IP yang ditetapkan
  • OpenVPN memulai secara otomatis saat boot, yang kemudian memulai Transmisi
  • GUI web transmisi dapat diakses melalui LAN, dan mungkin melalui Internet dari koneksi WAN saya (yaitu tidak kembali melalui VPN)
seanlano
sumber
3
Jawaban sendiri tidak buruk. Jangan minta maaf untuk mereka. Anda juga tidak perlu menjelaskan bahwa itulah yang Anda lakukan ... Ini adalah perilaku yang dianjurkan
RobotHumans
Setuju dengan @hbdgaf. Tidak perlu meminta maaf. Kerja bagus di semua lini.
JakeGould

Jawaban:

23

Catatan: (2016-02-22) Saya menyadari konfigurasi ini membocorkan pertanyaan DNS ke pelacak torrent melalui WAN normal, alih-alih mengirimkannya melalui VPN. Saya sedang menyelidiki bagaimana cara memperbaikinya. Saya akan tetap menjalankan konfigurasi saya, karena koneksi itu sendiri menggunakan VPN dengan benar.


Pembaruan: Saya perhatikan ketika saya mengatur Transmisi untuk mengunduh semalam di Beaglebone, penggunaan CPU akan menjadi 100% setelah beberapa saat. Tampaknya tidak terjadi setelah jumlah waktu yang sama, kadang-kadang baik-baik saja sepanjang malam, di lain waktu ia berjuang setelah 10 menit. Itu juga dapat pulih dengan menjeda semua torrent dan menunggu beban CPU kembali normal, lalu mulai lagi. Saya masih menyelidiki. Solusi mungkin untuk menghentikan dan melanjutkan torrent secara berkala, meskipun itu bukan solusi yang sangat baik. Catatan masalah ini hanya berlaku untuk Beaglebone, dan mungkin perangkat ARM lainnya. Saya tidak pernah mengalami masalah ini pada CPU x86.


pengantar

Saya telah mengembangkan dan menguji solusi ini untuk Ubuntu 14.04, berjalan pada BeagleBone Black. Penyedia VPN yang saya gunakan disebut ibVPN . Ini harus bekerja dengan perangkat keras apa pun yang didukung (yaitu pada komputer x86 "normal"), dengan penyedia VPN apa pun yang kompatibel dengan OpenVPN - dan mungkin seharusnya bekerja untuk 14.10 atau lebih baru. Pada titik tertentu saya percaya Ubuntu akan menggunakan SystemD untuk boot, yang berarti skrip pemula yang digunakan di sini perlu dimigrasi. Pembaruan: Jonas Kalderstam memiliki jawaban di bawah ini untuk menggunakan SystemD. Saya juga berasumsi bahwa ufw digunakan sebagai firewall, jika Anda menggunakan sesuatu yang berbeda maka perintah ufw di sini perlu diubah.

Saya berasumsi bahwa semua pekerjaan dilakukan melalui koneksi SSH ke sistem, meskipun itu akan berfungsi dengan baik jika diketikkan ke terminal fisik.

Ini tutorial yang cukup panjang, harap baca semuanya terlebih dahulu dan pastikan Anda merasa nyaman dengan apa yang akan Anda lakukan.

Saya juga memperhatikan bahwa Transmisi tidak mengikat dengan benar ke alamat IP untuk mengirim data UPnP / NAT-PMP - yaitu data torrent dengan benar melewati VPN, tetapi jika penerusan port UPnP diaktifkan Transmisi akan meminta port maju dari router lokal , tidak melalui VPN dari server VPN. Oleh karena itu saya telah membuat skrip Upstart menonaktifkan penerusan port, karena mungkin tampak seolah-olah telah berfungsi, tetapi tidak. Seharusnya dimungkinkan untuk menggunakan iptables dan iproute untuk memaksa semua lalu lintas dari pengguna transmisi debian melalui VPN, tetapi saya masih melihat ini. Seharusnya juga berfungsi jika rute default diubah untuk mengirim semua data Internet melalui VPN, tetapi saya tidak ingin melakukan itu karena saya juga menggunakan server ini untuk hal-hal lain, dan ini juga akan menyebabkan semua pembaruan sistem datang melalui VPN.Pertanyaan ini memiliki informasi lebih lanjut jika Anda benar-benar ingin UPnP bekerja melalui VPN . Pembaruan: falk0069 memiliki tip fantastis di bawah ini untuk membantu mendorong UPnP melalui VPN.

Menginstal dan mengonfigurasi OpenVPN

Saya sarankan Anda mencoba membuat koneksi VPN Anda bekerja menggunakan Ubuntu sebelum mencoba membuatnya bekerja di sini - yaitu dari desktop. Ini akan mengonfirmasi bahwa Anda memiliki konfigurasi yang benar dan mengurangi waktu yang dihabiskan untuk debugging.

Pertama, instal paket yang diperlukan

sudo apt-get install openvpn

Selanjutnya, buat direktori untuk menyimpan file konfigurasi. Saya menggunakan / opt / ibVPN, karena itulah penyedia yang saya gunakan. Ubah itu menjadi apa pun yang Anda suka.

sudo mkdir /opt/ibVPN

Hal pertama yang harus dilakukan dalam direktori baru ini adalah membuat file konfigurasi untuk menjalankan klien VPN. ibVPN menyediakan file konfigurasi dasar untuk pengguna Linux, yang sebagian besar baru saja saya salin dan tempel.

cd /opt/ibVPN
sudo vim config.ovpn

Salin dan tempel versi yang diedit ke vim, menggunakan pengaturan untuk penyedia VPN Anda. (FYI, tempel di terminal Ubuntu adalah Ctrl+Shift+V) Anda harus bisa mendapatkan ini dari penyedia VPN Anda.

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"

Bagi yang belum terbiasa dengan vim, tekan Insert untuk mengetik atau menempelkan teks, lalu tekan Escape dan ketik :wq untuk menyimpan dan keluar. Tentu saja, Anda tidak harus menggunakan vim - editor teks apa pun akan berfungsi.

Saya akan segera menjelaskan file konfigurasi ini: 18 baris pertama menentukan pengaturan khusus untuk digunakan dengan server, ini berasal dari ibVPN - Anda mungkin akan sedikit berbeda jika Anda memiliki penyedia yang berbeda. Baris berikutnya adalah opsi modifikasi yang telah saya tentukan.

  • Jika file pengaturan Anda memiliki garis apa pun auth-user*, beri komentar. Agar pengaturan ini berfungsi secara otomatis, kita perlu memiliki file dengan nama pengguna dan kata sandi di dalamnya - jadi pastikan kata sandi yang Anda pilih untuk penyedia VPN kuat, acak, dan unik.

  • Ia auth-user-pass passmemberitahu OpenVPN untuk mencari file yang dipanggil passuntuk membaca pengguna dan kata sandi.

  • auth-nocache menghapus kata sandi dari memori, yang mungkin sedikit meningkatkan keamanan jika Anda khawatir.

  • persist-tun akan mencoba untuk menjaga alamat IP yang sama dari server jika koneksi Anda putus, yang semoga berarti kurang memulai dan menghentikan daemon Transmisi.

  • route-noexecmemberitahu klien OpenVPN untuk tidak secara otomatis menggunakan rute yang disediakan oleh server - yang akan menarik semua lalu lintas jaringan melalui VPN. Kami hanya ingin mengirim lalu lintas torrent, jadi kami harus menggunakan pengaturan perutean yang berbeda.

  • lport 1195 memberitahu klien OpenVPN untuk menggunakan port 1195 alih-alih 1194 - dalam kasus saya, saya juga ingin menjalankan server OpenVPN pada perangkat yang sama, dan server harus menggunakan port 1194. Bahkan jika Anda tidak menjalankan server OpenVPN, itu tidak ada salahnya untuk melakukan perubahan ini.

  • Saya mengubah baris dev tapmenjadi dev tap1, untuk memaksa perangkat virtual menjadi tap1 alih-alih ditugaskan oleh OpenVPN, sekali lagi karena menjalankan server OpenVPN yang terpisah. Bahkan jika Anda tidak menjalankan server VPN, perubahan ini seharusnya tidak masalah. Skrip firewall telah ditulis untuk digunakan tap1, jadi jika Anda lebih suka menggunakan perangkat lain maka jangan lupa untuk mengubah skrip tersebut jika perlu.

  • lladdr 00:FF:11:AA:BB:CC memberitahu OpenVPN untuk menetapkan antarmuka tap untuk memiliki alamat MAC ini, yang dapat berguna untuk aturan firewall iptables.

  • route-updan downjalankan skrip untuk memulai dan menghentikan Transmisi-daemon seperti yang diperlukan - ini diperlukan di sini karena dijalankan dengan variabel lingkungan yang berisi informasi tentang koneksi, yang diperlukan untuk mengikat Transmisi dengan benar ke alamat IP dan port yang benar.

Dalam kasus saya, saya memiliki sertifikat server dari penyedia VPN - yang juga harus berada di direktori yang sama dengan file konfigurasi.

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

Salin dan tempel ini, atau pindahkan melalui SCP atau 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-----

Jelas jika Anda tidak menggunakan akun ibVPN, sertifikat Anda akan berbeda.

Sekarang mari kita membuat file kata sandi:

sudo vim /opt/ibVPN/pass

Baris pertama haruslah nama pengguna lengkap, kemudian baris kedua harus kata sandi. Ini harus menjadi satu-satunya konten file ini.

[email protected]
myBIGstrongpassword1234567890

Kami juga harus mengamankan izin pada file ini, atau OpenVPN tidak akan memulai.

sudo chmod 400 pass

Ini akan membuat file hanya-baca, dan hanya untuk pemilik (yaitu tidak ada pengguna lain yang bisa membacanya sama sekali)

Perintah-perintah ini akan membuat file untuk dijalankan saat startup, dan mengaturnya agar dapat dieksekusi hanya oleh root.

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

Pada titik ini, mungkin merupakan ide yang baik untuk menguji apakah koneksi VPN benar-benar berfungsi. Mulai koneksi dengan:

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

Anda akan melihat peringatan bahwa perintah eksternal naik dan turun tidak dapat dijalankan, tetapi jangan khawatir tentang itu. Jika berhasil, Anda akan melihat Initialization Sequence Completeddi terminal. Tekan Control+Cuntuk mengakhiri koneksi. Jika tidak berhasil, Anda harus menyelidiki mengapa tidak dan memperbaikinya sebelum melanjutkan. Saya menemukan bahwa kadang-kadang perlu beberapa saat untuk mulai bekerja. Pastikan file kata sandi Anda benar. Ada banyak sumber daya hebat di Internet tentang OpenVPN, jadi silakan melihat-lihat.

Pada titik ini, mungkin yang termudah adalah beralih untuk mengaktifkan dan menjalankan Transmisi. Setelah Anda yakin bahwa VPN dan Transmisi dapat berjalan secara terpisah, keduanya dapat digabungkan.

Menginstal dan mengonfigurasi Transmisi

Instal paket yang diperlukan:

sudo apt-get install transmission-daemon

Secara default, Transmisi akan berjalan secara otomatis saat boot. Karena kita akhirnya akan menggunakan OpenVPN untuk memulai Transmisi, kami ingin menonaktifkan ini. Untuk melakukannya, edit file konfigurasi untuk Transmission-daemon

sudo vim /etc/default/transmission-daemon

Dan ubah baris berikut untuk membaca:

ENABLE_DAEMON=0

Sekarang Transmisi tidak akan mulai saat boot.

Sekarang mari kita buat direktori untuk pengaturan Transmisi, dan untuk torrent yang diunduh. Ini mengasumsikan Anda sudah menyiapkan disk, dan itu dipasang di / media / arm-disk /. Untuk tujuan keamanan, daemon akan dijalankan oleh penggunanya sendiri dan bukan sebagai root atau sebagai "ubuntu". Pengguna baru dibuat oleh penginstal untuk daemon-transmisi, "debian-transmission". Pengguna ini perlu memiliki folder yang kami buat, dan telah membaca dan menulis akses ke lokasi penyimpanan untuk torrent yang sedang diunduh.

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

Sekarang kita perlu memulai pengiriman, hanya sebentar, sehingga ia menciptakan file pengaturan yang kita butuhkan:

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

Perintah ini memulai daemon transmisi sebagai pengguna transmisi debian, memerintahkannya untuk menggunakan direktori / opt / transmission untuk file pengaturan, dan memerintahkannya untuk tetap berjalan di latar depan. Setelah dijalankan selama beberapa detik, tekan Control+Cuntuk mengakhirinya. Kami sekarang dapat mengedit file pengaturan.

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

Kita sekarang perlu mengubah ke baris berikut dari defaultnya untuk membaca:

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

Simpan dan keluar (Escape, ketik: wq dan tekan Enter)

Dua suntingan tengah akan memungkinkan penggunaan direktori "tidak lengkap", memisahkan torrents Anda yang sudah selesai dari yang belum selesai. Ini tidak sepenuhnya diperlukan, tetapi saya pribadi merasa sangat berguna. Hasil edit terakhir memungkinkan GUI web diakses oleh komputer mana pun di LAN (dengan asumsi subnet LAN Anda adalah 192.168.1.0, modifikasi ini jika berbeda).

Sekarang ide yang baik untuk menjalankan Transmission lagi, untuk melihat apakah itu berfungsi dan benar-benar dapat mengunduh torrent. Kami akan menggunakan jendela browser web untuk mengakses GUI dan menambahkan torrent. Pertama, mari kita izinkan akses ke web GUI melalui firewall dari LAN, lalu jalankan transmisi-daemon lagi.

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

Kunjungi URL ini di Firefox (atau browser apa pun yang Anda inginkan): http://XXX.XXX.XXX.XXX:9091 , di mana XXX diganti dengan alamat server Anda di LAN (yaitu 192.168.1.10). Temukan torrent untuk diunduh, misalnya Big Buck Bunny dalam 1080p60hz. Ini adalah film pendek gratis, tersedia secara hukum untuk diunduh gratis. Di GUI Transmisi, klik tombol "Buka Torrent", dan rekatkan tautan ini (atau sembarang torrent lain yang Anda suka) ke dalam kotak pertama. Lalu tekan "Unggah". Jika Transmisi berfungsi dengan benar, torrent akan mulai mengunduh. Jika tidak, maka Anda perlu mencari tahu alasannya sebelum melanjutkan. Ada banyak sumber daya yang tersedia di Internet untuk menggunakan daemon transmisi. Bisa juga torrent yang Anda pilih tidak berfungsi, coba beberapa yang lain terlebih dahulu.

Setelah unduhan selesai, tekan Control+Cdi jendela terminal untuk menghentikan daemon transmisi.

Konfigurasikan Transmisi yang mengikat ke antarmuka VPN

Sekarang mari kita membuat skrip Upstart, yang akan digunakan untuk memulai Transmisi ketika VPN siap.

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

Jangan khawatir jika ini komplain, itu hanya untuk membuat cadangan dari file pemula, jika ada - mungkin tidak. Mari buka vim untuk mengedit yang baru:

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

Rekatkan ini ke editor:

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

Simpan dan tutup vim. ( Escape, lalu ketik :wq). Sekali lagi, buka vim:

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

Dan rekatkan ini:

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

Sekali lagi, simpan dan tutup vim. ( Escape, lalu ketik :wq). Akhirnya:

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

Tempel ini:

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

Script ini memberitahu Upstart untuk mendengarkan sinyal "transmission-vpn-up". Skrip "transmission-up.conf" kemudian mengatur aturan perutean yang diperlukan untuk mengirim lalu lintas dari alamat VPN lokal melalui antarmuka VPN, dan mengatur firewall untuk mengizinkan lalu lintas dari VPN ke port mendengarkan untuk Transmisi. Lalu lintas yang diarahkan ke port mendengarkan Transmission dari antarmuka LAN normal diblokir. Script "transmission-daemon.conf" kemudian memulai daemon transmisi dengan pengaturan yang diperlukan untuk mengikatnya ke alamat IP VPN. Perhatikan bahwa perintah ini juga akan memastikan UPnP / NAT-PMP dinonaktifkan - lihat catatan saya di bagian atas tentang penerusan porta. "Nice -15" menetapkan Transmisi untuk memiliki prioritas yang lebih rendah, yang menurut saya berguna ketika menggunakan BeagleBone yang lebih rendah - kadang-kadang Transmisi dapat memonopoli sumber daya, yang memperlambat sistem. Setidaknya dengan prioritas rendah, tugas sistem yang lebih penting masih dapat berjalan. Skrip "transmission-down.conf" akan menghapus aturan firewall ketika VPN dihentikan. Tiga skrip berbeda digunakan sehingga daemon-transmisi dapat dijalankan sebagai pengguna yang tidak memiliki hak, tetapi aturan firewall dapat dijalankan sebagai root.

Sekarang mari kita kembali ke pengaturan OpenVPN, dan edit skrip "route-up" dan "down" untuk memicu memulai dan menghentikan skrip Transmisi kami.

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

Rekatkan ini ke vim:

#! /bin/bash

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

Semua skrip ini lakukan adalah mengatakan kepada Pemula bahwa daemon transmisi harus dimulai, dan memberikan informasi yang diperlukan untuk melampirkan ke koneksi VPN.

sudo vim /opt/ibVPN/down.sh

Sekali lagi, lebih banyak menempel:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Skrip ini bahkan lebih sederhana - ini menandakan agar daemon transmisi berhenti.

Pada titik ini, mungkin ide yang baik untuk memastikan bahwa pemilik seluruh folder konfigurasi VPN adalah pengguna root - karena skrip ini dijalankan sebagai root, siapa pun yang dapat mengubahnya dapat menjalankan apa pun yang mereka inginkan sebagai pengguna root.

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

Ini sekarang berarti bahwa hanya pengguna root yang dapat memodifikasi atau melihat pengaturan koneksi VPN.

OK, kita hampir selesai! Mari kita uji apakah pengaturan kita berfungsi sejauh ini:

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

Sambungkan lagi ke GUI web Transmisi, dan lanjutkan torrent yang ada atau tambahkan yang baru. Seharusnya bisa mengunduh, mungkin setelah beberapa menit menunggu teman. Cara bagus yang saya temukan untuk menguji apakah itu berfungsi atau tidak adalah dengan melihat iftop. Instal iftop, dan jalankan:

sudo apt-get install iftop
sudo iftop -i tap1

Layar ini akan menampilkan semua koneksi yang berjalan melalui VPN. Jika torrent Anda sedang mengunduh dan menggunakan VPN dengan benar, akan ada banyak alamat IP dan nama host di sini. Lihat juga iftop untuk koneksi LAN:

sudo iftop -i eth0

Di sini Anda akan melihat sejumlah besar lalu lintas ke satu alamat IP, menjadi server VPN, dan lalu lintas minimal ke perangkat LAN lainnya - dengan asumsi bahwa Anda tidak menjalankan layanan lain di BeagleBone Anda.

Anda dapat mengonfirmasi bahwa VPN berfungsi dengan mengikuti petunjuk ini .
Situs ini memungkinkan Anda mengunduh torrent untuk melihat alamat IP yang digunakan rekan lain untuk terhubung dengan Anda - jika semuanya berfungsi, ini akan menjadi alamat IP VPN dan bukan alamat IP WAN Anda sendiri.

Jika Anda mengalami masalah, Anda dapat melihat log kesalahan pemula dengan melakukan:

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

Di jendela terminal / SSH yang terpisah, coba jalankan perintah tail sambil memulai koneksi VPN seperti di atas dan cari semua pesan kesalahan. Semoga Anda dapat menyelesaikan masalah ini dari melihat pesan kesalahan, jika tidak memiliki menggali di Internet, atau mengirim komentar.

Konfigurasikan semuanya untuk memulai secara otomatis

Jika Anda senang mengeluarkan perintah secara manual untuk memulai terowongan OpenVPN, atau Anda ingin melakukannya dengan skrip Anda sendiri, maka Anda selesai. Tapi saya ingin memulai saat boot, jadi saya membuat skrip pemula baru untuk meluncurkan OpenVPN.

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

Ini adalah hal terakhir yang harus kita tempel!

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

Yang dilakukan adalah menunggu sistem memberi sinyal bahwa jaringan sudah siap, dan kemudian akan memulai terowongan OpenVPN - yang pada gilirannya akan memulai Transmisi. Ketika sistem dimatikan, atau jika jaringan dimatikan karena suatu alasan, Upstart akan menghapus aturan firewall dan menutup daemon transmisi. Sederhana! Ini akan terus berfungsi setelah reboot juga, jadi sekarang Anda sudah siap.

Untuk berinteraksi dengan Transmisi, gunakan GUI web seperti yang kami lakukan selama tahap pengaturan. Dimungkinkan juga untuk membuat GUI dapat diakses melalui Internet, dengan mengatur port forwarding. Ada banyak tutorial tentang cara melakukan ini, jadi saya tidak akan mengulanginya di sini.

Sedangkan untuk mendapatkan unduhan yang selesai dari BeagleBone, saya menggunakan NFS. Saya bisa mendapatkan kecepatan sekitar 8 MB / s menyalin melalui LAN dari BeagleBone ke komputer desktop saya - yang cukup bagus untuk perangkat bertenaga rendah. Ubuntu menyediakan beberapa informasi praktis untuk pengaturan ini.

seanlano
sumber
Wow! Berapa lama Anda menghabiskan waktu untuk mencari semua barang ini?
Ismael Miguel
Haha, cukup lama. Saya pernah melakukannya sekali pada router DD-WRT, lalu ketika saya melakukan saya lagi untuk BeagleBone saya pikir saya akan menulis ini jadi saya tidak lupa bagaimana melakukannya. : D
seanlano
1
Anda juga harus membaca ini: unix.stackexchange.com/questions/88693/… (Ini jawaban yang bagus.) Ini akan membantu Anda, saya yakin itu.
Ismael Miguel
3
Saya baru sadar, setelah mengatur server DNS saya untuk menggunakan OpenDNS dan melihat statistik, bahwa konfigurasi ini bocor DNS melalui koneksi WAN normal . Saya akan menyelidiki lebih lanjut untuk melihat apakah saya dapat memperbaikinya. Saya tetap akan tetap berjalan, karena koneksi itu sendiri melalui VPN - tetapi itu tidak ideal.
seanlano
1
@seanlano Terima kasih telah memperhatikan ini. Beri tahu kami jika Anda menemukan perbaikan.
Winterflags
7

Baru saja ini berfungsi menggunakan SystemD jadi saya pikir saya akan berbagi. Saya telah menempatkan semua skrip, konfigurasi, dan sertifikat saya di direktori yang sama yang akan saya sebut sebagai/etc/openvpn/myprovider

Konfigurasi OpenVPN

Ini tergantung pada VPN spesifik Anda, tetapi satu perbedaan dari konfigurasi @ seanlano adalah bahwa saya hanya menggunakan route-upskrip. Jadi hal-hal yang Anda butuhkan selain konfigurasi yang disediakan oleh pekerjaan Anda , adalah baris-baris ini:

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

Di mana Anda menempatkan transmission-route-up.shskrip di mana pun Anda suka. Perhatikan tidak adanya downnaskah. (VPN saya sudah menggunakan skrip down kustom sehingga tetap akan bertentangan).

/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

Baris pertama printenv, adalah, penting. Tempatkan di mana pun Anda suka, itu digunakan dalam layanan SystemD nanti. Saya menempatkannya di direktori yang sama dengan konfigurasi vpn saya.

Ganti 24328 dengan port apa pun yang harus didengarkan oleh daemon transmisi Anda. Saya menggunakan iptables (menggunakan Debian), jadi Anda mungkin dapat mengganti baris-baris itu dengan baris ufw dari konfigurasi @ seanlano.

Layanan SystemD VPN

Ini adalah layanan yang otomatis memulai VPN untuk kami. Pastikan path ke openvpn sudah benar pada mesin Anda, dan path ke file config juga benar. Anda harus menentukan jalur lengkap dalam layanan 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

Aktifkan layanan VPN dengan:

systemctl enable my-vpn.service

Dan mengujinya dengan:

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

Jika sudah mulai / berjalan, Anda baik-baik saja.

SystemD transmission-daemon.service

Skrip ini memerlukan layanan vpn, jadi jika vpn turun, daemon transmisi juga turun. Ini berguna jika vpn di-restart, dan Anda mendapatkan alamat-IP baru, karena transmisi harus dimulai ulang dan diikat kembali, yang harus ditangani secara otomatis. Perhatikan bahwa kami menggunakan variabel lingkungan yang kami cetak dalam route-upskrip sebelumnya.

/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

Aktifkan

systemctl enable transmission-daemon.service

Dan mulai itu

systemctl start transmission-daemon.service

Ketika Anda reboot, itu semua harus dimulai secara otomatis (dalam urutan!). Perhatikan bahwa menggunakan Type=simpledalam layanan vpn menyebabkan beberapa masalah untuk waktu pemesanan skrip, maka saya sarankan menggunakan forkingsebagai gantinya.

Anda dapat menentukan alamat ip aktual untuk rpc-bind-addressjika Anda ingin lebih membatasi (ini adalah alamat mendengarkan web GUI, yang seharusnya bukan VPN-ip Anda). Dan jika Anda ingin menjalankan transmisi dengan baik, ubah saja ExecStartjalurnya dan tambahkan /usr/bin/nice -n15ke awal.

Menangani perubahan alamat

Satu hal yang saya perhatikan dari waktu ke waktu adalah bahwa jika koneksi vpn karena suatu alasan mendapatkan alamat-ip baru, transmisi masih akan terikat ke alamat lama dan berhenti bekerja. Dan hanya melakukan systemctl restart transmission-daemon.servicetidak memotongnya. Perlu berhenti sepenuhnya, dan kemudian mulai segar.

Tidak tahu mengapa, tetapi karena alasan itu saya telah menambahkan baris berikut ke root crontab saya ( 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
Jonas Kalderstam
sumber
Hanya karena ketertarikan, apakah ini juga berjalan pada BeagleBone? Jika demikian, apakah Anda melihat masalah kinerja dengan Transmisi? Juga, artikel yang bagus. :)
seanlano
Ah tidak. Ini berjalan pada mesin desktop normal saya dan saya perhatikan tidak ada masalah di sana.
Jonas Kalderstam
Cukup adil. Bekerja dengan baik untuk saya pada mesin Intel, saya berharap saya bisa membuat kotak torrent murah dengan prosesor ARM - tetapi ternyata tidak.
seanlano
Lihat rtorrent. Ini sangat performant
Jonas Kalderstam
Terimakasih. Hal-hal lain berjalan dengan baik di kotak ARM, jadi mungkin rtorrent akan berfungsi dengan baik.
seanlano
3

Saya perhatikan Anda menyebutkan bahwa Transmisi tidak melewati VPN untuk UPnP / NAT-PMP. Saya perhatikan ini juga dan membuat tambalan untuk Transmisi sehingga menghormati pengaturan bind-address-ipv4 untuk UPnP. NAT-PMP sedikit lebih sulit untuk diterapkan karena Anda perlu menentukan gateway default. UPnP adalah yang utama yang digunakan saat ini, jadi mungkin ini cukup baik. Saya mencatat ini sebagai bug di situs trac.transmissionbt dan memberikan tambalan. Semoga itu akan dimasukkan dalam rilis mendatang. https://trac.transmissionbt.com/ticket/5990

Opsi lain untuk saat ini jika Anda tidak ingin mengkompilasi ulang adalah menjalankan upnpc secara manual dari paket miniupnpc. Misalnya

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

Di mana 10.10.10.51 adalah IP VPN Anda dan 51515 adalah port TCP / UDP yang Anda minta.

Saya tidak yakin berapa lama penerusan itu bagus. Anda juga mungkin ingin menggunakan opsi '-d' untuk menghapus port Anda saat melepaskan koneksi. Saya menemukan bahwa jika tidak, saya tidak bisa mendapatkan port yang sama lagi jika saya masuk kembali ke VPN.

Tepuk tangan

falk0069
sumber
Saya menghabiskan waktu lama untuk mencari solusi seperti ini, saya berharap dapat menemukannya miniupnpc! Dan mudah-mudahan tambalan digabungkan dan masalah ini akan diperbaiki selamanya. Sementara itu saya pasti akan mencoba menggunakan tip berguna Anda.
seanlano