Repository 32bit  Forum
Repository 64bit  Wiki

VPN (OpenVPN 2.0) - Ethernet Bridging HOWTO.

Da Slacky.eu.
Versione delle 14:00, 8 set 2006, autore: Twister (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Indice

Premessa

Software utilizzato: OpenVpn 2.0. OpenVpn si basa su SSL e non su IpSec. Questo howto è basato su Linux, in particolare Slackware 10.1 con kernel 2.4.x e kernel 2.6.x. Con poche modifiche, rintracciabili sul sito, è possibile anche lavorare su Windows E Mac OS:

http://openvpn.net/howto.html
http://openvpn.net/bridge.html

Questo howto si basa sulla documentazione ufficiale.... in ogni modo, può essere utile perchè raggruppa e organizza le informazioni necessarie per settare questa configurazione

I Client utilizzati sono stati Windows XP, Linux e Mac Os (panther).

Per tutti e 3 gli OS esistono delle GUI (client) http://openvpn.net/gui.html

Scopi di questa configurazione

Stare in qualsiasi parte del mondo e poter essere in lan, in tutta sicurezza, con altre persone... con il vostro ufficio, con chi volete voi.... giocare in rete.... Se si vuole realizzare una Lan virtuale,ma a tutti gli effetti è come se ci si trovasse in locale, questa potrebbe essere una soluzione corretta ed efficiente.

Ho scelto una configurazione in Ethernet Bridging per allargare il dominio di Broadcast. Questo, se il numero di client non è eccessivo, è una comodità. In questo modo non ho dovuto configurare Samba come Server Wins e tutti i client windows hanno potuto vedersi tranquillamente creando una rete microsoft.

Comunque, fino a che il numero di client è contenuto, si può accorpare tutti sotto la stessa subnet.

La topologia logica , qui di segiuto, è spiegata più avanti:

[INTERNET]
|
[eth0] Ip Pubblico
[Server Linux - Firewall - Router - Server Dhcp][eth1] ---- Lan Fisica 192.168.1.0/24 con pool 50 -150
[br0] 192.168.1.1
[tap0]
|
|
Lan Virtuale (In Vpn) 192.168.1.0/24 con pool 200 - 250

Installazione OpenVpn

Per generalità, vedremo la procedura di installazione da sorgenti, anche se comunque sul sito sono presenti pacchetti precompilati. Il software necessario è scaricabile da qui: http://openvpn.net/download.html

Scaricate prima le librerie lzo decomprimetele tar -xvf lzo-1.08.tar.gz e installatele ./configure && make && make install && make clean Scaricate OpenVPN 2.0 decomprimete tar -xvf openvpn-2.0.tar.gz e installate ./configure && make && make install && make clean Se non le avete ancora installate , vi servono anche le librerie openssl.

Installazione Bridge-utils

Questi tools servono per poter attuare il bridging delle interfacce..... in un certo senso fanno lavorare le interfacce di rete (desiderate) come quelle di uno switch (a livello 2) piuttosto che come quelle di un router (livello 3)

Scaricate da qui decomprimete tar -xvf bridge-utils-1.0.6 e installate ./configure && make && make install && make clean

Congfigurazione server

Prima di parlare della configurazione del server, diamo un'occhiata alla topologia della rete. Ho una macchina, con su montata Slackware 10.1, che mi fa da Firewall,Router,Server Dhcp ecc... La mia personale topologia è la seguente:

[INTERNET]
|
[eth0] Ip Pubblico
[Server Linux - Firewall-Router-Server Dhcp][eth1] --- Lan Fisica 192.168.1.0/24 con pool 50 -150
[br0] 192.168.1.1
[tap0]
|
|
Lan Virtuale (In Vpn) 192.168.1.0/24 con pool 200 - 250

tap0 è un interfaccia virtuale.

eth1 e tap0 vengono usate come interfacce di uno switch. br0 è un'altra interfaccia virtuale.... essa diventa il (quasi) default gateway (passatemi il termine usato per comprenderci) per la lan sia Fisica che Virtuale. Dato che eth1 e tap0 sono in bridging, il broadcast passa.

Ovviamente questa è una topologia logica approssimata, ma rende bene l'idea.

Script per il Bridging

Per ottenere le interfacce br0, tap0 e mettere in Bridging eth1 con tap0 si usa il seguente script..... che io ho chiamato bridge_start.sh

#!/bin/bash

#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils
#################################

# Define Bridge Interface
br="br0"

# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"

# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="eth1"
eth_ip="192.168.1.1"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.1.255"

for t in $tap; do
    openvpn --mktun --dev $t
done

brctl addbr $br
brctl addif $br $eth

for t in $tap; do
    brctl addif $br $t
done

per fermare il bridging si usa quest'altro sript bridge_stop.sh

#!/bin/bash

####################################
# Tear Down Ethernet bridge on Linux
####################################

# Define Bridge Interface
br="br0"

# Define list of TAP interfaces to be bridged together
tap="tap0"

ifconfig $br down

brctl delbr $br

for t in $tap; do
    openvpn --rmtun --dev $t
done

Generazione certificati e chiavi

OpenVpn usa una crittografia a chiave pubblica. Nella mia configurazione ho usato una crittografia asimmetrica a 1024 bit e una crittografia simmetrica a 128 bit con algoritmo di ciphering blowfish. La cosa interessante è che openvpn usa una chiave di sessione con scadenza: ogni ora, per ogni client, viene cambiata la chiave. Questo assicura una sicurezza paragonabile all'attuale standard bancario. Se qualcuno avesse invece la paranoia, potrebbe usare una chiave asimmetrica a 2048 bit e chiavi di sessione a 256 bit. In tutti i casi, ad oggi col pc + potente al mondo, si stima ci voglia un tempo medio di decrittazione della chiave di sessione (a 128 bit), quantificabile nell'ordine delle decine di mesi.... decidete voi se vi basta, considerando il fatto che ogni ora cambia!!!! Per una trattazione completa dell'argomento crittografia, rimando alla ricca documentazione in rete.

Vediamo come generare tutto il necessario.

Io ho installato OpenVpn in /usr/local/openvpn-2.0/. Entrate nella directory /usr/local/openvpn-2.0/easy-rsa Poi nell'ordine :

  1. editate con un editor di testo il file vars con i parametri giusti (intuitivi non appena vedrete il file)(salvatene una copia)
  2. ./vars
  3. ./clean-all
  4. ./build-ca (questo è il certificato generale)
  5. ./build-key-server server (certificato server -- originerà un file server.crt)
  6. ./build-dh (parametri di Diffie Hellman per lo scambio esponenziale di chiavi)
  7. openvpn --genkey --secret ta.key

Per quanto riguarda il server, avete generato tutto il necessario. Secondo le norme di sicurezza, la macchina che genera i certificati e le chiavi, dovrebbe essere staccata dalla rete. Si può eseguire questa stessa procedura su windows, usando il prompt di dos... le differenze sono minime... es: per chiamare vars, basterà scrivere solo vars e così via. A questo punto create una directory (es: server_files) dove volete voi e metteteci dentro i seguenti file: ca.crt, server.crt, server.key, dh1024.pem, bridge_start.sh, bridge_stop.sh, ta.key Considerate che gli unici file che devono rimanere assolutamente segreti sono i file .key, quelli delle chiavi private. il file ca.key è consigliabile tenerlo su una macchina scollegata dalla rete che farà da Certification Authority.... Generate le chiavi su una macchina e poi mettetele sul server e sui client.

Configurazione Server

Prima di tutto, è importante integrare la vostra configurazione del firewall con le seguenti regole . OpenVPN usa la porta (sia udp che tcp) 1194 (IANA Certified)

iptables -A INPUT -p udp --dport 1194 -i eth0 -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT 
iptables -A FORWARD -i tap+ -j ACCEPT 

Nella directory, dove sarà posizionato il file di configurazione, create una directory di nome jail (o chiamatela come volete voi). Servirà per chrootare il servizio Create a questo punto il file di configurazione del server server.ovpn

# Interfaccia virtuale usata
dev tap0
# Ip pubblico xxx.xxx.xxx.xxx
local xxx.xxx.xxx.xxx
# Porta del servizio
port 1194
# Protocollo usato
proto udp
# Certificato generale
ca ca.crt
# Certificato Server
cert server.crt
# Chiave privata server
key server.key
# Parametri Diffie Hellman
dh dh1024.pem
# Autenticazione Tls
tls-auth ta.key 0
# Direttiva per abilitare un meccanismo di assegnazione degli IP simil dhcp.... senza leases
# gli ultimi due gruppi di numeri rappresentano il pool di indirizzi che verranno assegnati
server-bridge 192.168.1.1 255.255.255.0 192.168.1.200 192.168.1.250
# Direttive per forzare, al client, una rotta per un' altra subnet .... in questo caso sono commentate
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
# Direttiva per impostare un server wins
;push "dhcp-option WINS 192.168.1.1"
# Permettere ai client di vedersi tra loro
client-to-client
# Keep Alive
keepalive 10 120
# Metodo di compressione
comp-lzo
# Numero Massimo Client
max-clients 50
# Dopo una fase iniziale diminuiamo i privilegi di openvpn
user nobody
group nobody
# Chroot del servizio
chroot jail
# Evita l'accesso a risorse, in un riavvio, non più accessibili a causa della diminuzione dei privilegi
persist-key
persist-tun
# Log
status openvpn-status.log
# Livello di dettaglio del log
verb 3

Nella directory (quella precedentemente creata: es server_files) che contiene tutti i file necessari , create un file di nome start_all.sh, così fatto:

#!/bin/bash
sh bridge_start.sh
openvpn --config server.ovpn

Configurazione Client

La configurazione dei client è molto simile per tutti e 3 gli OS..... comunque i passi da seguire sono i seguenti. Sulla macchina che genera i certificati e le chiavi procedere nella seguente maniera:

  1. Editate il file vars come in precedenza.... vi consiglio di salvarne una copia
  2. ./vars
  3. ./clean-all
    i passi da 1) a 3) non sono necessari se generate le chiavi dei client subito dopo aver generato le chiavi per il server.
  4. ./build-key linClient
  5. ./build-key winClient
  6. ./build-key macClient

Per ogni client raggruppate i file necessari: ca.crt, linClient.crt, linClient.key, ta.key (questo era l'esempio con linClient per gli altri client fate una cosa analoga) create poi il file di configurazione linClient.ovpn (e analoghi)

#Modalità Client
client
# Interfaccia
dev tap
# Direttiva per windows, che però per me non è stata necessaria
;dev-node MyTap
# Protocollo
proto udp
# Ip pubblico del server xxx.xxx.xxx.xxx sulla porta 1194
remote xxx.xxx.xxx.xxx 1194
# Per la maggior parte dei client va bene così
nobind
# DownGrade dei privilegi..... windows semplicemente ignorerà questa direttiva
user nobody
group nobody
# Opzioni di autenticazione
ns-cert-type server
tls-auth ta.key 1
# File dei certificati e chiavi
ca ca.crt
cert linClient.crt
key linClient.key
# Compressione
comp-lzo
# Dettaglio Log
verb 3client

Configurazione Client Linux

Installare OpenVpn. Esiste anche una GUI, ma io ho preferito non usarla..... (le gui sono scaricabili da qui) Copiate i file necessari in una directory che creerete a vostro piacimento: linClient_file... crate uno script di avvio start_vpn.sh

#!/bin/bash
openvpn --config linClient.ovpn

Configurazione Client Windows

Scaricate e installate la gui OpenVpn-Gui lasciando le impostazioni di default e continuando l'installazione nonostante il warning di windows ("il software non ha passato la certificazione Microsoft"). Copiate i file necessari nella directory OpenVpn/config/ (cancellando eventuali precedenti file sample ovpn). Vi apparirà un'iconcina in basso sulla destra... basta cliccare e parte tutto

Configurazione Mac Os

Scaricate ed installate la gui... mettete i file analogamente ai client precedenti

Avviare il servizio

Avviate il server precedentemente configurato.... aspettate che i client si connettano e Buon Divertimento.


Ovviamente questa è una tra le possibili configurazioni, questa l'ho fatta a mio gusto.

Se notate errori nella guida vi prego di segnalarmeli in pubblico o in privato. Ovviamente garanzia: NO WARRANTY.... non mi riterrò responsabile per qualsiasi accadimento collegato a questo howto. Usate queste informazioni a vostro rischio e pericolo.

Ringraziamenti

Ringrazio sentitamente, tutti gli sviluppatori di OpenVpn e chiunque ha supportato, supporta e supporterà il progetto. Per ora questo howto è il mio piccolo contributo. Grazie di nuovo e complimenti per lo splendido prodotto.


Autore: MDS <doc.spock@gmail.com>

Copyright: "Il presente documento è rilasciato sotto licenza GPL e può essere tranquillamente distribuito mediante qualsiasi mezzo e modificato previa citazione dell'autore."

Strumenti personali
Namespace

Varianti