Демон передачі через OpenVPN


20

Нещодавно я придбав BeagleBone Black, на який я встановив Ubuntu за допомогою цього методу . Це все працювало досі. Я хочу використовувати свій BeagleBone в якості торрент-коробки, але я не хочу це робити безпосередньо через підключення до Інтернету (не думаю, що мій провайдер сподобається) - тому я придбав підписку VPN від європейського сервера . Я вручну підключив свій ноутбук до цього VPN до та запустив передачу. Я знаю, що підключення VPN працює в Ubuntu, а хост надає інформацію про налаштування для OpenVPN. Прикро, динамічний характер призначеної IP-адреси означає, що вона буде часто змінюватися, тому, коли я використовував свій ноутбук з VPN, я вручну встановив би адресу прослуховування в передачі на необхідне значення.

В ідеалі я хотів би виконати наступне налаштування:

  • Передача виконується тільки через VPN і забороняється виконувати торренти через звичайне WAN-з'єднання
  • Лише трафік, спрямований на Передачу, буде прийнятий або відправлений через VPN, усі інші непотрібні трафіки будуть відкинуті
  • Передача використовує відповідний порт для прослуховування на основі призначеної IP-адреси
  • OpenVPN запускається автоматично при завантаженні, яке згодом запускає Transmission
  • Веб-інтерфейс передачі даних може бути доступний через локальну мережу та, можливо, через Інтернет через моє WAN-з'єднання (тобто не назад через VPN)

3
Самостійні відповіді не погані. Не вибачайтеся за них. Вам також не потрібно пояснювати, що це ви робите, хоча ... Це заохочувана поведінка
RobotHumans

Погоджено з @hbdgaf. Не потрібно вибачатися. Чудова робота на всіх фронтах.
JakeGould

Відповіді:


23

Примітка: (2016-02-22) Я зрозумів, що ця конфігурація пропускає запити DNS до торентських трекерів через звичайну WAN, а не надсилає її через VPN. Я розслідую, як це виправити. Але я продовжуватиму працювати, оскільки саме з'єднання використовує VPN належним чином.


Оновлення: Я помітив, що коли я встановив Transmission для завантаження протягом ночі на Beaglebone, використання процесора через деякий час переходить на 100%. Здається, це не відбувається через стільки ж часу, іноді це ціла ніч, інший раз - 10 хвилин. Він також може відновитися, призупинивши всі торренти та чекаючи, коли завантаження процесора повернеться до нормального стану, а потім запуститься знову. Я досі розслідую. Вирішення проблеми може бути періодичним призупиненням та відновленням потоків, хоча це не дуже вдале рішення. Зауважте, ця проблема стосується лише Beaglebone та, ймовірно, інших пристроїв ARM. У мене ніколи не виникало цієї проблеми на процесорі x86.


Вступ

Я розробив і протестував це рішення для Ubuntu 14.04, який працює на BeagleBone Black. Провайдер VPN, який я використовую, називається ibVPN . Він повинен працювати з будь-яким підтримуваним обладнанням (наприклад, на "звичайному" комп'ютері x86), з будь-яким VPN-постачальником, сумісним OpenVPN, і, ймовірно, повинен працювати протягом 14.10 або пізнішої версії. В якийсь момент я вважаю, що Ubuntu використовуватиме SystemD для завантаження, а це означає, що сценарії Upstart, використані тут, потрібно буде перенести. Оновлення: Jonas Kalderstam має відповідь нижче для використання SystemD. Я також припускаю, що ufw використовується як брандмауер, якщо ви використовуєте щось інше, тоді команди ufw тут потрібно буде змінити.

Я припускаю, що вся робота проводиться над підключенням SSH до системи, хоча це було б так само добре, якби було набрано фізичний термінал.

Це досить довгий підручник, будь ласка, прочитайте все спочатку і переконайтесь, що вам зручно з тим, що ви будете робити.

Я також зауважив, що передача належним чином не прив’язується до IP-адреси для надсилання даних UPnP / NAT-PMP - тобто дані торента правильно проходять через VPN, але якщо включено переадресація порту UPnP, передача запитає порт вперед від локального маршрутизатора , а не через VPN з сервера VPN. Отже, я змусив сценарій Upstart відключити переадресацію портів, оскільки це може здатися так, ніби воно спрацювало, але це не так. Потрібно мати можливість використовувати iptables та iproute, щоб змусити весь трафік від користувача debian-передачі через VPN, але я все ще розглядаю це. Він також повинен працювати, якщо маршрут за замовчуванням було змінено, щоб надсилати всі дані Інтернету через VPN, але я цього не хотів робити, тому що я використовую цей сервер і для інших речей, і це також призведе до того, що всі оновлення системи проходять через VPN.Це питання містить додаткову інформацію, якщо ви дійсно хочете, щоб UPnP працював над VPN . Оновлення: falk0069 має фантастичну підказку нижче, щоб допомогти заохотити UPnP через VPN.

Встановлення та налаштування OpenVPN

Я рекомендую вам спробувати підключити VPN-з'єднання до роботи за допомогою Ubuntu, перш ніж намагатися змусити його працювати тут, тобто з робочого столу. Це підтвердить правильність конфігурації та скоротить час налагодження.

Спочатку встановіть необхідні пакети

sudo apt-get install openvpn

Далі, складіть каталог для зберігання файлів конфігурації. Я використовую / opt / ibVPN, оскільки це провайдер, який я використовую. Змініть його на все, що вам подобається.

sudo mkdir /opt/ibVPN

Перше, що потрібно зробити в цьому новому каталозі - це створити конфігураційний файл для запуску VPN-клієнта. ibVPN забезпечує базовий конфігураційний файл для користувачів Linux, який я здебільшого просто копіював і вставляв.

cd /opt/ibVPN
sudo vim config.ovpn

Скопіюйте та вставте відредаговану версію у vim, скориставшись налаштуваннями для вашого постачальника VPN. (FYI, вставте термінал Ubuntu є Ctrl+Shift+V). Ви повинні отримати це від свого постачальника VPN.

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

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

Для незнайомих з vim, натисніть, Insert щоб ввести або вставити текст, а потім натисніть Escape і введіть :wq для збереження та виходу з програми. Звичайно, не потрібно використовувати vim - працюватиме будь-який текстовий редактор.

Я швидко поясню цей конфігураційний файл: Перші 18 рядків визначають конкретні параметри для використання з сервером, вони надходили від ibVPN - ваш, мабуть, буде дещо іншим, якщо у вас інший постачальник. Наступні рядки - це змінені вами параметри.

  • Якщо у вашому файлі налаштувань були рядки auth-user*, прокоментуйте їх. Щоб ця настройка працювала автоматично, нам потрібно мати файл із ім’ям користувача та паролем - тому переконайтеся, що обраний вами пароль для постачальника VPN є сильним, випадковим та унікальним.

  • auth-user-pass passКаже OpenVPN шукати файл з ім'ям passдля читання користувача і пароля.

  • auth-nocache видаляє пароль з пам'яті, що може трохи збільшити безпеку, якщо ви його турбуєтеся.

  • persist-tun намагатиметься зберегти ту саму IP-адресу від сервера, якщо ваше з'єднання припинить, що, сподіваємось, означатиме менший запуск та зупинку передачі-демон.

  • route-noexecповідомляє клієнтові OpenVPN не використовувати автоматично маршрути, надані сервером - які б тягнули весь мережевий трафік через VPN. Ми просто хочемо надсилати торрент-трафік, тому нам потрібно буде використовувати різні настройки маршрутизації.

  • lport 1195 каже клієнту OpenVPN використовувати порт 1195 замість 1194 - у моєму випадку я також хочу запустити сервер OpenVPN на тому ж пристрої, і сервер повинен буде використовувати порт 1194. Навіть якщо ви не запускаєте сервер OpenVPN, він Не завадить зробити цю зміну.

  • Я змінив рядок dev tapна dev tap1, щоб змусити віртуальний пристрій tap1 замість того, щоб призначати OpenVPN, знову ж таки через запуск окремого сервера OpenVPN. Навіть якщо ви не працюєте з сервером VPN, ця зміна не має значення. Сценарії брандмауера були написані для використання tap1, тому якщо ви хочете скористатися іншим пристроєм, тоді не забудьте змінити ці сценарії, де це доречно.

  • lladdr 00:FF:11:AA:BB:CC повідомляє OpenVPN призначити інтерфейс tap, щоб мати цю MAC-адресу, що може бути корисно для правил брандмауера iptables.

  • route-upта downзапустіть сценарії для запуску та зупинки демона передачі у міру необхідності - вони потрібні тут, оскільки вони працюють із змінними середовища, що містять інформацію про з'єднання, яка потрібна для правильного прив’язування передачі до потрібної IP-адреси та порту.

У моєму випадку у мене був серверний сертифікат від постачальника VPN - який також повинен знаходитися в тій самій директорії, що і конфігураційний файл.

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

Скопіюйте та вставте це або перемістіть його через SCP або SSHFS.

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

Очевидно, якщо ви не використовуєте обліковий запис ibVPN, ваш сертифікат буде іншим.

Тепер давайте зробимо файл пароля:

sudo vim /opt/ibVPN/pass

У першому рядку має бути повне ім’я користувача, тоді у другому рядку має бути пароль. Це повинен бути єдиний вміст цього файлу.

you@address.com
myBIGstrongpassword1234567890

Ми також повинні захистити дозволи на цей файл, інакше OpenVPN не запуститься.

sudo chmod 400 pass

Це зробить файл лише для читання і лише для власника (тобто жоден інший користувач не може його читати взагалі)

Ці команди створять файли для запуску при запуску та встановлять їх для виконання тільки під коренем.

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

На даний момент, ймовірно, буде гарною ідеєю перевірити, чи VPN-з'єднання насправді працює. Почніть з'єднання з:

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

Ви побачите попередження про те, що зовнішні команди вгору та вниз не можуть бути запущені, але не хвилюйтеся з цього приводу. Якщо це працює, ви побачите Initialization Sequence Completedна терміналі. Натисніть, Control+Cщоб припинити з'єднання. Якщо це не працює, вам доведеться вивчити, чому б ні, і виправити це, перш ніж продовжувати. Я виявив, що іноді потрібно кілька піти, щоб почати працювати. Переконайтесь, що файл вашого пароля правильний. В Інтернеті є багато чудових ресурсів про OpenVPN, тому подивіться навколо.

На даний момент, мабуть, найпростіше перейти до отримання та запуску програми Transmission. Коли ви впевнені, що і VPN, і передача можуть працювати окремо, їх можна поєднувати.

Встановлення та налаштування передачі

Встановіть необхідні пакети:

sudo apt-get install transmission-daemon

За замовчуванням передача працюватиме автоматично під час завантаження. Оскільки ми врешті-решт будемо використовувати OpenVPN для запуску передачі, ми хочемо відключити це. Для цього відредагуйте конфігураційний файл для передачі-демон

sudo vim /etc/default/transmission-daemon

І змініть наступний рядок, щоб прочитати:

ENABLE_DAEMON=0

Тепер передача не розпочнеться під час завантаження.

Давайте тепер створимо каталог для налаштувань Передачі для проживання та для завантажених торрентів. Це передбачає, що ви вже створили якийсь диск, і він встановлений на / media / arm-disk /. З метою безпеки демон буде управляти власним користувачем, а не як root або як "ubuntu". Інсталятор створює нового користувача для передачі-демон, "debian-передача". Цей користувач повинен мати власну папку, яку ми створюємо, і читати та записувати доступ до місця зберігання для завантажуваних торрентів.

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

Тепер нам потрібно розпочати передачу, лише коротко, щоб вона створила потрібний нам файл налаштувань:

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

Ця команда запускає демон-передач як користувач debian-передачі, вказує їй використовувати каталог / opt / передачі для файлів налаштувань та пропонує йому продовжувати працювати на передньому плані. Після запуску протягом декількох секунд натисніть Control+Cдля завершення. Тепер ми можемо редагувати файл налаштувань.

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

Тепер нам потрібно перейти до наступних рядків із за замовчуванням, щоб прочитати:

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

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

"incomplete-dir-enabled": true,

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

Зберегти та вийти (Escape, введіть: wq та натисніть Enter)

Середні два редагування дозволять використовувати каталог "неповний", відокремлюючи готові торренти від незакінчених. Це не зовсім необхідно, але я особисто вважаю це надзвичайно корисним. Останнє редагування дозволяє отримати доступ до веб-графічного інтерфейсу на будь-якому комп’ютері в локальній мережі (припустимо, що ваша підмережа LAN 192.168.1.0, змініть це, якщо воно інше).

Тепер хороша ідея запустити передачу ще раз, щоб побачити, чи працює вона та чи може фактично завантажити торрент. Ми будемо використовувати вікно веб-браузера для доступу до GUI та для додавання торента. Спочатку дозвольмо доступ до веб-інтерфейсу інтерфейсу через брандмауер через локальну мережу, потім запустимо передачу-демон знову.

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

Відвідайте цю URL-адресу в Firefox (або в будь-якому браузері, який ви хочете): http://XXX.XXX.XXX.XXX:9091 , де XXX замінюється адресою вашого сервера в локальній мережі (тобто 192.168.1.10). Знайдіть торрент для завантаження, наприклад, Big Buck Bunny в 1080p60hz. Це безкоштовний короткометражний фільм, законно доступний для безкоштовного завантаження. У графічному інтерфейсі передачі натисніть кнопку "Відкрити торрент" і вставте це посилання (або будь-який інший вам потрібний торрент) у перше поле. Потім натисніть «Завантажити». Якщо передача працює правильно, торрент почне завантажуватися. Якщо цього немає, то вам потрібно буде розібратися, чому, перш ніж продовжувати. В Інтернеті є багато ресурсів для використання передач-демон. Можливо, торрент, який ви вибрали, не працює, спробуйте спочатку кілька інших.

Після завершення завантаження натисніть Control+Cу вікні терміналу, щоб зупинити передачу-демон.

Настройте прив’язку передачі до інтерфейсу VPN

Тепер давайте зробимо сценарій Upstart, який буде використовуватися для запуску передачі, коли VPN буде готовий.

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

Не хвилюйтеся, якщо це скаржиться, просто зробити резервну копію файлу Upstart, якщо такий існував - він може не мати. Відкриємо vim для редагування нового:

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

Вставте це в редактор:

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

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

# This includes the information from OpenVPN into this environment

export LOCAL_IP
env PORT=51413

# give time to send info to trackers
kill timeout 30

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

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

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

Збережіть і закрийте vim. ( Escape, потім введіть :wq). Знову відкрийте vim:

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

І вставте це:

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

start on transmission-vpn-up

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

task

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

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

end script

Знову збережіть і закрийте vim. ( Escape, потім введіть :wq). Нарешті:

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

Вставте це:

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

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

task

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

    /sbin/ip route flush cache

end script

Ці сценарії кажуть Upstart прослухати сигнал "передача-vpn-up". Сценарій "testing-up.conf" потім встановлює необхідні правила маршрутизації для надсилання трафіку з локальної VPN-адреси через інтерфейс VPN та встановлює брандмауер, щоб дозволити трафік від VPN до порту прослуховування для передачі. Трафік, спрямований на прослуховувальний порт Transmission, від звичайного інтерфейсу локальної мережі заблокований. Сценарій "передача-daemon.conf" потім запускає передачу-демон з необхідними налаштуваннями, щоб прив'язати його до IP-адреси VPN. Зауважте, що ця команда також забезпечить відключення UPnP / NAT-PMP - див. Мою примітку вгорі про переадресацію портів. "Приємний -15" встановлює передачу нижчим пріоритетом, що я вважаю корисним при використанні BeagleBone з нижньою специфікацією - іноді передача може свиняти ресурси, що уповільнює роботу системи. Принаймні з низьким пріоритетом все-таки важливіші системні завдання все ще можуть виконуватися. Сценарій "передача-вниз.conf" видалить правила брандмауера, коли VPN зупинено. Три різні сценарії використовуються так, що демон передачі може бути запущений як непривілейований користувач, але правила брандмауера можуть бути запущені як root.

Тепер повернемось до налаштувань OpenVPN та відредагуємо сценарії "маршрут" та "вниз", щоб запустити та зупинити наш сценарій передачі.

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

Вставте це у vim:

#! /bin/bash

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

Весь цей скрипт - це сказати Upstart, що демона передачі має початися, і надає йому інформацію, необхідну для підключення до VPN-з'єднання.

sudo vim /opt/ibVPN/down.sh

Знову ж таки, більше вклеювання:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Цей сценарій ще простіший - він сигналізує передачі-демон, щоб зупинився.

На даний момент, ймовірно, є хорошою ідеєю переконатися, що власник усієї папки конфігурації VPN є кореневим користувачем - оскільки ці сценарії виконуються як root, кожен, хто міг би їх змінити, може виконувати все, що хотів, як кореневий користувач.

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

Це означає, що лише користувач root може змінювати або переглядати налаштування з'єднання VPN.

Гаразд, ми майже закінчили! Давайте перевіримо, чи працює наша установка поки що:

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

Знову підключіться до веб-інтерфейсу передачі та відновіть наявний торрент або додайте новий. Це має бути в змозі завантажити, можливо, через кілька хвилин очікування однолітків. Чудовим способом тестування того, чи працює він чи ні, є перегляд iftop. Встановіть iftop та запустіть:

sudo apt-get install iftop
sudo iftop -i tap1

На цьому екрані будуть показані всі з'єднання, що проходять через VPN. Якщо ваш торрент завантажується і правильно використовується VPN, тут буде багато IP-адрес та імен хостів. Також подивіться на iftop для підключення до локальної мережі:

sudo iftop -i eth0

Тут ви повинні побачити велику кількість трафіку до однієї IP-адреси, що є сервером VPN, а потім лише мінімальний трафік до інших пристроїв локальної мережі - якщо припустити, що ви не працюєте з іншими службами на своєму BeagleBone.

Ви можете підтвердити, що VPN працює, дотримуючись цих інструкцій .
Цей сайт дозволяє завантажувати торрент, щоб бачити IP-адресу, яку використовують інші колеги для підключення до вас - якщо все працює, це IP-адреса VPN, а не ваша IP-адреса WAN.

Якщо у вас виникли проблеми, ви можете побачити журнал помилок Upstart, виконавши:

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

У окремому вікні терміналу / SSH спробуйте виконати команду хвоста під час запуску VPN-з'єднання, як зазначено вище, і шукайте повідомлення про помилки. Сподіваємось, ви зможете вирішити проблему, побачивши повідомлення про помилки, якщо не копаєтесь в Інтернеті, або опублікуйте коментар.

Налаштуйте все для автоматичного запуску

Якщо ви задоволені тим, що вручну видаєте команду для запуску тунелю OpenVPN, або ви хочете зробити це з власним сценарієм, тоді ви закінчите. Але я хотів, щоб це почалося під час завантаження, тому я зробив ще один сценарій Upstart для запуску OpenVPN.

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

Це останнє, що ми повинні вставити!

description "OpenVPN client, with attached transmission-daemon"

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

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

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


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

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

Все це - це почекати, коли система подасть сигнал, що мережа готова, і тоді вона запустить тунель OpenVPN - який, в свою чергу, запустить передачу. Коли система відключена або якщо мережа з якоїсь причини відключена, Upstart видалить правила брандмауера та закриє демон передачі. Просто! Це буде продовжувати працювати і після перезавантаження, тому тепер все налаштовано.

Щоб взаємодіяти з передачею, використовуйте веб-графічний інтерфейс, як ми це робили під час налаштування. Також можна зробити доступ до GUI через Інтернет, встановивши переадресацію портів. Про те, як це зробити, є багато підручників, тому я тут не повторюсь.

Щодо отримання завершених завантажень з BeagleBone, я використовую NFS. Я можу отримати швидкість копіювання близько 8 Мб / с через локальну мережу з BeagleBone на настільний комп'ютер - що досить добре для такого малопотужного пристрою. Ubuntu надає деяку зручну інформацію для налаштування цієї настройки.


Оце Так! Скільки часу ви витрачали на пошуки всього цього?
Ісмаїл Мігель

Ха-ха, досить довго. Я робив це один раз раніше на маршрутизаторі DD-WRT, тоді, коли я робив це знову для BeagleBone, я думав, що напишу це, щоб не забути, як це зробити. : D
seanlano

1
Ви також повинні прочитати це: unix.stackexchange.com/questions/88693/… (Це чудова відповідь.) Це допоможе вам, я впевнений у цьому.
Ісмаїл Мігель

3
Щойно я зрозумів, встановивши мій сервер DNS на використання OpenDNS і переглянувши статистику, що ця конфігурація протікає DNS через звичайне WAN-з'єднання . Далі я досліджу, чи зможу це виправити. Я все одно продовжувати працювати, оскільки саме з'єднання здійснюється через VPN - але це не ідеально.
seanlano

1
@seanlano Дякую за те, що ми звернули увагу на це. Повідомте нас, якщо / коли ви знайдете виправлення.
Winterflags

7

Щойно я працюю за допомогою SystemD, тому я подумав, що поділюсь . Я розмістив усі свої сценарії, конфігурації та сертифікати в тій самій каталозі, до якого я буду посилатися/etc/openvpn/myprovider

Конфігурація OpenVPN

Це залежить від конкретного VPN, але одна відмінність від конфігурації @ seanlano полягає в тому, що я використовую лише route-upсценарій. Отже, вам потрібні додаткові параметри, крім робочого конфігурації :

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

Де ви розміщуєте transmission-route-up.shсценарій, куди вам подобається. Зверніть увагу на відсутність downсценарію. (Мій VPN вже використовував користувальницький сценарій пониження, щоб він все одно конфліктував).

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

#!/bin/sh

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


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

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

ip route flush cache


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

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

Перший рядок printenvє важливим. Розмістіть його куди завгодно, він буде використаний пізніше в службі SystemD. Я розміщую його в тому самому каталозі, що і мій vpn config.

Замініть 24328 будь-яким портом, який повинен прослухати ваш демон-передач. Я використовую iptables (використовуючи Debian), тому ви, ймовірно, можете замінити ці рядки на ufw-лінії з конфігурації @ seanlano.

Служба VPN системи SystemD

Це послуга, яка автоматично запускає VPN для нас. Перевірте, чи правильний шлях до openvpn на вашій машині, а також правильність шляху до файлу конфігурації. Ви повинні вказати повний шлях у службах SystemD.

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

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

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

[Install]
WantedBy=multi-user.target

Увімкніть службу VPN за допомогою:

systemctl enable my-vpn.service

І протестуйте його за допомогою:

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

Якщо це запущено / працює, ви добре.

SystemD передача-daemon.service

Цей скрипт вимагає служби vpn, тому якщо vpn знижується, передача-демон також знижується. Це зручно, якщо vpn буде перезапущено, і ви отримаєте нову IP-адресу, тому що передачу потрібно буде перезапустити і потім зв'язати, яка повинна оброблятися автоматично. Зауважте, що ми використовуємо змінні середовища, які ми друкували в route-upсценарії раніше.

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

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

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

[Install]
WantedBy=multi-user.target

Увімкніть це

systemctl enable transmission-daemon.service

І почніть це

systemctl start transmission-daemon.service

Після перезавантаження все повинно запускатися автоматично (по порядку!). Зауважте, що використання Type=simpleсервісу vpn спричиняє деякі проблеми з тимчасовим замовленням скриптів, тому я рекомендую forkingзамість цього використовувати .

Ви можете вказати фактичну ip-адресу для, rpc-bind-addressякщо ви хочете бути більш обмежувальною (це адреса прослуховування веб-інтерфейсу, яка не повинна бути вашою VPN-ip). А якщо ви хочете запустити передачу з приємною, просто змініть ExecStartлінію та додайте /usr/bin/nice -n15до початку.

Обробка змін адреси

Одне, що я зазначив з часом, - це те, що якщо vpn-з'єднання чомусь отримає нову ip-адресу, передача все одно буде прив’язана до старої адреси та припинить роботу. І просто робити systemctl restart transmission-daemon.serviceце не скорочує. Потрібно повністю зупинитися, а потім почати свіжим.

Поняття не маю чому, але саме тому я додав наступні рядки до мого кореневого crontab ( sudo crontab -e):

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

Це просто не цікаво, це також працює на BeagleBone? Якщо так, чи бачите Ви проблеми з передачею? Крім того, чудова підписка. :)
seanlano

Ах ні. Він працює на моїй звичайній настільній машині, і я не помітив жодних проблем там.
Йонас Кальдерштам

Справедливо. Для мене добре працює на машині Intel, я сподівався, що зможу зробити дешеву торрент-коробку з процесором ARM - але, мабуть, цього не бути.
seanlano

Перевірте rtorrent. Це дуже виконавсько
Йонас Кальдерштам

Спасибі, я буду. Інші речі працюють добре на коробці ARM, тому, можливо, rtorrent буде працювати належним чином.
seanlano

3

Я помітив, що ви згадали, що передача не проходить через VPN для UPnP / NAT-PMP. Я також помітив це і створив патч для передачі, тому він шанує налаштування bind-address-ipv4 для UPnP. NAT-PMP трохи складніше реалізувати, оскільки вам потрібно визначити шлюз за замовчуванням. UPnP - це головний, який використовується в наші дні, тому, ймовірно, це досить добре. Я записав це як помилку на сайті trac.transmissionbt і надав патч. Сподіваємось, він буде включений у майбутній реліз. https://trac.transmissionbt.com/ticket/5990

Інший варіант прямо зараз, якщо ви не хочете перекомпілювати - це вручну запустити upnpc з пакета miniupnpc. Напр

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

Де 10.10.10.51 - ваш VPN IP, а 51515 - запитуваний TCP / UDP-порт.

Я не впевнений, як довго йде експедиція. Також ви можете скористатися опцією '-d' для видалення порту при відключенні. Я виявив, що якщо цього не зробити, я не можу отримати той самий порт знову, якщо я перейду на VPN.

Ура


Я витрачав віки, намагаючись знайти таке рішення, хотілося б, щоб я знайшов miniupnpc! І, сподіваємось, патч дійсно об'єднається, і це питання буде вирішено назавжди. Тим часом я неодмінно намагаюся скористатися вашою зручною порадою.
seanlano
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.