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)
fuente
Respuestas:
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
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.
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.
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.Para aquellos que no están familiarizados con vim, presione
Insert
para escribir o pegar texto, luego presioneEscape
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 pass
le dice a OpenVPN que busque un archivo llamadopass
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 cae, lo que con suerte debería significar menos inicio y detención de Transmission-daemon.route-noexec
le 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 tap
adev 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 usartap1
, 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-up
ydown
ejecutar 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.
Copie y pegue esto, o muévalo a través de SCP o SSHFS.
Obviamente, si no está utilizando una cuenta ibVPN, su certificado será diferente.
Hagamos ahora el archivo de contraseña:
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.
También tenemos que asegurar los permisos en este archivo, o OpenVPN no se iniciará.
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.
En este punto, probablemente sea una buena idea probar si la conexión VPN realmente funciona. Comience la conexión con:
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 Completed
en la terminal. PresioneControl+C
para 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:
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
Y cambie la siguiente línea para leer:
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.
Ahora necesitamos comenzar la transmisión, solo brevemente, para que cree el archivo de configuración que necesitamos:
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+C
para finalizarlo. Ahora podemos editar el archivo de configuración.Ahora tenemos que cambiar a las siguientes líneas de sus valores predeterminados para leer:
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.
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+C
en 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.
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:
Pegue esto en el editor:
Guardar y cerrar vim. (
Escape
, luego escriba:wq
). De nuevo, abra vim:Y pegue esto:
Nuevamente, guarde y cierre vim. (
Escape
, luego escriba:wq
). Finalmente:Pega esto:
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.
Pega esto en vim:
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.
De nuevo, más pegado:
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.
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:
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:
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:
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:
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.
¡Esto es lo último que tenemos que pegar!
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.
fuente
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-up
script. Entonces, las cosas que necesita además de su configuración de trabajo proporcionada son estas líneas:Donde colocas el
transmission-route-up.sh
guión donde quieras. Tenga en cuenta la ausencia de undown
guió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:
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:
Habilite el servicio VPN con:
Y pruébalo con:
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-up
script anteriormente./etc/systemd/system/transmission-daemon.service:
Permitirle
Y empezarlo
Cuando reinicie, todo debería comenzar automáticamente (¡en orden!). Tenga
Type=simple
en cuenta que el uso en el servicio vpn causa algunos problemas en el momento de ordenar el script, por lo tanto, recomiendo usarloforking
.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 desea ejecutar la transmisión con nice, simplemente cambie laExecStart
línea y agregue/usr/bin/nice -n15
al 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.service
no 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
):fuente
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
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
fuente
miniupnpc
! Y con suerte el parche se fusionará y este problema se solucionará para siempre. Mientras tanto, definitivamente intentaré usar tu útil punta.