Daemon de transmisión sobre OpenVPN

17

Recientemente adquirí un BeagleBone Black, en el que instalé Ubuntu utilizando este método . Todo ha funcionado hasta ahora. Quiero utilizar mi BeagleBone como una caja de torrents, pero no quiero hacerlo directamente sobre mi conexión a Internet (no creo que a mi ISP le guste), así que compré una suscripción a VPN desde un servidor europeo. . He conectado manualmente mi computadora portátil a esta VPN antes y la Transmisión de ejecución. Sé que la conexión VPN funciona en Ubuntu, y el host proporciona información de configuración para OpenVPN. De manera molesta, la naturaleza dinámica de la dirección IP asignada significa que cambiaría con frecuencia, por lo que cuando usaba mi computadora portátil con la VPN, configuraba manualmente la dirección de escucha en Transmisión al valor requerido.

Idealmente, me gustaría la siguiente configuración:

  • La transmisión se ejecuta solo a través de la VPN y tiene prohibido ejecutar torrents a través de la conexión WAN normal
  • Solo se aceptará o enviará el tráfico dirigido a la transmisión a través de la VPN, y se eliminará todo el tráfico no solicitado
  • La transmisión usa el puerto apropiado para escuchar, según la dirección IP asignada
  • OpenVPN se inicia automáticamente al arrancar, lo que luego inicia la Transmisión
  • Se puede acceder a la GUI web de la transmisión a través de la LAN, y posiblemente a través de Internet desde mi conexión WAN (es decir, no a través de la VPN)
pregunta seanlano 10.02.2015 - 05:45

3 respuestas

21

Nota: (2016-02-22) Me he dado cuenta de que esta configuración filtra las consultas de DNS a los rastreadores de torrents a través de la WAN normal, en lugar de enviarla a través de la VPN. Estoy investigando cómo solucionar esto. Sin embargo, voy a seguir ejecutando mi configuración, ya que la conexión en sí utiliza la VPN correctamente.

Actualización: Me he dado cuenta de que cuando configuro la transmisión para descargar durante la noche en el Beaglebone, el uso de la CPU va al 100% después de un tiempo. No parece suceder después de la misma cantidad de tiempo, a veces está bien toda la noche, otras veces tiene problemas después de 10 minutos. También se puede recuperar pausando todos los torrents y esperando a que la carga de la CPU vuelva a la normalidad, y luego comience de nuevo. Aún estoy investigando. Una solución podría ser detener y reanudar torrents periódicamente, aunque no es una solución muy buena. Nota este problema solo se aplica a Beaglebone, y probablemente a otros dispositivos ARM. Nunca tuve este problema en una CPU x86.

Introducción

He desarrollado y probado esta solución para Ubuntu 14.04, ejecutándose en un BeagleBone Black. El proveedor de VPN que estoy utilizando se llama ibVPN . Sin embargo, debería funcionar con cualquier hardware compatible (es decir, en una computadora x86 "normal"), con cualquier proveedor de VPN compatible con OpenVPN, y probablemente debería funcionar para la 14.10 o posterior. En algún momento, creo que Ubuntu usará SystemD para arrancar, lo que significará que los scripts Upstart utilizados aquí deberán migrarse. Actualizar: Jonas Kalderstam tiene una respuesta debajo para usar SystemD. También estoy asumiendo que ufw se está utilizando como firewall, si está utilizando algo diferente, entonces los comandos ufw aquí deberán cambiarse.

Supongo que todo el trabajo se realiza a través de una conexión SSH al sistema, aunque funcionaría igual de bien si se escribe en un terminal físico.

Este es un tutorial bastante extenso, lea todo primero y asegúrese de sentirse cómodo con lo que hará.

También he notado que la transmisión no se vincula correctamente a una dirección IP para enviar datos UPnP / NAT-PMP, es decir, los datos de torrents pasan correctamente a través de la VPN, pero si el reenvío de puertos UPnP está habilitado, la transmisión solicitará la Puerto delantero del enrutador local, no a través de la VPN del servidor VPN. Por lo tanto, he hecho que el script Upstart deshabilite el reenvío de puertos, ya que podría parecer que funcionó, pero no fue así. Debería ser posible usar iptables e iproute para forzar todo el tráfico del usuario de transmisión Debian a través de la VPN, pero todavía estoy investigando esto. También debería funcionar si se cambió la ruta predeterminada para enviar todos los datos de Internet a través de la VPN, pero no quería hacer eso porque también uso este servidor para otras cosas, y esto también provocaría que todas las actualizaciones del sistema pasen por el VPN. El efecto de esto es que la transmisión probablemente descargará torrentes más lentamente de lo que podría funcionar si el reenvío de puertos funcionara, pero he descubierto que se pueden lograr velocidades razonables para la mayoría de los torrents sin reenvío de puertos. Esta pregunta contiene más información si realmente desea que UPnP funcione durante la VPN . Actualización: falk0069 tiene un consejo fantástico debajo para ayudando a fomentar UPnP a través de la VPN.

Instalación y configuración de OpenVPN

Te recomendaría que intentaras que tu conexión VPN funcione usando Ubuntu antes de intentar que funcione aquí, es decir, desde un escritorio. Esto confirmará que tiene la configuración correcta y reducirá el tiempo dedicado a la depuración.

Primero, instale los paquetes necesarios

sudo apt-get install openvpn

Luego, cree un directorio para almacenar los archivos de configuración. Estoy usando / opt / ibVPN, ya que ese es el proveedor que estoy usando. Cámbialo a lo que quieras.

sudo mkdir /opt/ibVPN

Lo primero que debe hacer en este nuevo directorio es crear el archivo de configuración para ejecutar el cliente VPN. ibVPN proporciona un archivo de configuración básico para usuarios de Linux, que en su mayoría solo he copiado y pegado.

cd /opt/ibVPN
sudo vim config.ovpn

Copie y pegue su versión editada en vim, usando la configuración de su proveedor de VPN. (Para su información, pegar en el terminal de Ubuntu es Ctrl+Shift+V ) Debería poder obtener esto de su proveedor 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 aquellos que no estén familiarizados con vim, presiona Insert para escribir o pegar texto, luego presiona Escape y escribe :wq para guardar y salir. Por supuesto, no tiene que usar vim, cualquier editor de texto funcionará.

Explicaré rápidamente este archivo de configuración: las primeras 18 líneas especifican las configuraciones específicas para usar con el servidor, estas provienen de ibVPN; es probable que el suyo sea ligeramente diferente si tiene un proveedor diferente.Las siguientes líneas son opciones modificadas que he especificado.

  • Si su archivo de configuración tiene líneas con auth-user* , coméntelas. Para que esta configuración funcione automáticamente, necesitamos tener un archivo con el nombre de usuario y la contraseña, así que asegúrese de que la contraseña que eligió para el proveedor de VPN sea fuerte, aleatoria y única.

  • El auth-user-pass pass le dice a OpenVPN que busque un archivo llamado pass para leer el usuario y la contraseña.

  • auth-nocache elimina la contraseña de la memoria, lo que podría aumentar ligeramente la seguridad si le preocupa.

  • persist-tun intentará mantener la misma dirección IP del servidor si su conexión se cierra, lo que con suerte significa menos arranque y parada de Transmission-daemon.

  • route-noexec le dice al cliente de OpenVPN que no use automáticamente las rutas proporcionadas por el servidor, lo que atraería todo el tráfico de red a través de la VPN. Solo queremos enviar tráfico de torrents, por lo que necesitaremos usar diferentes configuraciones de enrutamiento.

  • lport 1195 le dice al cliente de OpenVPN que use el puerto 1195 en lugar de 1194; en mi caso, también quiero ejecutar un servidor OpenVPN en el mismo dispositivo, y el servidor necesitará usar el puerto 1194. Incluso si usted no están ejecutando un servidor OpenVPN, no está de más hacer este cambio.

  • Cambié la línea dev tap a dev tap1 , para forzar que el dispositivo virtual sea tap1 en lugar de ser asignado por OpenVPN, nuevamente porque se ejecuta un servidor OpenVPN separado. Incluso si no está ejecutando un servidor VPN, este cambio no debería importar. Los scripts de firewall se han escrito para usar tap1 , por lo que si prefiere usar otro dispositivo, recuerde cambiar esos scripts cuando corresponda.

  • lladdr 00:FF:11:AA:BB:CC le dice a OpenVPN que asigne la interfaz de toque para tener esta dirección MAC, que puede ser útil para las reglas de firewall de iptables.

  • route-up y down ejecutan scripts para iniciar y detener Transmission-daemon según sea necesario: se necesitan aquí porque se ejecutan con variables de entorno que contienen información sobre la conexión, que es necesaria para enlazar correctamente Transmission al derecha dirección IP y puerto.

En mi caso, tenía un certificado de servidor del proveedor de VPN, que también debe estar en el mismo directorio que el archivo de configuración.

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

Copie y pegue esto, o muévalo a través de SCP o 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, si no está utilizando una cuenta ibVPN, su certificado será diferente.

Hagamos ahora el archivo de contraseña:

sudo vim /opt/ibVPN/pass

La primera línea debe ser el nombre de usuario completo, luego la segunda línea debe ser la contraseña. Este debe ser el único contenido de este archivo.

you@address.com
myBIGstrongpassword1234567890

También debemos asegurar los permisos en este archivo, o OpenVPN no se iniciará.

sudo chmod 400 pass

Esto hará que el archivo sea de solo lectura, y solo para el propietario (es decir, ningún otro usuario puede leerlo en absoluto)

Estos comandos crearán los archivos para ejecutar al inicio y los configurará para que sean ejecutables solo por root.

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

En este punto, probablemente sea una buena idea probar si la conexión VPN realmente funciona. Inicie la conexión con:

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

Verás advertencias de que los comandos externos arriba y abajo no se pudieron ejecutar, pero no te preocupes por eso. Si funciona, verá Initialization Sequence Completed en la terminal. Presione Control+C para finalizar la conexión. Si no funciona, deberá investigar por qué no y solucionarlo antes de continuar. Descubrí que a veces tardaba unas pocas horas en comenzar a funcionar. Asegúrese de que su archivo de contraseña sea correcto. Hay muchos recursos geniales en Internet sobre OpenVPN, así que eche un vistazo.

En este punto, probablemente sea más fácil pasar a la transmisión en funcionamiento. Una vez que esté seguro de que tanto la VPN como la transmisión pueden ejecutarse por separado, se pueden combinar.

Instalación y configuración de transmisión

Instalar los paquetes necesarios:

sudo apt-get install transmission-daemon

Por defecto, la Transmisión se ejecutará automáticamente al arrancar. Ya que eventualmente usaremos OpenVPN para iniciar Transmission, queremos desactivar esto. Para hacerlo, edite el archivo de configuración para Transmission-daemon

sudo vim /etc/default/transmission-daemon

Y cambie la siguiente línea para leer:

ENABLE_DAEMON=0

Ahora la transmisión no comenzará al arrancar.

Creemos ahora un directorio para que residan las configuraciones de Transmisión y para que entren los torrents descargados. Esto supone que ya ha configurado un disco de algún tipo, y está montado en / media / arm-disk /. Por razones de seguridad, el daemon será ejecutado por su propio usuario en lugar de como root o como "ubuntu". El instalador crea un nuevo usuario para el daemon de transmisión, "debian-transmission". Este usuario necesita tener la carpeta que creamos y tener acceso de lectura y escritura a la ubicación de almacenamiento para los torrents que se están descargando.

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

Ahora necesitamos comenzar la transmisión, solo brevemente, para que cree el archivo de configuración que necesitamos:

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

Este comando inicia a transmission-daemon como el usuario de la transmisión debian, le dice que use el directorio / opt / transmission para los archivos de configuración, y le dice que siga ejecutándose en primer plano. Una vez que se haya ejecutado durante unos segundos, presione Control+C para finalizarlo. Ahora podemos editar el archivo de configuración.

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

Ahora necesitamos cambiar a las siguientes líneas de sus valores predeterminados para leer:

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

Guardar y salir (Escape, escribe: wq y presiona Enter)

Las dos ediciones intermedias permitirán el uso del directorio "incompleto", separando los torrents terminados de los inacabados. Esto no es completamente necesario, pero personalmente lo encuentro extremadamente útil. La última edición permite que cualquier computadora de la LAN acceda a la GUI web (suponiendo que su subred LAN es 192.168.1.0, modifíquela si es diferente).

Ahora es una buena idea volver a ejecutar Transmission para ver si funciona y realmente puede descargar un torrent. Utilizaremos una ventana del navegador web para acceder a la GUI y agregar un torrente. Primero, permitamos el acceso a la GUI web a través del firewall desde la LAN, luego ejecutemos el daemon de transmisión nuevamente.

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 esta URL en Firefox (o el navegador que prefiera): enlace , donde XXX se reemplaza por la dirección de su servidor en la LAN (es decir, 192.168.1.10). Encuentra un torrente para descargar, por ejemplo Big Buck Bunny en 1080p60hz. Este es un cortometraje gratuito, legalmente disponible para descarga gratuita. En la GUI de transmisión, haga clic en el botón "Abrir Torrent" y pegue este enlace ( o cualquier otro torrente que desee) en la primera casilla. Luego presione "Subir". Si la transmisión funciona correctamente, el torrente comenzará a descargarse. Si no es así, entonces tendrá que averiguar por qué antes de continuar. Hay muchos recursos disponibles en Internet para usar transmission-daemon. También podría ser que el torrente que eligió no está funcionando, pruebe primero con algunos otros.

Una vez que finaliza la descarga, presione Control+C en la ventana del terminal para detener el daemon de transmisión.

Configurar la transmisión de enlace a la interfaz VPN

Ahora hagamos un script Upstart, que se usará para iniciar Transmission cuando la VPN esté lista.

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

No se preocupe si esto se queja, es solo para hacer una copia de seguridad del archivo Upstart, si existiera, es posible que no lo haya hecho. Vamos a abrir vim para editar el nuevo:

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

Pegue esto en el 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

Guardar y cerrar vim. ( Escape , luego escribe :wq ). Nuevamente, abre vim:

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

Y pega esto:

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

De nuevo, guarda y cierra vim. ( Escape , luego escribe :wq ). Finalmente:

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

Pega esto:

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

Estos scripts le dicen a Upstart que escuche la señal de "transmisión-vpn-up". El script "transmission-up.conf" establece las reglas de enrutamiento requeridas para enviar tráfico desde la dirección VPN local a través de la interfaz VPN, y configura el firewall para permitir el tráfico desde la VPN al puerto de escucha para la transmisión. El tráfico dirigido al puerto de escucha de la Transmisión desde la interfaz LAN normal está bloqueado. El script "transmission-daemon.conf" inicia el demonio de transmisión con la configuración requerida para vincularlo a la dirección IP VPN. Tenga en cuenta que este comando también asegurará que UPnP / NAT-PMP esté desactivado; consulte mi nota en la parte superior sobre el reenvío de puertos. El "nice -15" establece que la transmisión tiene una prioridad más baja, lo que me resultó útil cuando usé el BeagleBone de menor especificación: a veces la transmisión puede controlar los recursos, lo que ralentiza el sistema. Al menos con una prioridad baja, aún se pueden ejecutar tareas más importantes del sistema. El script "transmission-down.conf" eliminará las reglas del firewall cuando se detenga la VPN. Se utilizan tres scripts diferentes para que el daemon de transmisión se pueda ejecutar como un usuario sin privilegios, pero las reglas del firewall se pueden ejecutar como root.

Ahora regresemos a la configuración de OpenVPN y editemos los scripts "enrutar" y "hacia abajo" para activar y desactivar nuestro script de transmisión.

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

Pega esto en vim:

#! /bin/bash

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

Todo lo que este script hace es decir a Upstart que el daemon de transmisión debe comenzar, y le da la información que necesita para conectarse a la conexión VPN.

sudo vim /opt/ibVPN/down.sh

Una vez más, pegar más:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Este script es aún más simple: indica que el daemon de transmisión se detiene.

En este punto, probablemente sea una buena idea asegurarse de que el propietario de toda la carpeta de configuración VPN sea el usuario raíz, ya que estos scripts se ejecutan como root, cualquiera que los pueda cambiar podría ejecutar cualquier cosa que ellos quisieran como el usuario raíz

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

Esto significa que solo el usuario raíz puede modificar o ver la configuración de la conexión VPN.

Bien, ¡casi hemos terminado!Probemos si nuestra configuración está funcionando hasta el momento:

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

Vuelva a conectarse a la GUI web de transmisión y reanude el torrente existente o agregue uno nuevo. Debería poder descargarse, tal vez después de unos minutos de espera para sus compañeros. Una forma ingeniosa que encontré de probar si está funcionando o no es mirar hacia arriba. Instale iftop y ejecute:

sudo apt-get install iftop
sudo iftop -i tap1

Esta pantalla mostrará todas las conexiones que se ejecutan a través de la VPN. Si su torrent se está descargando y está utilizando correctamente la VPN, aquí habrá muchas direcciones IP y nombres de host. Consulte también iftop para la conexión LAN:

sudo iftop -i eth0

Aquí debería ver una gran cantidad de tráfico a una única dirección IP, que es el servidor VPN, y luego solo un tráfico mínimo a otros dispositivos LAN, suponiendo que no esté ejecutando otros servicios en su BeagleBone.

Puede confirmar que la VPN funciona por siguiendo estas instrucciones .
Este sitio le permite descargar un torrente para ver la dirección IP que utilizan otros pares para conectarse a usted: si todo funciona, esta será la dirección IP VPN y no su propia dirección IP WAN.

Si tiene problemas, puede ver el registro de errores de Upstart haciendo:

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

En una ventana terminal / SSH separada, intente ejecutar el comando tail mientras inicia la conexión VPN como se indica arriba y busque cualquier mensaje de error. Esperemos que pueda resolver el problema al ver los mensajes de error, si no tiene una búsqueda en Internet o publicar un comentario.

Configurarlo todo para que comience automáticamente

Si está satisfecho con la emisión manual del comando para iniciar el túnel OpenVPN, o si desea hacerlo con su propio script, entonces ha terminado. Pero quería que comenzara al arrancar, así que hice otro script Upstart para abrir OpenVPN.

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

¡Esto es lo último que tenemos que pegar!

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

Todo lo que hace es esperar a que el sistema indique que la red está lista, y luego iniciará el túnel OpenVPN, que a su vez iniciará la transmisión. Cuando el sistema está apagado, o si la red se cierra por algún motivo, Upstart eliminará las reglas del firewall y cerrará el daemon de transmisión. ¡Sencillo! Esto continuará funcionando después de reiniciar también, por lo que ahora está listo.

Para interactuar con Transmission, use la GUI web como lo hicimos durante la fase de configuración. También es posible hacer que la GUI sea accesible a través de Internet configurando el reenvío de puertos. Hay muchos tutoriales sobre cómo hacer esto, así que no lo repetiré aquí.

En cuanto a obtener descargas completas de BeagleBone, estoy usando NFS. Puedo obtener velocidades de aproximadamente 8 MB / s copiando a través de la LAN desde el BeagleBone a mi computadora de escritorio, lo cual es bastante bueno para un dispositivo de baja potencia. Ubuntu proporciona información útil para configurarlo.

    
respondido por el seanlano 10.02.2015 - 05:45
6

Acabo de hacer esto funcionando con SystemD , así que pensé en compartirlo. He colocado todos mis scripts, configs y certificados en el mismo directorio al que me referiré como /etc/openvpn/myprovider

Configuración de OpenVPN

Esto depende de su VPN específica, pero una diferencia con la configuración de @ seanlano es que solo uso un script route-up . Entonces, las cosas que necesita además de su configuración de trabajo proporcionada , son estas líneas:

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

donde coloca el script transmission-route-up.sh donde lo desee. Tenga en cuenta la ausencia de un script down . (Mi VPN ya estaba usando una secuencia de comandos personalizada, por lo que habría entrado en conflicto de todos modos).

/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

La primera línea, el printenv , es importante. Colóquelo donde desee, se usa más adelante en el servicio SystemD. Lo coloco en el mismo directorio que mi configuración vpn.

Reemplaza 24328 con cualquier puerto en el que tu daemon de transmisión escuche. Utilizo iptables (usando Debian), por lo que probablemente pueda reemplazar esas líneas con las líneas ufw de la configuración de @ seanlano.

Servicio VPN de SystemD

Este es el servicio que inicia automáticamente la VPN para nosotros. Verifique que la ruta a openvpn sea la correcta en su máquina, y que la ruta al archivo de configuración también sea correcta. debe especificar rutas completas en los servicios de 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

Habilite el servicio VPN con:

systemctl enable my-vpn.service

Y pruébelo con:

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

Si se inicia / se ejecuta, eres bueno.

SystemD transmission-daemon.service

Este script requiere el servicio vpn, por lo que si el vpn falla, el daemon de transmisión también se desactiva. Esto es útil si se reinicia vpn, y obtienes una nueva dirección IP, porque la transmisión tendrá que reiniciarse y volverse a enlazar, lo que se debe manejar automáticamente. Tenga en cuenta que hacemos uso de las variables de entorno que imprimimos en el script route-up anteriormente.

/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

Habilítelo

systemctl enable transmission-daemon.service

Y comienza

systemctl start transmission-daemon.service

Cuando reinicies, todo debería comenzar automáticamente (¡en orden!). Tenga en cuenta que el uso de Type=simple en el servicio vpn causa algunos problemas para el tiempo de ordenamiento de scripts, por lo tanto, recomiendo usar forking en su lugar.

Puede especificar una dirección IP real para rpc-bind-address si desea ser más restrictivo (esta es la dirección de escucha de la GUI web, que no debería ser su VPN-ip). Y si quiere ejecutar la transmisión con nice, simplemente cambie la línea ExecStart y agregue /usr/bin/nice -n15 al principio.

Gestión de cambios de dirección

Una cosa que he notado con el tiempo es que si la conexión vpn por algún motivo obtiene una nueva dirección IP, la transmisión seguirá vinculada a la dirección anterior y dejará de funcionar. Y simplemente hacer systemctl restart transmission-daemon.service no lo corta. Necesita detenerse completamente y luego comenzar de nuevo.

No tengo idea de por qué, pero por esa razón agregué las siguientes líneas a mi crontab root ( 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
    
respondido por el Jonas Kalderstam 11.05.2015 - 00:15
2

Noté que mencionó que la Transmisión no pasa por la VPN para UPnP / NAT-PMP. Me di cuenta de esto también y creé un parche para Transmisión, por lo que respeta la configuración bind-address-ipv4 para UPnP. NAT-PMP es un poco más difícil de implementar ya que necesita determinar la puerta de enlace predeterminada. UPnP es el principal que se está utilizando en estos días, sin embargo, por lo que es probablemente lo suficientemente bueno. Logré esto como un error en el sitio trac.transmissionbt y proporcioné el parche. Esperemos que se incorpore en una versión futura. enlace

Otra opción para ahora si no quieres recompilar es ejecutar upnpc manualmente desde el paquete miniupnpc. Por ejemplo,

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

Donde 10.10.10.51 es su VPN IP y 51515 es su puerto TCP / UDP solicitado.

No estoy seguro por cuánto tiempo es bueno el reenvío. También es posible que desee utilizar la opción '-d' para eliminar su puerto al desconectarse. Descubrí que si no lo hago, no puedo obtener el mismo puerto nuevamente si vuelvo a iniciar sesión en la VPN.

Saludos

    
respondido por el falk0069 08.09.2015 - 01:59

Lea otras preguntas en las etiquetas