View previous topic :: View next topic |
Author |
Message |
comio Advocate
Joined: 03 Jul 2003 Posts: 2191 Location: Taranto
|
Posted: Mon May 16, 2016 7:32 am Post subject: [TIP] Transmission su OpenVPN usando Systemd |
|
|
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 |
|
|
oscarandrea Apprentice
Joined: 27 Nov 2015 Posts: 182 Location: Italy/Cosenza
|
Posted: Sun Sep 11, 2016 10:07 am Post subject: Re: [TIP] Transmission su OpenVPN usando Systemd |
|
|
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 |
|
|
|
|
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
|
|