SKazas (ICQ 441601224)
Virtualaus LAN sukūrimas naudojant OpenVPN serverį
Turinys
Įž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:
OpenVPN serveris bus paleistas gentoo distribucijoje. Nuo kitų distribucijų skirsis tik keletu niuansų: instaliacijos būdas, konfigūracinių failų vieta, bridge inicijavimo, automatiniu paleidimu. Pats principas konfigūravimo ir serverio paleidimo išlieka visose distribucijose tas pats. Ugniasienės. Šiame straipsnyje nesigilinsiu į ugniasienių nustatymus, užsiminsiu tik tiek, kad kliento pusėje galima visiškai išjungti ugniasienę naujai sukurtam OpenVPN įrenginiui, o serverio pusėje galite rasti informaciją čia: http://openvpn.net/index.php/documentation/miscellaneous/ethernet-bridging/40-miscellaneous/76-ethernet-bridging.html
Aparatinė dalis:
Nesijaudinkit, nieko pirkti nereiks
Kompiuteris, kuriame paleisme serverį, jungiasi prie interneto per routerį, ir turi savo vidinį statinį IP. Besijungiantiems tiesiai prie interneto be routerių/modemų ir kurių IP nustatoma automatiškai (DHCP), šiame straipsnyje neaprašoma, kaip sukonfigūruoti serverį. Kas žinot, nepatingekit parašyti kelias eilutes.
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 BridgingDevice 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.