SKazas (ICQ 441601224)

Virtualaus LAN sukūrimas naudojant OpenVPN serverį

Turinys

  1. Virtualaus LAN sukūrimas naudojant OpenVPN serverį
    1. Įžanga
    2. Dėstymas
      1. „Tilto“ br0 paleidimas
      2. Virtualaus tinklo paleidimas
      3. Klientų konfigūravimas ir prisijungimas

Įžanga

Šis straipsnis (kol kas) pilnai aprašo virtualaus tinklo įrenginio tap0 apjungimą su fizine tinklo plokšte eth0 į bendrą „tiltą“ br0. Apie virtualaus tinklo sukūrimą bus vėliau ;)

Mūsų tikslas: apjungti skirtingų interneto tiekėjų nutolusius kompiuterius į vieną bendrą LAN tinklą. Kodėl bridge režimu?

Atsakymą rasite čia: http://openvpn.net/index.php/documentation/howto.html#vpntype

Tiksliau butų tai, kad šitas visas reikalas man buvo reikalingas dėl žaidimų ;)

Virtualus tinklas bus toks: Linux serveris- windows klientai.

Situacija:

Programinė dalis:

Aparatinė dalis:

Dėstymas

„Tilto“ br0 paleidimas

Tinklo plokštė yra integruota "laidinė" eth0 Kita: Kernelyje turi būti įjungta šios opcija: Linux Kernel Configuration: 802.1d Support

Networking --->

    Networking Options --->

    [*] 802.1d Ethernet Bridging

Device Drivers --->

   Network device support --->

[*]Network device support

<*> Universal TUN/TAP device driver support

Yra oficialios privačių LAN tinklų adresų sritys: http://openvpn.net/index.php/documentation/howto.html#numbering

10.0.0.0

10.255.255.255

(10/8 prefix)

172.16.0.0

172.31.255.255

(172.16/12 prefix)

192.168.0.0

192.168.255.255

(192.168/16 prefix)

Mes jomis nesinaudosime :) Priežastis paprasta: neturi būti vienodų potinklių kaip ir virtualaus. Tiesiog "susipjaus" vidiniai IP su openvpn. Todėl parenkame IP sritį virtualiam tinklui ir tuo pačiu vietiniam tinklui, kuriame veiks serveris, tarkim: 50.50.50.XX

Routerio konfigūravimas. Routeryje yra būtina pridėti šį potinklį. Susiraskite jame nustatymus, kur tai galima padaryti ir pridėkite su tokiais parametrais: IP: 50.50.50.254 netmask 255.255.255.0 (jei reikia nurodyti, broadcast 50.50.50.255). Taip nustatome "routinimo" (ir pačio routerio, „default gateway“) adresą: 50.50.50.254

Kaip minėjau, viską aprašau iš gentoo pozicijos: suinstaliuome bridge-utils ir openvnp:

emerge -DuN bridge-utils openvpn

Inicijuojame bridge susijungimą tinklo plokštės konfigūraciniame faile:

nano /etc/conf.d/net

Ir įrašome šias eilutes, užkomentuodami senąsias (jei kas nesuveiks, galėsite šitas ištrinti, o senąsias atkomentuoti):

depend_br0() { need net.tap0 net.eth0 } tuntap_tap0="tap" config_eth0=("null") config_tap0=("null") bridge_br0="eth0 tap0" config_br0=("50.50.50.2 broadcast 50.50.50.255 netmask 255.255.255.0") routes_br0=("default via 50.50.50.254") echo 1 > /proc/sys/net/ipv4/ip_forward

Taip yra sukuriama nauji įrenginiai, reikalingi "bridge". Ištriname iš užsikrovimo scriptų įprastinę tinklo plokštę eth0 ir pridedame naują įrenginį br0:

rc-update del net.eth0

rc-update add net.br0

Taip pat sukuriame reikalingas įrenginių simbolines nuorodas:

cd /etc/init.d

ln -s net.lo net.br0

ln -s net.lo net.tap0

erkrauname kompiuterį. Vis dar skaitai? Reiškia internetas yra :) Pasižiūrime tinklo nustatymus:

ifconfig

Turėtų būti taip:

br0       Link encap:Ethernet  HWaddr 00:0c:6e:c0:ad:e9

          inet addr:50.50.50.2  Bcast:50.50.50.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:31540 errors:0 dropped:0 overruns:0 frame:0

          TX packets:27085 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:33997449 (32.4 MiB)  TX bytes:2886608 (2.7 MiB)

eth0      Link encap:Ethernet  HWaddr 00:0c:6e:c0:ad:e9

          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1

          RX packets:31547 errors:0 dropped:0 overruns:0 frame:0

          TX packets:27074 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:34565665 (32.9 MiB)  TX bytes:3013398 (2.8 MiB)

          Interrupt:22

lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:2089 errors:0 dropped:0 overruns:0 frame:0

          TX packets:2089 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:61029 (59.5 KiB)  TX bytes:61029 (59.5 KiB)

tap0      Link encap:Ethernet  HWaddr a2:12:fc:df:0f:18

          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:191 overruns:0 carrier:0

          collisions:0 txqueuelen:100

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Kaip matote, eth0 ir tap0 neturi IP adresų, dabar eth0 tap0 ir br0 yra apjungti į vieną. Įvedus komandą

route

pažiūrime kokiu adresu vyskta "routinimas". Gauname kažką pan:

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

50.50.50.0      *               255.255.255.0   U     0      0        0 br0

loopback        *               255.0.0.0       U     0      0        0 lo

default         50.50.50.254    0.0.0.0         UG    1000   0        0 br

Paskutinė eilutė sako, kad tinklas veikia per br0 įrenginį.

Esant nesklandumams ir neveikiančiam ryšiui, toliau netęskite! Pirmiausiai būtina sutvarkyti bridge režimu veikiantį ryšį, o tik paskui pereiti prie serverio paleidimo!

Prisijungiame prie jo nauju adresu: 50.50.50.254. Ir būtinai paforwardinkite UDP 1194 portą adresu 50.50.50.2

Virtualaus tinklo paleidimas

Paruošiamieji darbai kaip ir baigti, toliau pereisime prie pačio openvpn serverio konfigūravimo. Sukuriame naują failą:

nano /etc/openvpn/openvpn.conf

su tokiu turiniu:

port 1194

proto udp

dev tap0

ca /etc/openvpn/easy-rsa/keys/ca.crt

cert /etc/openvpn/easy-rsa/keys/server.crt

key /etc/openvpn/easy-rsa/keys/server.key

dh /etc/openvpn/easy-rsa/keys/dh1024.pem

remote-serv-tls client

ifconfig-pool-persist ipp.txt

server-bridge 50.50.50.2 255.255.255.0 50.50.50.200 50.50.50.250

keepalive 10 120

comp-lzo

user nobody

group nobody

persist-key

persist-tun

status /var/log/openvpn-status.log

log /var/log/openvpn.log

verb 3

Šiuo atveju virtualaus tinklo klientams bus priskirti adresai diapazone 50.50.50.200 50.50.50.250

Toliau pagal šitą http://openvpn.net/index.php/documentation/howto.html#pki reikia sugeneruoti sertifikatus klientams ir serveriui. Tam nukopijuojame easy-rsa katalogo turinį į /etc/openvpn katalogą.

mkdir /etc/openvpn/easy-rsa

cp /usr/share/openvpn/easy-rsa/* /etc/openvpn/easy-rsa

Paredaguojame bylą vars:

cd /etc/openvpn/easy-rsa

nano vars

Apačioje esančias eilutes užpildome panašiai kaip pavyzdyje (naudokite savo): export KEY_COUNTRY="LT" export KEY_PROVINCE="Apskritis" export KEY_CITY="Miestas" export KEY_ORG="Organizacija" export KEY_EMAIL="pašto adresas" Rašome sekančias komandas:

source ./vars

./clean-all

./build-ca

./build-key-server server

./build-key client1

./build-key client1

#Kiek jums reikia klientų virtualiame tinkle, tiek ir sugeneruokite raktų.

Pradžiai užtenka vieno, vėliau bet kada galima pridėti daugiau

./build-key clientx

./build-dh

Generuojant klientų sertifikatus ir raktus, atsakykite į jau kausimus "yes" ir į klausimą "common-name" atsakykite sukurdami kiekvienam klientui unikalų vardą (tinka kad ir tie patys client1, client2 ir t.t.)

Lentelėje pateikta informacija, kokie failai yra būtini serveriui ir klientui. Perduokite kliento failus klientui.

Filename

Needed By

Purpose

Secret

ca.crt

server + all clients

Root CA certificate

NO

ca.key

key signing machine only

Root CA key

YES

dh{n}.pem

server only

Diffie Hellman parameters

NO

server.crt

server only

Server Certificate

NO

server.key

server only

Server Key

YES

client1.crt

client1 only

Client1 Certificate

NO

client1.key

client1 only

Client1 Key

YES

client2.crt

client2 only

Client2 Certificate

NO

client2.key

client2 only

Client2 Key

YES

client3.crt

client3 only

Client3 Certificate

NO

client3.key

client3 only

Client3 Key

YES

Pirmam klientui reikia ca.crt; client1.crt client1.key. Viso trys failai turi būti saugiai perduoti klientui.

Na ką, startuojam openvpn serverį:

openvpn /etc/openvpn/openvpn.conf

Galime peržiūrėti log`us ir įsitikinti, kad viskas tvarkoje:

nano /var/log/openvpn-status.log

Turi būti panašus turinys:

OpenVPN CLIENT LIST

Updated,Mon Jun 15 17:34:52 2009

Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since

ROUTING TABLE

Virtual Address,Common Name,Real Address,Last Ref

GLOBAL STATS

Max bcast/mcast queue length,1

END

Tai reiškia, kad virtualus tinklas sėkmingai startavęs. Šiuo momentu nėra prisijungusių klientų.

Klientų konfigūravimas ir prisijungimas

Klientai turi parsisiųsti openvpn ir instaliuoti. Windows klientai turi susirasti per start meniu openvpn nustatymų direktoriją, ir į ją sukelti iš serverio gautus failus ca.crt; client1.crt client1.key. Taip pat nukopijuoti failą iš openvpn nustatymų pavyzdžių (rasite taip pat per start meniu) client.ovpn

Atidarome failą client.ovpn ir viską ištrynę, surašome tokį tekstą:

client
dev tap0
proto udp
remote $IP_ADRESAS 40  #Pakeiskite $IP_ADRESAS savo išoriniu adresu
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3

Uždarome ir išsaugome failą. Kiekvienam klientui reikia pakeisti sertifikatų pavadinimus (naudoti pavadinimus, kuriuos sugeneravote serveryje): antram- client2, trečiam- client3 ir t.t.

Tada spaudžiame dešinį pelės klavišą, ir pasirenkame Start OpenVPN on this config file

Sėkmingai prisijungus, turi atsirasti tinklo plokštė. Galite patikrinti naudojant komandą ping. Atsidarote per start meniu „run“ laukelį, įrašote „cmd“, tada įvedate komandą ping 50.50.50.2 (arba savo sukurto potinklio IP). Nesant problemų, neturi būti „pamestų paketų“ ir pan.