Daemon de transmissão sobre o OpenVPN

17

Adquiri recentemente um BeagleBone Black, no qual instalei o Ubuntu usando este método . Tudo funcionou até agora. Eu quero usar o meu BeagleBone como uma caixa de torrent, mas eu não quero fazê-lo diretamente sobre a minha conexão com a Internet (eu não acho que o meu ISP vai gostar) - então eu comprei uma assinatura VPN de um servidor europeu . Eu conectei manualmente meu laptop a essa VPN antes e executei a transmissão. Eu sei que a conexão VPN funciona no Ubuntu, e o host fornece informações de configuração para o OpenVPN. Irritantemente, a natureza dinâmica do endereço IP designado significa que ele mudaria com frequência, então, quando eu usasse meu laptop com a VPN, eu definiria manualmente o endereço de escuta em Transmission para o valor necessário.

Idealmente, gostaria da seguinte configuração:

  • A transmissão é executada somente pela VPN e é proibida de executar torrents pela conexão WAN normal
  • Somente o tráfego direcionado para Transmissão será aceito ou enviado por meio da VPN. Todos os outros tráfegos não solicitados serão descartados
  • A transmissão usa a porta apropriada para ouvir, com base no endereço IP atribuído
  • O OpenVPN é iniciado automaticamente na inicialização, que então inicia subsequentemente a Transmissão
  • A GUI da web da transmissão pode ser acessada pela LAN e, possivelmente, pela Internet a partir da minha conexão WAN (ou seja, não pela VPN)
por seanlano 10.02.2015 / 06:45

3 respostas

21

Nota: (2016-02-22) Eu percebi que essa configuração vaza as consultas DNS para os rastreadores de torrent através da WAN normal, em vez de enviá-las pela VPN. Estou investigando como consertar isso. Eu continuarei a executar minha configuração, já que a conexão em si usa a VPN corretamente.

Atualização: Eu notei que quando eu defino o Transmission para baixar durante a noite no Beaglebone, o uso da CPU vai para 100% depois de um tempo. Parece que isso não acontece depois da mesma quantidade de tempo, às vezes é bom a noite toda, outras vezes ele luta depois de 10 minutos. Ele também pode recuperar pausando todos os torrents e aguardando a carga da CPU retornar ao normal e, em seguida, iniciar novamente. Eu ainda estou investigando. Uma solução alternativa pode ser pausar e retomar torrents periodicamente, embora não seja uma solução muito boa. Nota este problema aplica-se apenas ao Beaglebone e provavelmente a outros dispositivos ARM. Eu nunca tive esse problema em uma CPU x86.

Introdução

Eu desenvolvi e testei esta solução para o Ubuntu 14.04, rodando em um BeagleBone Black. O provedor de VPN que estou usando é chamado ibVPN . Ele deve funcionar com qualquer hardware suportado (por exemplo, em um computador x86 "normal") com qualquer provedor de VPN compatível com OpenVPN - e provavelmente deve funcionar para 14.10 ou posterior. Em algum momento, acredito que o Ubuntu usará o SystemD para inicialização, o que significa que os scripts Upstart usados aqui precisarão ser migrados. Atualização: Jonas Kalderstam tem uma resposta abaixo para usar o SystemD. Eu também estou assumindo que o ufw está sendo usado como o firewall, se você estiver usando algo diferente, então os comandos do ufw aqui precisarão ser alterados.

Eu suponho que todo o trabalho é feito através de uma conexão SSH com o sistema, embora funcione tão bem quanto digitado em um terminal físico.

Este é um tutorial bastante longo, por favor leia tudo primeiro e certifique-se de que está confortável com o que vai fazer.

Eu também notei que Transmission não se liga corretamente a um endereço IP para enviar dados UPnP / NAT-PMP - isto é, dados de torrent passam corretamente pela VPN, mas se o encaminhamento de porta UPnP estiver habilitado, a Transmission solicitará a porta para frente a partir do roteador local, não através da VPN do servidor VPN. Por isso, fiz o script Upstart desabilitar o encaminhamento de portas, já que pode parecer que funcionou, mas não funcionou. Deve ser possível usar iptables e iproute para forçar todo o tráfego do usuário da transmissão-debian através da VPN, mas eu ainda estou olhando para isso. Ele também deve funcionar se a rota padrão foi alterada para enviar todos os dados da Internet através da VPN, mas eu não queria fazer isso porque eu também uso esse servidor para outras coisas, e isso também faria com que todas as atualizações do sistema viessem VPN O efeito disso é que a Transmission provavelmente fará o download de torrents mais lentamente do que se o encaminhamento de portas funcionasse - mas descobri que velocidades razoáveis podem ser alcançadas para a maioria dos torrents sem o encaminhamento de porta. Esta questão tem mais informações se você quiser que o UPnP funcione a VPN . Atualização: falk0069 tem uma dica fantástica abaixo para ajudando a incentivar o UPnP sobre a VPN.

Instalando e configurando o OpenVPN

Eu recomendo que você tente fazer com que a sua conexão VPN funcione usando o Ubuntu antes de tentar fazê-lo funcionar aqui - por exemplo, a partir de um desktop. Isso confirmará que você tem a configuração correta e reduz o tempo gasto na depuração.

Primeiro, instale os pacotes necessários

sudo apt-get install openvpn

Em seguida, crie um diretório para armazenar os arquivos de configuração. Estou usando / opt / ibVPN, já que é o provedor que estou usando. Mude para o que quiser.

sudo mkdir /opt/ibVPN

A primeira coisa a fazer neste novo diretório é criar o arquivo de configuração para executar o cliente VPN. O ibVPN fornece um arquivo de configuração básico para usuários do Linux, que eu copiei e colei.

cd /opt/ibVPN
sudo vim config.ovpn

Copie e cole sua versão editada no vim, usando as configurações do seu provedor de VPN. (FYI, cole no terminal do Ubuntu é Ctrl+Shift+V ) Você deve conseguir isso do seu provedor de 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"

Para quem não conhece o vim, pressione Insert para digitar ou colar texto, depois pressione Escape e digite :wq para salvar e sair. Claro, você não precisa usar o vim - qualquer editor de texto funcionará.

Explicarei rapidamente este arquivo de configuração: As primeiras 18 linhas especificam as configurações específicas para usar com o servidor, estas vieram do ibVPN - o seu provavelmente será um pouco diferente se você tiver um provedor diferente.As próximas linhas são opções modificadas que eu especifiquei.

  • Se o seu arquivo de configurações tiver alguma linha com auth-user* , comente isso. Para que essa configuração funcione automaticamente, precisamos ter um arquivo com o nome de usuário e a senha. Portanto, verifique se a senha escolhida para o provedor de VPN é strong, aleatória e exclusiva.

  • O auth-user-pass pass diz ao OpenVPN para procurar um arquivo chamado pass para ler o usuário e a senha.

  • auth-nocache remove a senha da memória, o que pode aumentar um pouco a segurança se você estiver preocupado com isso.

  • persist-tun tentará manter o mesmo endereço IP do servidor se a conexão for interrompida, o que deve significar menos inicialização e parada do daemon Transmission.

  • route-noexec diz ao cliente OpenVPN para não usar automaticamente as rotas fornecidas pelo servidor - o que levaria todo o tráfego de rede pela VPN. Nós só queremos enviar tráfego de torrent, então precisaremos usar diferentes configurações de roteamento.

  • lport 1195 diz ao cliente OpenVPN para usar a porta 1195 em vez de 1194 - no meu caso eu também quero rodar um servidor OpenVPN no mesmo dispositivo, e o servidor precisará usar a porta 1194. Mesmo se você não está executando um servidor OpenVPN, não faz mal fazer essa alteração.

  • Alterei a linha dev tap para dev tap1 , para forçar o dispositivo virtual a ser tap1 em vez de ser atribuído pelo OpenVPN, novamente por causa da execução de um servidor OpenVPN separado. Mesmo se você não estiver executando um servidor VPN, essa alteração não importará. Os scripts de firewall foram escritos para usar tap1 , portanto, se você preferir usar outro dispositivo, lembre-se de alterar esses scripts quando apropriado.

  • lladdr 00:FF:11:AA:BB:CC diz ao OpenVPN para atribuir a interface de toque para ter esse endereço MAC, o que pode ser útil para as regras de firewall do iptables.

  • route-up e down executam scripts para iniciar e parar o Transmission-daemon conforme necessário - eles são necessários aqui porque são executados com variáveis de ambiente contendo informações sobre a conexão, que é necessário para vincular corretamente Transmission ao endereço IP e porta corretos.

No meu caso, eu tinha um certificado de servidor do provedor de VPN - que também tem que estar no mesmo diretório que o arquivo de configuração.

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

Copie e cole isso ou mova-o via SCP ou 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-----

Obviamente, se você não estiver usando uma conta ibVPN, seu certificado será diferente.

Agora vamos criar o arquivo de senha:

sudo vim /opt/ibVPN/pass

A primeira linha deve ser o nome de usuário completo, então a segunda linha deve ser a senha. Este deve ser o único conteúdo deste arquivo.

[email protected]
myBIGstrongpassword1234567890

Também precisamos proteger as permissões nesse arquivo ou o OpenVPN não será iniciado.

sudo chmod 400 pass

Isso tornará o arquivo somente leitura e somente para o proprietário (ou seja, nenhum outro usuário poderá lê-lo)

Esses comandos criarão os arquivos para serem executados na inicialização e os definirão como executáveis somente pelo usuário root.

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

Neste ponto, é provavelmente uma boa ideia testar se a conexão VPN realmente funciona. Inicie a conexão com:

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

Você verá avisos de que os comandos externos para cima e para baixo não puderam ser executados, mas não se preocupe com isso. Se funcionar, você verá Initialization Sequence Completed no terminal. Pressione Control+C para terminar a conexão. Se não funcionar, você terá que investigar por que não e corrigi-lo antes de continuar. Eu achei que às vezes demorava um pouco para começar a trabalhar. Certifique-se de que seu arquivo de senha esteja correto. Existem muitos recursos excelentes na Internet sobre o OpenVPN, então dê uma olhada.

Neste momento, é provavelmente mais fácil passar para a Transmissão em funcionamento. Quando tiver certeza de que tanto a VPN quanto a Transmissão podem ser executadas separadamente, elas podem ser combinadas.

Instalando e configurando a transmissão

Instale os pacotes necessários:

sudo apt-get install transmission-daemon

Por padrão, a Transmissão será executada automaticamente na inicialização. Já que eventualmente usaremos o OpenVPN para iniciar a Transmissão, queremos desabilitar isso. Para fazer isso, edite o arquivo de configuração para Transmission-daemon

sudo vim /etc/default/transmission-daemon

E altere a seguinte linha para ler:

ENABLE_DAEMON=0

Agora a transmissão não será iniciada na inicialização.

Agora vamos criar um diretório para as configurações de Transmissão residirem e para os torrents baixados. Isso pressupõe que você já tenha configurado algum tipo de disco e esteja montado em / media / arm-disk /. Por motivos de segurança, o daemon será executado pelo seu próprio usuário e não como root ou como "ubuntu". Um novo usuário é criado pelo instalador para o daemon de transmissão, "debian-transmission". Este usuário precisa possuir a pasta que criamos e ter acesso de leitura e gravação ao local de armazenamento para os torrents que estão sendo baixados.

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

Agora, precisamos iniciar a transmissão, apenas brevemente, para criar o arquivo de configurações necessário:

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

Este comando inicia o daemon de transmissão como o usuário da transmissão-debian, diz para ele usar o diretório / opt / transmission para os arquivos de configurações, e diz para ele continuar rodando em primeiro plano. Depois de executar por alguns segundos, pressione Control+C para finalizá-lo. Agora podemos editar o arquivo de configurações.

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

Agora precisamos mudar para as seguintes linhas de seus padrões para ler:

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

Salve e saia (Escape, digite: wq e pressione Enter)

As duas edições intermediárias habilitarão o uso do diretório "incompleto", separando seus torrents acabados dos inacabados. Isso não é completamente necessário, mas pessoalmente acho extremamente útil. A última edição permite que a GUI da web seja acessada por qualquer computador na LAN (supondo que sua sub-rede LAN seja 192.168.1.0, modifique isso se for diferente).

Agora é uma boa idéia executar o Transmission novamente, para ver se funciona e pode realmente fazer o download de um torrent. Usaremos uma janela do navegador para acessar a GUI e adicionar um torrent. Primeiro, vamos permitir o acesso à GUI da web através do firewall a partir da LAN e, em seguida, executar o daemon de transmissão novamente.

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

Visite este URL no Firefox (ou o navegador que preferir): link , em que XXX é substituído pelo endereço de seu servidor na LAN (ou seja, 192.168.1.10). Encontre um torrent para baixar, por exemplo, Big Buck Bunny em 1080p60hz. Este é um curta gratuito, legalmente disponível para download gratuito. Na interface de transmissão, clique no botão "Abrir Torrent" e cole este link ( ou qualquer outro torrent que você gosta) na primeira caixa. Em seguida, pressione "Upload". Se a transmissão está funcionando corretamente, o torrent começará a baixar. Se isso não acontecer, então você precisará descobrir por que antes de continuar. Existem muitos recursos disponíveis na Internet para usar o daemon de transmissão. Também pode ser que o torrent escolhido não esteja funcionando, tente alguns outros primeiro.

Quando o download terminar, pressione Control+C na janela do terminal para interromper o daemon de transmissão.

Configurar transmissão de ligação para a interface VPN

Agora vamos criar um script Upstart, que será usado para iniciar a transmissão quando a VPN estiver pronta.

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

Não se preocupe se isso se queixar, é só fazer um backup do arquivo Upstart, se ele existisse - talvez não. Vamos abrir o vim para editar o novo:

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

Cole isso no 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

Salve e feche o vim. ( Escape , depois digite :wq ). Mais uma vez, abra o vim:

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

e cole isto:

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

Novamente, salve e feche o vim. ( Escape , depois digite :wq ). Finalmente:

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

Cole isto:

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

Esses scripts informam ao Upstart para ouvir o sinal "transmissão-vpn-up". O script "transmission-up.conf" configura as regras de roteamento necessárias para enviar tráfego do endereço VPN local através da interface VPN, e define o firewall para permitir o tráfego da VPN para a porta de escuta para transmissão. O tráfego direcionado para a porta de escuta da transmissão a partir da interface normal da LAN é bloqueado. O script "transmission-daemon.conf" inicia o daemon de transmissão com as configurações necessárias para vinculá-lo ao endereço IP da VPN. Observe que esse comando também garantirá que o UPnP / NAT-PMP esteja desativado - veja minha nota na parte superior sobre encaminhamento de porta. O "nice -15" configura o Transmission para ter uma prioridade mais baixa, o que achei útil ao usar o BeagleBone com especificação mais baixa - às vezes a Transmission pode consumir recursos, o que atrasa o sistema. Pelo menos com uma prioridade baixa, tarefas de sistema mais importantes ainda podem ser executadas. O script "transmission-down.conf" removerá as regras do firewall quando a VPN for interrompida. Três scripts diferentes são usados para que o daemon de transmissão possa ser executado como um usuário não privilegiado, mas as regras de firewall podem ser executadas como raiz.

Agora, vamos voltar às configurações do OpenVPN e editar os scripts "route-up" e "down" para acionar o início e a parada do nosso script de transmissão.

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

Cole isso no vim:

#! /bin/bash

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

Tudo o que esse script faz é dizer ao Upstart que o daemon de transmissão deve iniciar e fornece as informações necessárias para anexar à conexão VPN.

sudo vim /opt/ibVPN/down.sh

Novamente, mais colando:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Este script é ainda mais simples - sinaliza que o daemon de transmissão deve parar.

Neste ponto, é provavelmente uma boa ideia certificar-se de que o proprietário de toda a pasta de configuração da VPN é o usuário root - já que esses scripts são executados como root, qualquer um que possa alterá-los pode executar qualquer coisa que desejar. usuário root.

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

Isso agora significa que somente o usuário root pode modificar ou visualizar as configurações da conexão VPN.

OK, estamos quase terminando!Vamos testar se nossa configuração está funcionando até agora:

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

Conecte-se novamente à GUI da Web de transmissão e retome a torrente existente ou adicione uma nova. Deve ser capaz de baixar, talvez após alguns minutos de espera pelos colegas. Uma maneira bacana que encontrei de testar se está ou não funcionando é olhar para iftop. Instale o iftop e execute:

sudo apt-get install iftop
sudo iftop -i tap1

Esta tela mostrará todas as conexões que passam pela VPN. Se o seu torrent está baixando e está usando corretamente a VPN, haverá muitos endereços IP e nomes de host aqui. Veja também iftop para a conexão LAN:

sudo iftop -i eth0

Aqui, você verá uma grande quantidade de tráfego para um único endereço IP, sendo o servidor VPN e, em seguida, apenas o tráfego mínimo para outros dispositivos de LAN - supondo que você não esteja executando outros serviços em seu BeagleBone.

Você pode confirmar que a VPN está funcionando por seguindo estas instruções .
Este site permite que você baixe um torrent para ver o endereço IP que outros peers usam para se conectar a você - se tudo estiver funcionando, este será o endereço IP da VPN e não o seu próprio endereço IP da WAN.

Se você estiver com problemas, você pode ver o log de erros do Upstart fazendo:

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

Em um terminal / janela SSH separado, tente executar o comando tail ao iniciar a conexão VPN como acima e procure por mensagens de erro. Espero que você possa resolver o problema de ver as mensagens de erro, se não tiver uma escavação na Internet ou postar um comentário.

Configure tudo para iniciar automaticamente

Se você estiver satisfeito com a emissão manual do comando para iniciar o túnel OpenVPN, ou se quiser fazê-lo com seu próprio script, então está pronto. Mas eu queria que ele começasse no boot, então eu fiz outro script Upstart para lançar o OpenVPN.

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

Esta é a última coisa que temos que colar!

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

Tudo isso é esperar que o sistema sinalize que a rede está pronta e, em seguida, iniciará o túnel OpenVPN - que por sua vez iniciará a Transmissão. Quando o sistema é desligado, ou se a rede é desligada por algum motivo, o Upstart removerá as regras do firewall e fechará o daemon de transmissão. Simples! Isso continuará funcionando após a reinicialização também, então agora está tudo pronto.

Para interagir com Transmission, use a GUI da web como fizemos durante a fase de configuração. Também é possível tornar a GUI acessível pela Internet, configurando o encaminhamento de porta. Há muitos tutoriais sobre como fazer isso, então não vou repetir aqui.

Quanto a obter os downloads completos do BeagleBone, estou usando o NFS. Eu posso obter velocidades de cerca de 8 MB / s copiando através da LAN do BeagleBone para o meu computador de mesa - o que é muito bom para um dispositivo de baixa potência. O Ubuntu fornece algumas informações úteis para configurar isso.

    
por seanlano 10.02.2015 / 06:45
6

Acabei de trabalhar com o SystemD , então pensei em compartilhar. Coloquei todos os meus scripts, configurações e certificados no mesmo diretório ao qual eu me referirei como /etc/openvpn/myprovider

Configuração do OpenVPN

Isso depende da sua VPN específica, mas uma diferença da configuração do @seanlano é que eu só uso um script route-up . Então, as coisas que você precisa além do seu trabalho, desde a configuração , são estas linhas:

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

Onde você coloca o script transmission-route-up.sh onde quiser. Observe a ausência de um script down . (Minha VPN já estava usando um script personalizado, então teria entrado em conflito).

/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

A primeira linha, o printenv , é importante. Colocá-lo onde quiser, ele é usado no serviço SystemD mais tarde. Eu coloco no mesmo diretório da minha configuração vpn.

Substitua 24328 por qualquer porta que seu daemon de transmissão deve ouvir. Eu uso o iptables (usando o Debian), então você provavelmente pode substituir essas linhas com as linhas ufw da configuração do @seanlano.

Serviço VPN SystemD

Este é o serviço que auto inicia a VPN para nós. Verifique se o caminho para o openvpn está correto em sua máquina e se o caminho para o arquivo de configuração também está correto. Você deve especificar caminhos completos nos serviços do 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

Ative o serviço de VPN com:

systemctl enable my-vpn.service

E teste com:

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

Se estiver iniciado / em execução, você é bom.

SystemD transmission-daemon.service

Este script requer o vpn-service, portanto, se a vpn for desativada, o daemon de transmissão também será desativado. Isso é útil se a VPN for reiniciada e você receber um novo endereço IP, pois a transmissão precisará ser reiniciada e reconectada, o que deve ser feito automaticamente. Observe que usamos as variáveis de ambiente que imprimimos no script route-up anterior.

/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

Ativar

systemctl enable transmission-daemon.service

E comece

systemctl start transmission-daemon.service

Quando você reiniciar, tudo deve começar automaticamente (em ordem!). Observe que usar Type=simple no serviço vpn causa alguns problemas para o tempo de ordenação de script, portanto, eu recomendo usar forking .

Você pode especificar um endereço IP real para o rpc-bind-address se quiser ser mais restritivo (esse é o endereço de escuta da GUI da web, que não deve ser o seu VPN-ip). E se você deseja executar a transmissão com bom, apenas altere a linha ExecStart e adicione /usr/bin/nice -n15 ao início.

Como lidar com alterações de endereço

Uma coisa que eu notei ao longo do tempo é que se a conexão vpn por algum motivo receber um novo endereço IP, a transmissão ainda estará vinculada ao endereço antigo e parará de funcionar. E simplesmente fazendo systemctl restart transmission-daemon.service não corta. Ele precisa parar totalmente e começar de novo.

Não sei porquê, mas por esse motivo adicionei as seguintes linhas ao meu 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
    
por Jonas Kalderstam 11.05.2015 / 02:15
2

Notei que você mencionou que a transmissão não passa pela VPN para UPnP / NAT-PMP. Eu notei isso também e criei um patch para Transmission, de forma que ele respeite a configuração bind-address-ipv4 para o UPnP. O NAT-PMP é um pouco mais difícil de implementar, já que você precisa determinar o gateway padrão. O UPnP é o principal que está sendo usado atualmente, então provavelmente é bom o suficiente. Eu registrei isso como um bug no site trac.transmissionbt e forneci o patch. Espero que seja incorporado em uma versão futura. link

Outra opção para agora, se você não quiser recompilar, é executar manualmente o upnpc a partir do pacote miniupnpc. Por exemplo,

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

Onde 10.10.10.51 é o seu IP VPN e 51515 é a sua porta TCP / UDP solicitada.

Não sei quanto tempo o encaminhamento é bom. Além disso, você pode querer usar a opção '-d' para remover sua porta ao desconectar. Descobri que, se não o fizer, não posso obter a mesma porta novamente se entrar na VPN.

Felicidades

    
por falk0069 08.09.2015 / 03:59