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

17

Недавно я приобрел BeagleBone Black, на который я установил Ubuntu с помощью этого метода . До сих пор все работало. Я хочу использовать мой BeagleBone как торрент-бокс, но я не хочу делать это прямо над своим подключением к Интернету (я не думаю, что моему интернет-провайдеру это понравится) - поэтому я приобрел подписку VPN с европейского сервера , Я вручную подключил свой ноутбук к этой VPN до и запуска передачи. Я знаю, что VPN-соединение работает в Ubuntu, а хост предоставляет информацию об установке для OpenVPN. Раздражающе, динамический характер назначенного IP-адреса означает, что он будет меняться часто, поэтому, когда я использовал свой ноутбук с VPN, я бы вручную установил адрес прослушивания в передаче на требуемое значение.

В идеале мне нужна следующая настройка:

  • Передача выполняется только через VPN и запрещается запускать торренты через обычное WAN-соединение.
  • Только трафик, направленный на передачу, будет принят или отправлен через VPN, все остальные нежелательные трафик будут удалены.
  • Передача использует соответствующий порт для прослушивания на основе назначенного IP-адреса
  • OpenVPN запускается автоматически при загрузке, а затем начинает передачу.
  • Доступ к веб-интерфейсу передачи через LAN и, возможно, через Интернет из моего WAN-соединения (т. е. не обратно через VPN)
задан seanlano 10.02.2015 в 06:45
источник

3 ответа

21

Примечание: (2016-02-22) Я понял, что эта конфигурация утечки DNS-запросов к трекер-трекеру через обычную WAN вместо отправки через VPN. Я изучаю, как это исправить. Я буду продолжать работать с моей конфигурацией, потому что само соединение действительно использует VPN.

Обновление: Я заметил, что когда я устанавливал передачу для загрузки на ночь в Beaglebone, загрузка процессора через некоторое время становится 100%. Кажется, что это не происходит после такого же количества времени, иногда это прекрасно всю ночь, иногда он борется через 10 минут. Он также может восстанавливаться, приостанавливая все торренты и ожидая возврата нагрузки на CPU, а затем снова запускается. Я все еще расследую. Обходной путь может заключаться в том, чтобы периодически приостанавливать и возобновлять торренты, хотя это не очень хороший способ обхода проблемы. Примечание эта проблема применима только к Beaglebone и, возможно, к другим устройствам ARM. У меня никогда не было этой проблемы на процессоре x86.

Введение

Я разработал и протестировал это решение для Ubuntu 14.04, работающего на BeagleBone Black. Поставщик VPN, который я использую, называется ibVPN . Он должен работать с любым поддерживаемым оборудованием, хотя (например, на "обычном" компьютере x86), с любым совместимым с OpenVPN VPN-провайдером - и, вероятно, должен работать на 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 назначить интерфейс перехода для этого MAC-адреса, который может быть полезен для правил брандмауэра iptables.

  • route-up и down запускать скрипты для запуска и остановки передачи-daemon по мере необходимости - они нужны здесь, потому что они работают с переменными среды, содержащими информацию о соединении, которая необходима для правильного привязки передачи к правый 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

Первая строка должна быть полным именем пользователя, тогда вторая строка должна быть паролем. Это должно быть единственное содержимое этого файла.

[email protected]
myBIGstrongpassword1234567890

Мы также должны обеспечить права доступа к этому файлу, иначе OpenVPN не запустится.

sudo chmod 400 pass

Это сделает файл доступным только для чтения и только для владельца (т. е. никакой другой пользователь не сможет его прочитать вообще)

Эти команды создадут файлы, которые будут запускаться при запуске, и установите их для запуска только root.

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, так что посмотрите вокруг.

На данный момент, возможно, проще всего перейти к передаче и запуску передачи. Как только вы убедитесь, что VPN и передача могут выполняться отдельно, их можно комбинировать.

Установка и настройка передачи

Установите необходимые пакеты:

sudo apt-get install transmission-daemon

По умолчанию передача будет выполняться автоматически при загрузке. Поскольку мы в конечном итоге будем использовать OpenVPN для запуска передачи, мы хотим отключить это. Для этого отредактируйте конфигурационный файл для "Демон передачи"

sudo vim /etc/default/transmission-daemon

И измените следующую строку следующим образом:

ENABLE_DAEMON=0

Теперь передача не запускается при загрузке.

Давайте теперь создадим каталог для параметров передачи, в которых будет находиться, и для загруженных торрентов. Предполагается, что вы уже настроили какой-то диск, и он установлен на / media / arm-disk /. В целях безопасности демон будет запускаться собственным пользователем, а не root или как "ubuntu". Новый пользователь создается установщиком для передачи-демона "debian-transmission". Этот пользователь должен владеть созданной нами папкой и иметь доступ для чтения и записи в хранилище для загружаемых торрентов.

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

Теперь нам нужно просто начать передачу, чтобы создать файл настроек, который нам нужен:

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

Эта команда запускает демона передачи как пользователь передачи debian, сообщает ему использовать каталог / opt / transmission для файлов настроек и сообщает, что он продолжает работать на переднем плане. Как только он запустится в течение нескольких секунд, нажмите Control+C , чтобы закончить его. Теперь мы можем редактировать файл настроек.

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

Теперь нам нужно изменить на следующие строки по умолчанию:

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

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

"incomplete-dir-enabled": true,

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

Сохранить и выйти (Escape, введите: wq и нажмите Enter)

Средние два редактирования позволят использовать "неполный" каталог, отделяя ваши готовые торренты от незавершенных. Это не совсем необходимо, но я лично считаю его чрезвычайно полезным. Последнее редактирование позволяет доступ к веб-графическому интерфейсу любым компьютером в локальной сети (при условии, что ваша подсеть локальной сети 192.168.1.0, измените это, если оно отличается).

Теперь неплохо снова запустить трансляцию, чтобы увидеть, работает ли она и действительно может загрузить торрент. Мы будем использовать окно веб-браузера для доступа к графическому интерфейсу и добавления торрента. Во-первых, давайте разрешим доступ к веб-графическому интерфейсу через брандмауэр из локальной сети, а затем снова запустите демон передачи.

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 (или в любом другом браузере): Ссылка , где 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". Затем скрипт "transmission-up.conf" устанавливает необходимые правила маршрутизации для отправки трафика с локального VPN-адреса через интерфейс VPN и устанавливает, чтобы брандмауэр разрешал трафик от VPN к порту прослушивания для передачи. Трафик, направляемый на порт прослушивания Передачи из обычного интерфейса LAN, блокируется. Затем скрипт "transmission-daemon.conf" запускает демона передачи с необходимыми настройками, чтобы привязать его к IP-адресу VPN. Обратите внимание, что эта команда также гарантирует, что UPnP / NAT-PMP отключен - см. Мою заметку в верхней части о переадресации портов. "Хороший -15" устанавливает передачу на более низкий приоритет, который я нашел полезным при использовании более низкого spec'а BeagleBone - иногда передача может запускать ресурсы, что замедляет работу системы. По крайней мере, с низким приоритетом, более важные системные задачи все еще могут выполняться. Скрипт "передача-down.conf" удалит правила брандмауэра при остановке VPN. Используются три разных сценария, так что демона передачи можно запускать как непривилегированный пользователь, но правила брандмауэра могут выполняться как root.

Теперь давайте вернемся к настройкам OpenVPN и отредактируем скрипты "route-up" и "down", чтобы запускать и останавливать наш сценарий передачи.

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, любой, кто может их изменить, может запускать все, что они хотели, в качестве пользователь 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-сервером, а затем только минимальный трафик на другие устройства LAN - при условии, что вы не используете другие службы на вашем BeagleBone.

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

Если у вас возникли проблемы, вы можете увидеть журнал ошибок Upstart, выполнив:

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

В отдельном окне терминала / SSH попробуйте запустить команду tail при запуске 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 удалит правила брандмауэра и закроет передачу-демона. Просто! Это будет продолжаться и после перезагрузки, так что теперь вы все настроены.

Чтобы взаимодействовать с передачей, используйте веб-интерфейс, как и во время фазы настройки. Также возможно сделать доступным через Интернет интерфейс графического интерфейса, настроив переадресацию портов. Есть много учебников о том, как это сделать, поэтому я не буду повторять это здесь.

Что касается получения завершенных загрузок с BeagleBone, я использую NFS. Я могу получить скорость около 8 МБ / с копирования по локальной сети с BeagleBone на мой настольный компьютер, что довольно хорошо для такого маломощного устройства. Ubuntu предоставляет некоторую удобную информацию для ее настройки.     

ответ дан seanlano 10.02.2015 в 06:45
источник
6

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

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

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

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

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

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

#!/bin/sh

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


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

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

ip route flush cache


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

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

Первая строка, printenv , важна. Поместите его везде, где хотите, он используется в службе SystemD позже. Я помещаю его в тот же каталог, что и моя конфигурация vpn.

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

Служба SystemD VPN

Это сервис, который автоматически запускает VPN для нас. Убедитесь, что путь к openvpn корректен на вашем компьютере и что путь к конфигурационному файлу также является правильным. Вы должны указать полные пути в службах SystemD.

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

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

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

[Install]
WantedBy=multi-user.target

Включить службу VPN с помощью:

systemctl enable my-vpn.service

И протестируйте его с помощью

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

Если он запущен / работает, вы хорошо.

SystemD transmission-daemon.service

Для этого сценария требуется vpn-service, поэтому, если 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 , если хотите быть более ограничительным (это адрес прослушивания веб-GUI, который не должен быть вашим VPN-ip). И если вы хотите запустить передачу с помощью nice, просто измените строку ExecStart и добавьте /usr/bin/nice -n15 в начало.

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

Одна вещь, которую я со временем заметил, заключается в том, что если vpn-соединение по какой-то причине получает новый ip-адрес, передача по-прежнему будет привязана к старому адресу и перестанет работать. И просто выполнение systemctl restart transmission-daemon.service не сокращает его. Он должен полностью остановиться, а затем начать новый.

Не знаю, почему, но по этой причине я добавил следующие строки в мой root crontab ( sudo crontab -e ):

# m h  dom mon dow   command
0 6 * * * /bin/systemctl stop my-vpn.service; /bin/systemctl start my-vpn.service
1 6 * * * /bin/systemctl stop transmission-daemon.service; /bin/systemctl start transmission-daemon.service
    
ответ дан Jonas Kalderstam 11.05.2015 в 02:15
2

Я заметил, что вы упомянули, что передача не проходит через VPN для UPnP / NAT-PMP. Я тоже это заметил и создал патч для передачи, поэтому он отличает настройку bind-address-ipv4 для UPnP. NAT-PMP немного сложнее реализовать, поскольку вам необходимо определить шлюз по умолчанию. UPnP является основным, который используется в наши дни, поэтому, вероятно, это достаточно хорошо. Я зарегистрировал это как ошибку на сайте trac.transmissionbt и предоставил патч. Надеюсь, он будет включен в будущий выпуск. Ссылка

Еще один вариант прямо сейчас, если вы не хотите перекомпилировать, - это вручную запустить 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.

Приветствия     

ответ дан falk0069 08.09.2015 в 03:59