Raspberry Pi 2 – OpenVPN server – Bridge

Folosind Raspberry Pi 2 putem realiza un server de VPN care să funcționeze în modul bridge, obținând acces la rețeaua internă, ca și cum am fi conectați direct într-un switch din aceasta.
Pentru exemplificare luăm situația de mai jos, un pic mai deosebita. Așadar, avem 5 stații de lucru în rețeaua internă, conectate într-un switch fără management (deci nu poate fi vorba despre VLAN-uri), iar acesta este conectat într-un router SOHO.
Din cele 5 stații de lucru, 3 au adrese IP din clasa 192.168.1.0/24 și gateway implicit 192.168.1.1, iar pe interfața LAN a routerului avem setată adresa 192.168.1.1, astfel încât cele 3 stații vor avea acces la internet. Partea deosebită este că celelalte două stații de lucru au adresele IP 10.20.30.2 și 10.20.30.3, conectate în același switch și care nu au acces internet, dar comunică între ele.

raspberry pi - openvpn bridge

Folosind un Raspberry PI vom realiza un server VPN care să aloce clienților de la distanță adresa IP din clasa 10.20.30.0/24 și care va funcționa în modul bridge, astfel încât să poate fi accesate resursele disponibile pe cele două stații care nu au acces la internet.

Necesar:

Vom începe prin a descarca de pe site-ul http://www.raspberrypi.org imaginea pentru RASPIBIAN pe care o vom scrie pe cardul microSD. Eu am folosit Raspbian Debian Wheezy Kernel version: 3.18. Pentu a scrie imaginea pe card am folosit Win32DiskImager. Vă prindeți singuri cum se face, e floare la ureche.

Introducem apoi cardul microSD în Raspberry PI, conectăm o tastatură pe USB și prin HDMI un monitor/TV și îl alimentăm.

Important: autentificarea inițială se va face cu utilizatorul pi și parola raspberry.

Bootarea se va face de pe cardul microSD și vom ajunge în meniul de configurare (apropo, acest meniu poate fi accesat ulterior daca rulăm comanda raspi-config). Alegem prima opțiune „Expand filesystem” pentru a putea folosi tot spațiul de pe card. Trebuie să rețineți că nu vom fi întrebați dacă suntem sigur că dorim acest lucru ci operația va fi executată imediat. Spațiul însă va fi disponibil după repornirea sistemului.
Tot din meniul acesta vom modifica parola. Urmează să restartăm sistemul (folosind comanda reboot) și putem să continuăm cu instalarea și configurarea serverului VPN.
Pentru a îl configura repede, l-am conectat în spatele unui router care oferă adrese IP prin DHCP, astfel încât am putut avea acces la internet foarte ușor. Apoi rulăm:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install openvpn bridge-utils

Vom configura interfața bridge br0 care va avea două adrese IP: una din clasa 192.168.1.0/24 și una din clasa 10.20.30.0/24. Am ales să o configurez cu adresele 192.168.1.5 și 10.20.30.222. Default gateway îl setam 192.168.1.1 (adresa routerului) pentru a avea acces la internet. În fișierul /etc/network/interfaces vom scrie următoarele:

auto br0
iface br0 inet static
address 192.168.1.5
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp on
bridge_prio 1000
gateway 192.168.1.1
auto br0:1
iface br0:1 inet static
address 10.20.30.222
netmask 255.255.255.0
network 10.20.30.0
broadcast 10.20.30.255

Este important ca în acest fișier să nu mai avem alte directive referitoare la interfața eth0. Pentru că în momentul configurării eu foloseam deja interfața eth0 (configurata DHCP), cel mai sigur lucru este un restart al sistemului după inserarea conținului fișierului.

Ar cam fi cazul să începem configurarea propriu-zisă a serviciului OpenVPN, dar înainte de aceasta va trebui să ne folosim de scripturi care vin la pachet cu acesta, însă doar după ce le copiem într-un alt director, convenabil, ca de exemplu /etc/openvpn/easy-rsa. Pentru a face asta, rulăm comenzile:

sudo mkdir /etc/openvpn/easy-rsa
sudo rsync -avP /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

Edităm apoi fișierul /etc/openvpn/easy-rsa/vars în care vom introduce valorile dorite de noi în variabilele corespunzătoare. Vom crea fișierele cu certificate necesare folosind comenzile de mai jos. Recomand utilizarea shell-ului bash:

cd /etc/openvpn/easy-rsa
sudo source ./vars
sudo sh ./clean-all
sudo sh ./build-dh
sudo sh ./pkitool --initca
sudo sh ./pkitool --server server
cd keys
sudo openvpn --genkey --secret ta.key
sudo cp server.crt server.key ca.crt dh1024.pem ta.key /etc/openvpn/

Avem nevoie de două fișiere care să fie executate la conectarea și deconectarea clienților pentru a adăuga/șterge interfețele noi create la interfața bridge. Vom crea fișierele /etc/openvpn/up.sh și /etc/openvpn/down.sh cu conținutul de mai jos:

  • /etc/openvpn/up.sh conține:#!/bin/sh
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    BR=$1
    DEV=$2
    MTU=$3
    ip link set "$DEV" up promisc on mtu "$MTU"
    if ! brctl show $BR | egrep -q "\W+$DEV$"; then
    brctl addif $BR $DEV
    fi
  • /etc/openvpn/down.sh conține:#!/bin/sh
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    BR=$1
    DEV=$2
    brctl delif $BR $DEV
    ip link set „$DEV” down

Vom face aceste scripturi executabile:

sudo chmod a+x /etc/openvpn/down.sh
sudo chmod a+x /etc/openvpn/up.sh

Vom crea cel mai important fișier, cel de configurare a serverului OpenVPN. Pe acesta îl vom denumi server.conf, va fi în directorul /etc/openvpn și va avea următorul conținut:

port 4443
proto udp
server-bridge 10.20.30.222 255.255.255.0 10.20.30.223 10.20.30.230
dev tap0
ca "/etc/openvpn/easy-rsa/keys/ca.crt"
cert "/etc/openvpn/easy-rsa/keys/server.crt"
tun-mtu 1454
key "/etc/openvpn/easy-rsa/keys/server.key"
dh "/etc/openvpn/easy-rsa/keys/dh1024.pem"
up "/etc/openvpn/up.sh br0"
down "/etc/openvpn/down.sh br0"
push "route 10.20.30.0 255.255.255.0"
keepalive 10 600
comp-lzo
persist-key
verb 3
mute 20
status openvpn-status.log
client-config-dir ccd
client-to-client
script-security 2

De observat că portul pe care asculta nu este cel implicit ci am folosit portul 4443. Clienții vor obține adrese IP din intervalul de la 10.20.30.223 până la 10.20.30.230.

Mai avem câteva lucruri de făcut:

  • pornim serviciul OpenVPN cu comanda sudo service openvpn start
  • realizăm pe router setarile de port-forwarding pentru ca traficul care vine din internet către portul 4443, protocol tcp și udp să ajungă la Raspberry PI (adresa 192.168.1.5)
  • configurăm clientul și facem testul de funcționare.

Ca și client vom folosi un calculator pe care ruleaza Windows 7/8/8.1 și pe care avem instalat OpenVPN și driverul TAP.  De reținut că am redenumit interfața TAP din Windows și am numit-o tap0, lucru care se resfrânge și asupra fișierului de configurare. Deasemenea, trebuie să copiem de pe Raspberry Pi fișierele ca.crt, client1.crt și client1.key din directorul easy-rsa pe PC-ul cu Windows de pe care dorim să ne conectăm și să le amplasăm în directorul C:\Program Files\OpenVPN\config. Fișierul de configurare pentru client este mai jos (da, sunt doua de backslash în calea fișierelor, nu este nici o greșeală):

client
dev tap
dev-node tap0
proto udp
remote <ip public raspberry ip> 4443
nobind
persist-key
persist-tun
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\client1.crt"
key "C:\\Program Files\\OpenVPN\\config\\client1.key"
comp-lzo
verb 3

Succes!

Articole asemanatoare:

Bogdan Turcanu

Bogdan Turcanu

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.