Recentemente, adquiri um BeagleBone Black, no qual instalei o Ubuntu usando esse método . Tudo funcionou até agora. Quero usar meu BeagleBone como uma caixa de torrent, mas não quero fazê-lo diretamente na minha conexão com a Internet (acho que meu ISP não vai gostar) - então comprei uma assinatura VPN de um servidor europeu . Eu conectei manualmente meu laptop a esta VPN antes e execute a Transmission. 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 atribuído significa que ele mudaria com frequência; portanto, quando eu usava meu laptop com a VPN, definia manualmente o endereço de escuta em Transmission para o valor necessário.
Idealmente, eu gostaria da seguinte configuração:
- A transmissão é executada apenas pela VPN e é proibida a execução de torrents na conexão WAN normal
- Somente o tráfego direcionado à transmissão será aceito ou enviado através da VPN, todo o tráfego não solicitado será descartado
- A transmissão usa a porta apropriada para escutar, com base no endereço IP atribuído
- O OpenVPN inicia automaticamente na inicialização, que posteriormente inicia 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 através da VPN)
fonte
Respostas:
Nota: (22/02/2016) Percebi que essa configuração vaza consultas DNS para os rastreadores de torrent através da WAN normal, em vez de enviá-la pela VPN. Estou investigando como consertar isso. Mas continuarei executando minha configuração, pois a conexão em si usa a VPN corretamente.
Atualização: notei que, quando defino o Transmission para download durante a noite no Beaglebone, o uso da CPU chega a 100% depois de um tempo. Parece que isso não acontece depois da mesma quantidade de tempo; às vezes, tudo fica bem a noite toda; outras, depois de 10 minutos. Ele também pode se recuperar pausando todos os torrents e aguardando que a carga da CPU volte ao normal e iniciando 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. Observe que esse problema se aplica 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 . No entanto, ele deve funcionar com qualquer hardware suportado (ou seja, em um computador x86 "normal"), com qualquer provedor de VPN compatível com OpenVPN - e provavelmente deve funcionar para a 14.10 ou posterior. Em algum momento, acredito que o Ubuntu usará o SystemD para inicialização, o que significa que os scripts do Upstart usados aqui precisarão ser migrados. Atualização: Jonas Kalderstam tem uma resposta abaixo para usar o SystemD. Também estou assumindo que o ufw está sendo usado como firewall, se você estiver usando algo diferente, os comandos ufw aqui precisarão ser alterados.
Suponho que todo o trabalho seja feito através de uma conexão SSH com o sistema, embora funcionasse tão bem se digitado em um terminal físico.
Este é um tutorial bastante longo, leia tudo primeiro e verifique se você está confortável com o que fará.
Também notei que a transmissão não se liga adequadamente a um endereço IP para o envio de dados UPnP / NAT-PMP - ou seja, dados torrent passam corretamente pela VPN, mas se o encaminhamento de porta UPnP estiver ativado, a transmissão solicitará o encaminhamento da porta do roteador local , não através da VPN do servidor VPN. Por isso, fiz o script Upstart desativar o encaminhamento de porta, pois pode parecer que funcionou, mas não funcionou. Deve ser possível usar o iptables e o iproute para forçar todo o tráfego do usuário de transmissão debian através da VPN, mas ainda estou analisando isso. Também deveria funcionar se a rota padrão fosse alterada para enviar todos os dados da Internet por meio da VPN, mas eu não queria fazer isso porque também utilizava esse servidor para outras coisas, e isso também faria com que todas as atualizações do sistema passassem pelo VPN.Esta pergunta tem mais informações se você realmente deseja que o UPnP funcione através da VPN . Atualização: falk0069 tem uma dica fantástica abaixo para ajudar a incentivar o UPnP através da VPN.
Instalando e configurando o OpenVPN
Eu recomendo que você tente fazer sua conexão VPN funcionar usando o Ubuntu antes de tentar fazê-la funcionar aqui - ou seja, em um desktop. Isso confirmará que você possui a configuração correta e reduzirá o tempo gasto na depuração.
Primeiro, instale os pacotes necessários
Em seguida, crie um diretório para armazenar os arquivos de configuração. Estou usando / opt / ibVPN, pois esse é o provedor que estou usando. Mude para o que quiser.
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 apenas copiei e colei.
Copie e cole sua versão editada no vim, usando as configurações do seu provedor de VPN. (FYI, cole no terminal Ubuntu é
Ctrl+Shift+V
) Você deve conseguir isso com seu provedor de VPN.Para aqueles que não estão familiarizados com o vim, pressione
Insert
para digitar ou colar texto e pressioneEscape
e digite:wq
para salvar e sair. Obviamente, você não precisa usar o vim - qualquer editor de texto funcionará.Explicarei rapidamente esse arquivo de configuração: As primeiras 18 linhas especificam as configurações específicas a serem usadas com o servidor, elas vieram do ibVPN - as suas provavelmente serão ligeiramente diferentes 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 linhas
auth-user*
, comente-as. 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 que você escolheu para o provedor de VPN é forte, aleatória e exclusiva.O
auth-user-pass pass
comando diz ao OpenVPN para procurar um arquivo chamadopass
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 sua conexão cair, o que, esperamos, significa menos inicialização e parada do Transmission-daemon.route-noexec
diz ao cliente OpenVPN para não usar automaticamente as rotas fornecidas pelo servidor - o que puxaria todo o tráfego da rede pela VPN. Apenas queremos enviar tráfego de torrent, portanto, 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, também quero executar um servidor OpenVPN no mesmo dispositivo, e o servidor precisará usar a porta 1194. Mesmo se você não estiver executando um servidor OpenVPN, não dói fazer essa mudança.Alterei a linha
dev tap
paradev 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 deve importar. Os scripts do firewall foram escritos para usotap1
, portanto, se você preferir usar outro dispositivo, lembre-se de alterá-los quando apropriado.lladdr 00:FF:11:AA:BB:CC
diz ao OpenVPN para atribuir a interface de toque a esse endereço MAC, o que pode ser útil para as regras de firewall do iptables.route-up
edown
execute scripts para iniciar e parar o Transmission-daemon, conforme necessário - estes são necessários aqui porque são executados com variáveis de ambiente que contêm informações sobre a conexão, necessárias para ligar corretamente a Transmission ao endereço IP e à porta corretos.No meu caso, eu tinha um certificado de servidor do provedor VPN - que também precisa estar no mesmo diretório que o arquivo de configuração.
Copie e cole isso ou mova-o via SCP ou SSHFS.
Obviamente, se você não estiver usando uma conta ibVPN, seu certificado será diferente.
Vamos agora criar o arquivo de senha:
A primeira linha deve ser o nome de usuário completo e a segunda linha deve ser a senha. Esse deve ser o único conteúdo deste arquivo.
Também precisamos garantir as permissões nesse arquivo, ou o OpenVPN não será iniciado.
Isso tornará o arquivo somente leitura e apenas para o proprietário (ou seja, nenhum outro usuário poderá lê-lo)
Esses comandos criarão os arquivos a serem executados na inicialização e os definirão para serem executáveis somente pela raiz.
Neste ponto, provavelmente é uma boa ideia testar se a conexão VPN realmente funciona. Inicie a conexão com:
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. PressioneControl+C
para finalizar a conexão. Se não funcionar, você terá que investigar por que não e corrigi-lo antes de continuar. Descobri que algumas vezes eram necessárias algumas tentativas para começar a trabalhar. Verifique se o seu arquivo de senha está correto. Existem muitos recursos excelentes na Internet sobre o OpenVPN, então dê uma olhada.Neste ponto, provavelmente é mais fácil avançar para colocar a Transmission em funcionamento. Depois de ter certeza de que a VPN e a transmissão podem ser executadas separadamente, elas podem ser combinadas.
Instalando e configurando a transmissão
Instale os pacotes necessários:
Por padrão, a transmissão será executada automaticamente na inicialização. Como eventualmente usaremos o OpenVPN para iniciar a transmissão, queremos desativar isso. Para fazer isso, edite o arquivo de configuração para o Transmission-daemon
E altere a seguinte linha para ler:
Agora a transmissão não inicia na inicialização.
Vamos agora criar um diretório para as configurações de Transmissão residirem e para os torrents baixados. Isso pressupõe que você já configurou algum tipo de disco e está montado em / media / arm-disk /. Por questões de segurança, o daemon será executado por 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". Esse usuário precisa possuir a pasta que criamos e ter acesso de leitura e gravação ao local de armazenamento dos torrents que estão sendo baixados.
Agora precisamos iniciar a transmissão, apenas brevemente, para que ele crie o arquivo de configurações que precisamos:
Este comando inicia o daemon de transmissão como o usuário da transmissão do debian, instrui-o a usar o diretório / opt / transmission para os arquivos de configurações e instrui-o a continuar em execução em primeiro plano. Depois de alguns segundos, pressione
Control+C
para finalizar. Agora podemos editar o arquivo de configurações.Agora precisamos mudar para as seguintes linhas de seus padrões para ler:
Salvar e sair (Escape, digite: wq e pressione Enter)
As duas edições do meio permitirão o uso do diretório "incompleto", separando os torrents finalizados 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-a se for diferente).
Agora é uma boa ideia rodar o Transmission novamente, para ver se funciona e pode realmente baixar um torrent. Usaremos uma janela do navegador da web para acessar a GUI e adicionar um torrent. Primeiro, vamos permitir o acesso à GUI da web através do firewall da LAN e, em seguida, execute o daemon de transmissão novamente.
Visite este URL no Firefox (ou em qualquer navegador que você preferir): http://XXX.XXX.XXX.XXX:9091 , onde XXX é substituído pelo endereço do seu servidor na LAN (por exemplo, 192.168.1.10). Encontre um torrent para download, por exemplo, Big Buck Bunny em 1080p60hz. Este é um curta-metragem gratuito, disponível legalmente para download gratuito. Na GUI de transmissão, clique no botão "Abrir Torrent" e cole este link (ou qualquer outro torrent que você desejar) na primeira caixa. Então pressione "Upload". Se a transmissão estiver funcionando corretamente, o torrent começará a baixar. Se isso não acontecer, você precisará descobrir o motivo antes de continuar. Existem muitos recursos disponíveis na Internet para usar o daemon de transmissão. Também pode ser que o torrent que você escolheu não esteja funcionando, tente alguns outros primeiro.
Quando o download estiver concluído, pressione
Control+C
na janela do terminal para parar o daemon de transmissão.Configurar transmissão de ligação à interface VPN
Agora vamos criar um script Upstart, que será usado para iniciar a transmissão quando a VPN estiver pronta.
Não se preocupe se isso reclamar, é apenas para fazer um backup do arquivo Upstart, se ele existir - ele pode não ter. Vamos abrir o vim para editar o novo:
Cole isso no editor:
Salve e feche o vim. (
Escape
, digite:wq
). Novamente, abra o vim:E cole este:
Mais uma vez, salve e feche o vim. (
Escape
, digite:wq
). Finalmente:Cole isto:
Esses scripts dizem ao Upstart para ouvir o sinal "transmissão-vpn-up". O script "conversion-up.conf" configura as regras de roteamento necessárias para enviar tráfego do endereço VPN local por meio da interface VPN e define o firewall para permitir o tráfego da VPN para a porta de escuta de Transmissão. O tráfego direcionado para a porta de escuta da transmissão a partir da interface normal da LAN está bloqueado. O script "transmission-daemon.conf" inicia a transmissão-daemon com as configurações necessárias para vinculá-lo ao endereço IP da VPN. Observe que este comando também garantirá que o UPnP / NAT-PMP esteja desativado - veja minha observação no topo sobre encaminhamento de porta. O "nice -15" define a Transmission para ter uma prioridade mais baixa, que eu achei útil ao usar o BeagleBone de especificação inferior - às vezes a Transmission pode consumir recursos, o que atrasa o sistema. Pelo menos com baixa prioridade, tarefas mais importantes do sistema ainda podem ser executadas. O script "conversion-down.conf" removerá as regras de firewall quando a VPN for parada. Três scripts diferentes são usados para que o daemon de transmissão possa ser executado como um usuário sem privilégios, mas as regras do 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 script de transmissão.
Cole isso no vim:
Tudo o que esse script faz é dizer ao Iniciante que o daemon de transmissão deve iniciar e fornece as informações necessárias para conectar à conexão VPN.
Novamente, mais colagem:
Esse script é ainda mais simples - sinaliza para a transmissão-daemon parar.
Nesse momento, é provavelmente uma boa idéia garantir que o proprietário de toda a pasta de configuração da VPN seja o usuário raiz - uma vez que esses scripts são executados como raiz, qualquer pessoa que possa alterá-los pode executar o que quiser como usuário raiz.
Agora, isso significa que apenas o usuário root pode modificar ou visualizar as configurações de conexão VPN.
OK, estamos quase terminando! Vamos testar se nossa configuração está funcionando até agora:
Conecte-se novamente à GUI da web da transmissão e retome o torrent existente ou adicione um novo. Deve ser capaz de fazer o download, talvez depois de alguns minutos de espera pelos colegas. Uma maneira bacana que encontrei de testar se está funcionando ou não é examinar o iftop. Instale o iftop e execute:
Essa tela mostrará todas as conexões em execução na VPN. Se o seu torrent estiver baixando e estiver usando corretamente a VPN, haverá muitos endereços IP e nomes de host aqui. Veja também iftop para a conexão LAN:
Aqui você deve 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 no seu BeagleBone.
Você pode confirmar que a VPN está funcionando seguindo estas instruções .
Este site permite que você baixe um torrent para ver o endereço IP que outros colegas usam para se conectar a você - se tudo estiver funcionando, será o endereço IP da VPN e não o seu próprio endereço IP da WAN.
Se você estiver com problemas, poderá ver o log de erros do Upstart fazendo:
Em uma janela separada do terminal / SSH, 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 vendo 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 do OpenVPN ou desejar fazê-lo com seu próprio script, estará pronto. Mas eu queria que ele iniciasse na inicialização, então criei outro script Upstart para iniciar o OpenVPN.
Esta é a última coisa que temos que colar!
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 é desativada por algum motivo, o Upstart remove as regras do firewall e fecha o daemon de transmissão. Simples! Isso continuará a funcionar após uma reinicialização também, agora você está pronto.
Para interagir com a transmissão, 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. Existem muitos tutoriais sobre como fazer isso, então não vou repeti-lo aqui.
Quanto a obter os downloads concluídos do BeagleBone, estou usando o NFS. Posso obter velocidades de cópia de cerca de 8 MB / s através da LAN do BeagleBone para o meu computador desktop - o que é muito bom para um dispositivo de baixa potência. O Ubuntu fornece algumas informações úteis para configurar isso.
fonte
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 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
route-up
script. Portanto, o que você precisa, além de sua configuração fornecida , são as seguintes:Onde você coloca o
transmission-route-up.sh
script onde quiser. Observe a ausência de umdown
script. (Minha VPN já estava usando um script inativo personalizado, por isso teria conflito de qualquer maneira)./etc/openvpn/myprovider/transmission-route-up.sh:
A primeira linha, o
printenv
, é importante. Coloque-o onde quiser, e depois será usado no serviço SystemD. Coloco-o no mesmo diretório da minha configuração de VPN.Substitua 24328 por qualquer porta que seu daemon de transmissão escute. Eu uso iptables (usando Debian), então você provavelmente pode substituir essas linhas pelas linhas ufw da configuração do @ seanlano.
Serviço SystemD VPN
Este é o serviço que inicia automaticamente 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 SystemD.
/etc/systemd/system/my-vpn.service:
Ative o serviço VPN com:
E teste com:
Se estiver iniciado / funcionando, você está bem.
SystemD transmissão-daemon.service
Este script requer o serviço vpn, portanto, se o vpn cair, o daemon de transmissão também ficará inoperante. Isso é útil se o vpn for reiniciado e você obtiver um novo endereço IP, porque a transmissão precisará reiniciar e religar novamente, o que deve ser tratado automaticamente. Observe que usamos as variáveis de ambiente que imprimimos no
route-up
script anteriormente./etc/systemd/system/transmission-daemon.service:
Habilitá-lo
E comece
Quando você reinicia, tudo deve iniciar automaticamente (em ordem!). Observe que o uso
Type=simple
no serviço vpn causa alguns problemas no tempo de ordenação de scripts, portanto, recomendo o usoforking
.Você pode especificar um endereço IP real para o
rpc-bind-address
caso você queira ser mais restritivo (este é 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 desempenho, basta alterar aExecStart
linha e adicionar/usr/bin/nice -n15
ao início.Manipulação de alterações de endereço
Uma coisa que notei ao longo do tempo é que, se por algum motivo a conexão vpn receber um novo endereço IP, a transmissão ainda estará vinculada ao endereço antigo e deixará de funcionar. E simplesmente
systemctl restart transmission-daemon.service
não serve. Ele precisa parar completamente e começar do zero.Não sei por que, mas, por esse motivo, adicionei as seguintes linhas ao meu root crontab (
sudo crontab -e
):fonte
Notei que você mencionou que a transmissão não passa pela VPN para UPnP / NAT-PMP. Percebi isso também e criei um patch para a transmissão, para que ele honre a configuração de endereço de ipv4 de ligação para UPnP. O NAT-PMP é um pouco mais difícil de implementar, pois você precisa determinar o gateway padrão. O UPnP é o principal que está sendo usado atualmente, no entanto, portanto é provavelmente bom o suficiente. Registrei isso como um bug no site trac.transmissionbt e forneci o patch. Espero que seja incorporado em uma versão futura. https://trac.transmissionbt.com/ticket/5990
Outra opção agora, se você não deseja recompilar, é executar manualmente o upnpc a partir do pacote miniupnpc. Por exemplo
Onde 10.10.10.51 é o seu IP da VPN e 51515 é a porta TCP / UDP solicitada.
Não sei por quanto tempo o encaminhamento é bom. Além disso, você pode usar a opção '-d' para remover sua porta ao desconectar. Descobri que, se não o fizer, não poderei obter a mesma porta novamente se fizer login novamente na VPN.
Felicidades
fonte
miniupnpc
! E espero que o patch seja mesclado e esse problema seja corrigido para sempre. Enquanto isso, definitivamente tentarei usar sua dica útil.