Demonio de transmisión sobre OpenVPN

20

Recientemente adquirí un BeagleBone Black, en el que instalé Ubuntu usando este método . Todo ha funcionado hasta ahora. Quiero usar mi BeagleBone como caja de torrents, pero no quiero hacerlo directamente a través de mi conexión a Internet (no creo que a mi ISP le guste), así que compré una suscripción VPN de un servidor europeo . He conectado manualmente mi computadora portátil a esta VPN antes y ejecuto la transmisión. Sé que la conexión VPN funciona en Ubuntu, y el host proporciona información de configuración para OpenVPN. Molesto, 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 está prohibido ejecutar torrents a través de la conexión WAN normal
  • Solo el tráfico dirigido a la transmisión será aceptado o enviado a través de la VPN, todo el otro tráfico no solicitado será eliminado
  • La transmisión utiliza el puerto apropiado para escuchar, según la dirección IP asignada
  • OpenVPN se inicia automáticamente en el arranque, que luego inicia la transmisión
  • Se puede acceder a la GUI web de Transmission 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)
seanlano
fuente
3
Las respuestas personales no son malas. No te disculpes por ellos. Sin embargo, tampoco tiene que explicar que es lo que está haciendo ... Es un comportamiento alentado
RobotHumans
De acuerdo con @hbdgaf. No necesitas disculparte. Gran trabajo en todos los frentes.
JakeGould

Respuestas:

23

Nota: (22/02/2016) Me di cuenta de que esta configuración filtra las consultas 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, seguiré ejecutando mi configuración, ya que la conexión en sí usa la VPN correctamente.


Actualización: me di cuenta de que cuando configuré la transmisión para que se descargue durante la noche en Beaglebone, el uso de la CPU pasa 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 al pausar todos los torrents y esperar que la carga de la CPU vuelva a la normalidad, y luego comenzar de nuevo. Todavía estoy investigando. Una solución alternativa podría ser pausar y reanudar torrents periódicamente, aunque no es una solución muy buena. Tenga en cuenta que este problema solo se aplica a Beaglebone, y probablemente a otros dispositivos ARM. Nunca he tenido este problema en una CPU x86.


Introducción

Desarrollé y probé esta solución para Ubuntu 14.04, ejecutándose en un BeagleBone Black. El proveedor de VPN que estoy usando 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 14.10 o posterior. En algún momento, creo que Ubuntu usará SystemD para el arranque, lo que significará que los scripts de Upstart utilizados aquí deberán migrarse. Actualización: Jonas Kalderstam tiene una respuesta a continuación para usar SystemD. También estoy asumiendo que ufw se está utilizando como firewall, si está usando algo diferente, entonces los comandos de 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 largo, léalo todo primero y asegúrese de sentirse cómodo con lo que hará.

También he notado que la transmisión no se une correctamente a una dirección IP para enviar datos UPnP / NAT-PMP, es decir, los datos del torrente pasan correctamente a través de la VPN, pero si el reenvío de puertos UPnP está habilitado, la transmisión solicitará el puerto hacia adelante desde el enrutador local , no a través de la VPN desde el servidor VPN. Por lo tanto, hice que el script Upstart desactive el reenvío de puertos, ya que puede parecer que funcionó, pero no lo hizo. Debería ser posible usar iptables e iproute para forzar todo el tráfico del usuario de transmisión de 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 hacerlo porque también uso este servidor para otras cosas, y esto también provocaría que todas las actualizaciones del sistema lleguen a través del VPNEsta pregunta tiene más información si realmente desea que UPnP funcione a través de la VPN . Actualización: falk0069 tiene un consejo fantástico a continuación para ayudar a alentar a UPnP a través de la VPN.

Instalar y configurar OpenVPN

Recomiendo que intentes que tu conexión VPN funcione con 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 requeridos

sudo apt-get install openvpn

A continuación, 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 acabo de copiar y pegar.

cd /opt/ibVPN
sudo vim config.ovpn

Copie y pegue su versión editada en vim, utilizando la configuración de su proveedor de VPN. (Para su información, pegue en el terminal de Ubuntu 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, presione Insert para escribir o pegar texto, luego presione Escape y escriba :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 la configuración específica para usar con el servidor, estas provienen de ibVPN; la suya probablemente será ligeramente diferente si tiene un proveedor diferente. Las siguientes líneas son opciones modificadas que he especificado.

  • Si su archivo de configuración tenía líneas 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 segura, aleatoria y única.

  • El auth-user-pass passle dice a OpenVPN que busque un archivo llamado passpara 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 cae, lo que con suerte debería significar menos inicio y detención de Transmission-daemon.

  • route-noexecle dice al cliente 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 torrent, por lo que tendremos que usar diferentes configuraciones de enrutamiento.

  • lport 1195 le dice al cliente OpenVPN que use el puerto 1195 en lugar del 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 no está ejecutando un servidor OpenVPN, no hace daño hacer este cambio.

  • Cambié la línea dev tapa dev tap1, para forzar que el dispositivo virtual sea tap1 en lugar de ser asignado por OpenVPN, nuevamente debido a la ejecución de un servidor OpenVPN separado. Incluso si no está ejecutando un servidor VPN, este cambio no debería importar. Los scripts del 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 tap para tener esta dirección MAC, que puede ser útil para las reglas de firewall de iptables.

  • route-upy downejecutar scripts para iniciar y detener el demonio de transmisión según sea necesario; estos son necesarios aquí porque se ejecutan con variables de entorno que contienen información sobre la conexión, que es necesaria para vincular correctamente la transmisión a la dirección IP y el puerto correctos.

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.

[email protected]
myBIGstrongpassword1234567890

También tenemos que 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)

Estos comandos crearán los archivos para que se ejecuten 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. Comience la conexión con:

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

Verá advertencias de que los comandos externos arriba y abajo no se pudieron ejecutar, pero no se preocupe por eso. Si funciona, lo verás Initialization Sequence Completeden la terminal. Presione Control+Cpara finalizar la conexión. Si no funciona, tendrá que investigar por qué no y solucionarlo antes de continuar. Descubrí que a veces tomaba algunos minutos comenzar a trabajar. Asegúrese de que su archivo de contraseña sea correcto. Hay muchos recursos excelentes en Internet sobre OpenVPN, así que eche un vistazo.

En este punto, probablemente sea más fácil avanzar para poner en marcha la Transmisión. Una vez que esté seguro de que tanto la VPN como la Transmisión pueden ejecutarse por separado, se pueden combinar.

Instalar y configurar la transmisión

Instale los paquetes requeridos:

sudo apt-get install transmission-daemon

Por defecto, la transmisión se ejecutará automáticamente en el arranque. Como eventualmente usaremos OpenVPN para iniciar la transmisión, queremos deshabilitar 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 se iniciará en el arranque.

Ahora creemos un directorio para que resida la configuración 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 motivos 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 la transmisión-daemon, "debian-transmission". Este usuario debe ser propietario de la carpeta que creamos y tener acceso de lectura y escritura a la ubicación de almacenamiento de los torrents que se descargan.

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 el demonio de transmisión como el usuario de transmisión de 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+Cpara finalizarlo. Ahora podemos editar el archivo de configuración.

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

Ahora tenemos que 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, escriba: wq y presione Entrar)

Las dos ediciones centrales 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 en la LAN acceda a la GUI web (suponiendo que su subred LAN sea 192.168.1.0, modifíquela si es diferente).

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

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): http://XXX.XXX.XXX.XXX:9091 , donde XXX se reemplaza por la dirección de su servidor en la LAN (es decir, 192.168.1.10). Encuentre un torrent para descargar, por ejemplo Big Buck Bunny en 1080p60hz. Este es un cortometraje gratuito, legalmente disponible para su descarga gratuita. En la GUI de transmisión, haga clic en el botón "Abrir torrent" y pegue este enlace (o cualquier otro torrent que desee) en el primer cuadro. Luego presione "Cargar". Si la transmisión funciona correctamente, el torrent comenzará a descargarse. Si no es así, deberá averiguar por qué antes de continuar. Hay muchos recursos disponibles en Internet para usar el demonio de transmisión. También podría ser el torrente que elegiste no funciona, prueba algunos otros primero.

Una vez que finalice la descarga, presione Control+Cen la ventana de terminal para detener el demonio de transmisión.

Configurar la transmisión vinculante a la interfaz VPN

Ahora hagamos un script Upstart, que se usará para iniciar la Transmisión 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. Abramos 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 escriba :wq). De nuevo, abra vim:

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

Y pegue 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

Nuevamente, guarde y cierre vim. ( Escape, luego escriba :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

Estas secuencias de comandos le dicen a Upstart que escuche la señal de "transmisión-vpn-up". La secuencia de comandos "transmission-up.conf" establece las reglas de enrutamiento necesarias para enviar tráfico desde la dirección VPN local a través de la interfaz VPN, y establece 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. La secuencia de comandos "transmission-daemon.conf" inicia la transmisión-daemon con la configuración requerida para vincularlo a la dirección IP VPN. Tenga en cuenta que este comando también garantizará que UPnP / NAT-PMP esté deshabilitado; consulte mi nota en la parte superior sobre el reenvío de puertos. El "nice -15" establece que Transmission tenga una prioridad más baja, lo que me pareció útil al usar el BeagleBone con especificaciones más bajas; a veces, la transmisión puede acaparar 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 demonio 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 de "ruta hacia arriba" y "hacia abajo" para activar el inicio y la detención de 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 decirle a Upstart que se debe iniciar el demonio de transmisión, y le brinda la información que necesita para conectarse a la conexión VPN.

sudo vim /opt/ibVPN/down.sh

De nuevo, más pegado:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

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

En este punto, probablemente sea una buena idea asegurarse de que el propietario de toda la carpeta de configuración de VPN sea el usuario root, ya que estos scripts se ejecutan como root, cualquiera que pueda cambiarlos podría ejecutar lo que quisiera como usuario root.

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

Esto ahora significa que solo el usuario root puede modificar o ver la configuración de conexión VPN.

OK, ya casi terminamos! Probemos si nuestra configuración funciona hasta ahora:

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

Conéctese nuevamente a la GUI web de transmisión y reanude el torrente existente o agregue uno nuevo. Debería poder descargar, tal vez después de unos minutos de espera para sus compañeros. Una manera ingeniosa que encontré de probar si funciona o no es mirar iftop. 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. También mire iftop para la conexión LAN:

sudo iftop -i eth0

Aquí debería ver una gran cantidad de tráfico a una sola 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 siguiendo estas instrucciones .
Este sitio le permite descargar un torrent para ver la dirección IP que otros pares usan para conectarse con 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 lo siguiente:

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

En una ventana de terminal / SSH separada, intente ejecutar el comando de cola mientras inicia la conexión VPN como se indicó anteriormente y busque cualquier mensaje de error. Espero que pueda resolver el problema al ver los mensajes de error, si no tiene una excavación en Internet o publicar un comentario.

Configure todo para comenzar 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 ya está. Pero quería que comenzara en el arranque, así que hice otro script Upstart para iniciar 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 apaga por algún motivo, Upstart eliminará las reglas del firewall y cerrará el demonio de transmisión. ¡Sencillo! Esto continuará funcionando después de un reinicio también, así que ahora ya está todo 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 las 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 tan baja potencia. Ubuntu proporciona información útil para configurar esto.

seanlano
fuente
¡Guauu! ¿Cuánto tiempo pasaste buscando todas estas cosas?
Ismael Miguel
Jaja, bastante tiempo. Lo había hecho una vez antes en un enrutador DD-WRT, luego, cuando lo estaba haciendo nuevamente para el BeagleBone, pensé en escribir esto para no olvidar cómo hacerlo. : D
seanlano
1
También debería leer esto: unix.stackexchange.com/questions/88693/… (Es una gran respuesta). Esto lo ayudará, estoy seguro.
Ismael Miguel
3
Me acabo de dar cuenta, después de configurar mi servidor DNS para usar OpenDNS y mirar las estadísticas, que esta configuración filtra DNS a través de la conexión WAN normal . Investigaré más a fondo para ver si puedo solucionar esto. Voy a seguir funcionando de todos modos, ya que la conexión en sí es a través de la VPN, pero no es lo ideal.
seanlano
1
@seanlano Gracias por informarnos de esto. Háganos saber si / cuando encuentre una solución.
Winterflags
7

Acabo de hacer que esto funcione usando SystemD, así que pensé en compartir. He colocado todos mis scripts, configuraciones 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 de la configuración de @ seanlano es que solo uso un route-upscript. 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 colocas el transmission-route-up.shguión donde quieras. Tenga en cuenta la ausencia de un downguión. (Mi VPN ya estaba usando un script de down personalizado, 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, la printenv, es importante. Colóquelo donde desee, se usará en el servicio SystemD más adelante. Lo coloco en el mismo directorio que mi configuración vpn.

Reemplace 24328 con cualquier puerto en el que su demonio de transmisión deba escuchar. Uso iptables (usando Debian), por lo que probablemente pueda reemplazar esas líneas con las líneas ufw de la configuración de @ seanlano.

Servicio SystemD VPN

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

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

Si se inicia / ejecuta, estás bien.

SystemD transmission-daemon.service

Este script requiere el servicio vpn, por lo que si el vpn se cae, el demonio de transmisión también se cae. Esto es útil si se reinicia el vpn, y obtiene una nueva dirección IP, porque la transmisión deberá reiniciarse y volver a enlazarse, lo que se debe manejar automáticamente. Tenga en cuenta que utilizamos las variables de entorno que imprimimos en el route-upscript 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

Permitirle

systemctl enable transmission-daemon.service

Y empezarlo

systemctl start transmission-daemon.service

Cuando reinicie, todo debería comenzar automáticamente (¡en orden!). Tenga Type=simpleen cuenta que el uso en el servicio vpn causa algunos problemas en el momento de ordenar el script, por lo tanto, recomiendo usarlo forking.

Puede especificar una dirección IP real para rpc-bind-addresssi 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 desea ejecutar la transmisión con nice, simplemente cambie la ExecStartlínea y agregue /usr/bin/nice -n15al principio.

Manejo de cambios de dirección

Una cosa que he notado con el tiempo es que si la conexión vpn por alguna razón 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.serviceno es suficiente. Necesita detenerse por completo y luego comenzar de nuevo.

No tengo idea de por qué, pero por esa razón he agregado las siguientes líneas a mi crontab raíz ( 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
fuente
Solo por interés, ¿esto también se ejecuta en un BeagleBone? Si es así, ¿ve problemas de rendimiento con la transmisión? Además, excelente redacción. :)
seanlano
Ah no Se está ejecutando en mi máquina de escritorio normal y no he notado problemas allí.
Jonas Kalderstam
Lo suficientemente justo. Funciona bien para mí en una máquina Intel, esperaba poder hacer una caja de torrents barata con un procesador ARM, pero aparentemente no es así.
seanlano
Echa un vistazo a rtorrent. Es muy
eficaz
Gracias lo haré. Otras cosas funcionan bien en el cuadro ARM, por lo que tal vez rtorrent funcionará correctamente.
seanlano
3

Noté que mencionó que la transmisión no pasa por la VPN para UPnP / NAT-PMP. También me di cuenta de esto y creé un parche para Transmission para que respete 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. Sin embargo, UPnP es el principal que se usa en estos días, por lo que probablemente sea lo suficientemente bueno. Logré esto como un error en el sitio trac.transmissionbt y proporcioné el parche. Esperemos que se incorpore en un lanzamiento futuro. https://trac.transmissionbt.com/ticket/5990

Otra opción en este momento si no desea volver a compilar es ejecutar manualmente upnpc desde el paquete miniupnpc. P.ej

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 IP VPN y 51515 es su puerto TCP / UDP solicitado.

No estoy seguro de 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.

Salud

falk0069
fuente
Pasé años tratando de encontrar una solución como esta, ¡ojalá lo hubiera encontrado miniupnpc! Y con suerte el parche se fusionará y este problema se solucionará para siempre. Mientras tanto, definitivamente intentaré usar tu útil punta.
seanlano