Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[TIP] Transmission su OpenVPN usando Systemd
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
comio
Advocate
Advocate


Joined: 03 Jul 2003
Posts: 2191
Location: Taranto

PostPosted: Mon May 16, 2016 7:32 am    Post subject: [TIP] Transmission su OpenVPN usando Systemd Reply with quote

Ciao a tutti,

volevo presentarvi in questo piccolo TIP/HOWTO la mia soluzione per una mia esigenza.

Premessa
Da un po' di tempo mi avvalgo di sistemi anticensura, come VPN, per evitare ogni problema con il mio provider di connettività che applica (suppongo stia applicando) traffic-shaping su determinati tipi di traffico.

All'avvio della VPN si crea quindi la necessità di riavviare il servizio Tansmission-daemon in modo tale che utilizzi l'indirizzo dell'interfaccia della VPN per il binding del socket.

Inoltre, oramai sto utilizzando Systemd per la configurazione e la gestione dei servizi, anche per rimanere un po' agnostico rispetto alla distribuzione.

Traccia soluzione
La mia soluzione al problema è suddivisa nei seguenti passi:

  • Istruire OpenVPN ad aggiornare un file con l'ambiente e l'ip dell'interfaccia tramite uno script di route-up;
  • Generare un evento alla modifica del file d'ambiente con l'ip tramite un file unit di tipo .path;
  • Riavviare il servizio transmission al verificarsi dell'evento di modifica.


Il primo passo è aggiungere uno script route-up alla configurazione OpenVPN per generare un file di ambiente con l'ip dell'interfaccia. Supponiamo che la configurazione della VPN sia contenuta nel file /etc/openvpn/client/myvpn.conf e che i file di configurazione siano nella directory /etc/openvpn/client/myvpn/.
Il file di "route-up" (/etc/openvpn/client/myvpn/up.sh) sarà il seguente:

Code:

#!/bin/sh

# Generate the VPN environment
mkdir -p /var/run/openvpn
env > /var/run/openvpn/client_myvpn.env

exit 0


Il file di configurazione della nostra VPN (/etc/openvpn/client/myvpn.conf) dovrà contenere la seguenti righe:

Code:

...
script-security 2
route-up ./myvpn/up.sh
...


La clausola "script-security 2" permette di eseguire gli script al verificarsi di determinate azioni, altrimenti OpenVPN ne impedisce l'esecuzione per motivi di sicurezza, mentre "route-up" punta allo script da eseguire quando le route della vpn vengono aggiornate.

Per verificare il funzionamento, dovremo riavviare la VPN:
[/code]
# systemctl restart openvpn-client@myvpn.service
[/code]

Se tutto è andato per il verso giusto avremo un file "client_myvpn.env" nella directory /var/run/openvpn.

Il passo successivo è fare sì che Systemd generi un evento all'alterazione del file .env, stimolando il processo di riavvio. Per raggingere questo obiettivo aggiungiamo un primo file openvpn_myvpn_env.path all'interno della directory /etc/systemd/system:
Code:

[Path]
Unit=openvpn_myvpn_env.service
PathChanged=/var/run/openvpn/client_myvpn.env

Tramite la clausola PathChanged verranno intercettate (tramite inotify) le alterazioni del file client_myvpn.env. Al verificarsi dell'evento viene dato start al servizio openvpn_myvpn_env.service. Il servizio openvpn_myvpn_env.service, presente nella directory /etc/systemd/system, contiene le seguenti direttive:
Code:

[Unit]
Description=OpenVPN Env change service
#Wants=sys-devices-virtual-net-TUN_DELLA_VPN.device

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart transmission-daemon.service
RemainAfterExit=no

[Install]
WantedBy=multi-user.target


Ultimo passo è modificare il file di servizio del tansmission-daemon.service in modo che venga usato il file client_myvpn.env. Si parte dal file originario:
Code:

cp /usr/lib{64,}/systemd/system/transmission-daemon.service /etc/systemd/system


Si modifica in modo da caricare l'ambiente ed impostare l'indirizzo di bind dell'interfaccia di transmission-daemon:
Code:


[Unit]
Description=Transmission BitTorrent Daemon
Wants=sys-devices-virtual-net-airvpn.device openvpn_airvpn_env.path
Requires=openvpn_airvpn_env.path
After=network.target openvpn_airvpn_env.path

[Service]
User=transmission
Type=notify
EnvironmentFile=/var/run/openvpn/client_myvpn.env
ExecStart=/usr/bin/transmission-daemon -f --log-error --bind-address-ipv4 $ifconfig_local -g /var/lib/transmission/config
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target


Completate le modifiche ai servizi, si dovrà istruire systemd con le seguenti operazioni:
Code:

systemctl daemon-reload
systemctl enable openvpn-client@myvpn.service
systemctl disable transmission-daemon.service
systemctl stop transmission-daemon.service
systemctl restart openvpn-client@myvpn.service


Se tutto è andato per il meglio avremo transmission-daemon bindato sull'interfaccia della vpn:
Code:

ps aux|grep transmission

transmi+  4363  1.6  0.1 295452 29404 ?        Ssl  mag15  10:58 /usr/bin/transmission-daemon -f --log-error --bind-address-ipv4 $INDIRIZZO_DELLA_VPN -g /var/lib/transission/config


Spero che il TIP risulti utile a qualcuno.

ciao

luigi
_________________
RTFM!!!!

e

http://www.comio.it
:)
Back to top
View user's profile Send private message
oscarandrea
Apprentice
Apprentice


Joined: 27 Nov 2015
Posts: 176
Location: Italy/Cosenza

PostPosted: Sun Sep 11, 2016 10:07 am    Post subject: Re: [TIP] Transmission su OpenVPN usando Systemd Reply with quote

comio wrote:
Ciao a tutti,

volevo presentarvi in questo piccolo TIP/HOWTO la mia soluzione per una mia esigenza.

Premessa
Da un po' di tempo mi avvalgo di sistemi anticensura, come VPN, per evitare ogni problema con il mio provider di connettività che applica (suppongo stia applicando) traffic-shaping su determinati tipi di traffico.

All'avvio della VPN si crea quindi la necessità di riavviare il servizio Tansmission-daemon in modo tale che utilizzi l'indirizzo dell'interfaccia della VPN per il binding del socket.

Inoltre, oramai sto utilizzando Systemd per la configurazione e la gestione dei servizi, anche per rimanere un po' agnostico rispetto alla distribuzione.

Traccia soluzione
La mia soluzione al problema è suddivisa nei seguenti passi:

  • Istruire OpenVPN ad aggiornare un file con l'ambiente e l'ip dell'interfaccia tramite uno script di route-up;
  • Generare un evento alla modifica del file d'ambiente con l'ip tramite un file unit di tipo .path;
  • Riavviare il servizio transmission al verificarsi dell'evento di modifica.


Il primo passo è aggiungere uno script route-up alla configurazione OpenVPN per generare un file di ambiente con l'ip dell'interfaccia. Supponiamo che la configurazione della VPN sia contenuta nel file /etc/openvpn/client/myvpn.conf e che i file di configurazione siano nella directory /etc/openvpn/client/myvpn/.
Il file di "route-up" (/etc/openvpn/client/myvpn/up.sh) sarà il seguente:

Code:

#!/bin/sh

# Generate the VPN environment
mkdir -p /var/run/openvpn
env > /var/run/openvpn/client_myvpn.env

exit 0


Il file di configurazione della nostra VPN (/etc/openvpn/client/myvpn.conf) dovrà contenere la seguenti righe:

Code:

...
script-security 2
route-up ./myvpn/up.sh
...


La clausola "script-security 2" permette di eseguire gli script al verificarsi di determinate azioni, altrimenti OpenVPN ne impedisce l'esecuzione per motivi di sicurezza, mentre "route-up" punta allo script da eseguire quando le route della vpn vengono aggiornate.

Per verificare il funzionamento, dovremo riavviare la VPN:
[/code]
# systemctl restart openvpn-client@myvpn.service
[/code]

Se tutto è andato per il verso giusto avremo un file "client_myvpn.env" nella directory /var/run/openvpn.

Il passo successivo è fare sì che Systemd generi un evento all'alterazione del file .env, stimolando il processo di riavvio. Per raggingere questo obiettivo aggiungiamo un primo file openvpn_myvpn_env.path all'interno della directory /etc/systemd/system:
Code:

[Path]
Unit=openvpn_myvpn_env.service
PathChanged=/var/run/openvpn/client_myvpn.env

Tramite la clausola PathChanged verranno intercettate (tramite inotify) le alterazioni del file client_myvpn.env. Al verificarsi dell'evento viene dato start al servizio openvpn_myvpn_env.service. Il servizio openvpn_myvpn_env.service, presente nella directory /etc/systemd/system, contiene le seguenti direttive:
Code:

[Unit]
Description=OpenVPN Env change service
#Wants=sys-devices-virtual-net-TUN_DELLA_VPN.device

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart transmission-daemon.service
RemainAfterExit=no

[Install]
WantedBy=multi-user.target


Ultimo passo è modificare il file di servizio del tansmission-daemon.service in modo che venga usato il file client_myvpn.env. Si parte dal file originario:
Code:

cp /usr/lib{64,}/systemd/system/transmission-daemon.service /etc/systemd/system


Si modifica in modo da caricare l'ambiente ed impostare l'indirizzo di bind dell'interfaccia di transmission-daemon:
Code:


[Unit]
Description=Transmission BitTorrent Daemon
Wants=sys-devices-virtual-net-airvpn.device openvpn_airvpn_env.path
Requires=openvpn_airvpn_env.path
After=network.target openvpn_airvpn_env.path

[Service]
User=transmission
Type=notify
EnvironmentFile=/var/run/openvpn/client_myvpn.env
ExecStart=/usr/bin/transmission-daemon -f --log-error --bind-address-ipv4 $ifconfig_local -g /var/lib/transmission/config
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target


Completate le modifiche ai servizi, si dovrà istruire systemd con le seguenti operazioni:
Code:

systemctl daemon-reload
systemctl enable openvpn-client@myvpn.service
systemctl disable transmission-daemon.service
systemctl stop transmission-daemon.service
systemctl restart openvpn-client@myvpn.service


Se tutto è andato per il meglio avremo transmission-daemon bindato sull'interfaccia della vpn:
Code:

ps aux|grep transmission

transmi+  4363  1.6  0.1 295452 29404 ?        Ssl  mag15  10:58 /usr/bin/transmission-daemon -f --log-error --bind-address-ipv4 $INDIRIZZO_DELLA_VPN -g /var/lib/transission/config


Spero che il TIP risulti utile a qualcuno.

ciao

luigi

personalmente a me questo questo tip non serve, però ti ringrazio per la condivisione è bello vedere persone che mantengono viva questa sezione :)
ps: la spiegazione è molto semplice da comprendere, bravo!
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum