přejít na obsah přejít na navigaci

Linux E X P R E S, OpenVPN poprvé

OpenVPN poprvé

Způsob jak se dostat dovnitř sítě i když jsem "jinde" ..


reklama

OpenVPN na mě od jisté doby působí jako kouzelné slůvko. Kozelné především v tom, že mi umožní pracovat v síti, na kterou jsou zvyklý i mimo tuto síť. Prakticky to tedy znamená, že můžete sedět doma, nebo cestovat vlakem a přitom díky OpenVPN a prostřednictvím Internetu pracovat se svými soubory umístěnými na souborovém serveru, tisknout na tiskárně umístěné ve vaší kanceláři atd. Tzn. provádět všechny činnosti na které jste zvyklí, pokud se nacházíte v této síti. Prakticky řečeno -  v práci zaklapnu notebook, doma ho otevřu a pokračuju v tom v čem jsem začal...

Samozřejmě tato činnost má i svou nevýhodu a tou je bezesporu nutkání pracovat na úkolech vám svěřených i mimo kancelář - ono to je stejné jako s firemním notebookem, mobilem, autem a dalšími "požitky", které vám v zaměstaní dají k dispozici - vždy to je něco za něco a to něco se od vás vždy očekává. Ale pojďme se podívat jak na to.

Vyšel jsem z bezvadného návodu na abclinuxu.cz, který stačí použít a prostě to musí fungovat, s minimálními úpravami a ve zkratce:

Nastavení serveru

nainstalujte openvpn

aptitude install openvpn

zkopírujte si vzorové skripty

cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn

nastavte práva (v tomto adresáři budete generovat klíče, tak by tam neměl každý "vidět")

chmod 0700 /etc/openvpn/easy-rsa

upravte soubor /etc/openvpn/easy-rsa/2.0/vars (soubor sám je bohatě komentovaný), zejména vás zajímají tyto proměnné

export KEY_SIZE=2048
export KEY_COUNTRY=CZ
export KEY_PROVINCE="Czech Republic"
export KEY_CITY="City"
export KEY_ORG="OpenVPN-company"
export KEY_EMAIL="vpn@domain_com"

načtete vámi nastavené proměnné pro generování klíčů (pozor na začátku druhého řádku je opravdu symbol tečka)

cd /etc/openvpn/easy-rsa/2.0
. ./vars

vymažte vzorové klíče

./clean-all

vytvořte klíč certifikační autority

./build-ca

vytvořte certifikát pro server

./build-key-server server

vytvořte certifikáty klientů

./build-key-pass client1
./build-key-pass client2
....

Tyto certifikáty klientů budou chráněny heslem, pokud nechcete, aby uživatel musel zadávat heslo pro použití certifikátu, pak zadejte

./build-key client1

vytvořte Diffie Hellman parametry. Sice nemám tušení k čemu to je, ale řekněme, že to zvýší zabezpečení - opravdu jsem po tom nepátral. :-) Počítejte s tím, že to bude trvat 5-10 minut..

./build-dh

zkopírujte vytvořené klíče a nastavte na nich příslušná práva

cp /etc/openvpn/easy-rsa/keys/2.0/{ca.crt,server.crt,server.key,dh2048.pem} /etc/openvpn
chmod 600 /etc/openvpn/2.0/{ca.crt,server.crt,server.key,dh2048.pem} /etc/openvpn

Dál vytvořte soubor /etc/openvpn/vpn_server.conf a do něj přidejte následující:

# server
mode server

# tls jako server
tls-server

# port, 1194 = default
port 1194

# protokol, tcp/udp
proto tcp-server

# nastavi zarizeni
dev tap

# pouzita sit a jeji maska
server 10.0.1.0 255.255.255.0

# soucasne prihlaseni vice klientu
# duplicate-cn

# certifikat certifikacni autority
ca /etc/openvpn/ca.crt

# certifikat serveru
cert /etc/openvpn/server.crt

# klic serveru
key /etc/openvpn/server.key

# parametry pro Diffie-Hellman protokol
dh /etc/openvpn/dh2048.pem

# logy serveru
log-append /var/log/openvpn.log

# status serveru
status /var/run/vpn.status 10

# uzivatel pod kterym bezi server
user nobody

# skupina pod kterou bezi server
group nogroup

# udrzuje spojeni nazivu, 10 (ping) a 120 (ping-restart)
keepalive 10 120

# komprese prenasenych dat
comp-lzo

# ukecanost serveru
verb 3

push "route 192.168.1.0 255.255.255.0"

Poslední řádek je nepovinný, ale udává do které sítě bude možno přistupovat prostřednitvím openVPN. Tzn. síť a masku lokální sítě (za vašim serverem). Tato síť se pak nadeleguje klientům, které se připojí k serveru prostřednictvím openvpn a nastaví se jim směrování do této sítě. Aby to všechno fungovalo je třeba ještě zapnout "přehazování" paketů mezi rozhraními, na serveru ještě zadejte:

echo 1 > /proc/sys/net/ipv4/ip_forward

Tím je konfigurace serveru hotové za zmínku ještě stojí možnost delegovat klientům další informace jako je např. místní DNS server a server WINS, ale to ještě nemám moc odzkoušené, do souboru /etc/openvpn/vpn_server.conf je tedy možno přidat i tyto řádky:

push "dhcp-option DNS ip_pocitace_mistni_site"
push "dhcp-option WINS ip_pocitace_mistni_site"

Pak ještě spusťte opevnpn

/etc/init.d/openvpn start

a zkontrolujte log

tail -f /var/log/openvpn.log

příkazem ifconfig zkontrolujte, zda se vám objevilo nové síťové rozhraní označené jako tap0.

Nastavení klienta

na klientský počítač nainstalujte openvpn ;-)

aptitude install openvpn

vytvořte soubor /etc/openvpn/vpn_client.conf a do něj přidejte následující

# server ke kteremu se pripojujeme
remote server.cz

# tls jako klient
tls-client

# port, 1194 = default
port 1194

# protokol, tcp/udp
proto tcp-client

# nastaveni zarizeni
dev tap

# povoluje stazeni konfigurace ze severu
pull

# certifikat certifikacni autority
ca ca.crt

# certifikat klienta
cert client1.crt

# certifikat klienta
key client1.key

# uzivatel pod kterym bezi klient
user nobody

# skupina pod kterou bezi klient
group nogroup

# opakovani radku v logu
mute 10

# logy klienta
log-append /var/log/openvpn.log

# status klienta
status /var/run/vpn.status 10

# komprese prenasenych dat
comp-lzo

# ukecanost klienta
verb 3

je vidět, že tento soubor má téměř stejnou strukturu jako je ta na serveru. Po jeho vytvoření ještě musíte nějakou formou zkopírovat soubory ca.crt, client1.crt a client1.key do adresáře /etc/openvpn klientského počítače. Tyto soubory se nachází na serveru v adresáři /etc/openvpn/easy-rsa/2.0/keys. Pokud to chcete udělat tak jako já a ne tak jak se to má (tzn. dopravit soubory ke klientovi nějakou bezpečnou cestou - např. na disketě), pak si můžete soubory stáhnout přes sshfs, nebo si jejich obsah na serveru zobrazit a na klientovi je nově vytvořit, funkci CTRL+C a CTRL+V známe všichni.. 0:-)

Pak můžete spustit na klientovi openvpn

/etc/init.d/openvpn start

případně sledovat log, pokud je něco špatně. Pokud proběhne vše v pořádku, přibude vám i zde síťové rozhraní tap0 a vy budete moci komunikovat stejně jako byste byli uvnitř sítě.

Můj velký/malý problém

Pokud máte všechny soubory na svých místech, spojení proběhne korektně a v logu se nic zajímavého neobjeví, pak bude jistě vše fungovat. V mém případě to ovšem nefungovalo. Ping s lokální IP adresou počítače, na kterém běžel OpenVPN server sice běžel tak jak má, ale nikam jinam jsem se nemohl dostat... V této situaci (a hlavně pokud to člověk instaluje poprvé) platí zlaté pravidlo - "líná huba, holé neštěstí", takže jsem se zeptal jiných...

I když jsem měl vše dobře nastavené a v logu bylo čisto, problém spočíval jinde, než jsem myslel. V síti, do které jsem se takto připojoval není počítač, na kterém běží openvpn server zároveň branou a to je kámen úrazu. Paket, který projde přes openvpn do sítě za serverem a najde svého příjemce je tímto počítačem zpracován a poslán zpět. Bohužel v tomto schématu sítě tento paket dál neputuje zpět na openvpn server, ale na bránu, která si s tím neví rady a paket zahodí.

V praxi se to pak projeví tak, že nepřijde žádná odpoveď a celé se to tváři dost nefunkčně. A řešení? Tím je nastavit na bráně tzv. "IP next hop", nebo tak něco. Další možnost pak spočívá v přidání další routy na počítači, s kterým chceme komunikovat, to se provede takto:

route add -net 10.0.1.0 netmask 255.255.255.0 gw ip_adresa_open_vpn_serveru

tím se docílí toho, že se paket vrátí na server s openvpn a tím i k vám, kdo s ním komunikujete. Jo, počítače jsou záludná stvoření...

Nahoru

(Jako ve škole)
Průměr: 2,33 | Hodnotilo: 3
 

Top články z OpenOffice.cz

Příspěvky

Vlastimil Ott OpenVPN poprvé
Vlastimil Ott 5. 10. 2008, 22:52:48
Odpovědět  Odkaz 
VPNka je skvělá věc, poznal jsem ji v QCM, kde si bez ní nedovedu práci představit. Používám ji vlastně už několik let. Postřehů mám - z uživatelského hlediska - hodně, například, že ve Slackwaru se před spuštěním démona musel změnit aktuální adresář na místo, kde byl uložen spouštěcí skript (thx lzap). V Ubuntu mi dodnes nefunguje (pěkné) klikátko, zato ruční spuštění funguje ihned. Zjistil jsem, co dělají dvé démony spuštěné na dvou PC pod jednou veřejnou IP adresou (bordel). Naučil jsem se nastavit firewall, aby všechny pakety jdoucí přes VPN spojení zahazoval (taky na nic ;-)). Je toho dost.. fak skvělý soft.
OpenVPN poprvé
Karel 20. 11. 2008, 21:30:49
Odpovědět  Odkaz 
Ahoj,
podařilo se mi podle vašeho návodu konečně připojit přes Open VPN. Všechno funguje výborně, až na jednu divnost. Připojím se pomocí vzdálené plochy k počítači s windows, to je v pořádku, ale při psaní některých písmenek mi to píše jejich alt+písmenko variantu. Jedná se o v (alt+v = @) a e (alt+e = €) a mám podezření i na alf+f5 - vypisuje aktuální čas i s datumem. Zajímavé že :-)
OpenVPN poprvé
Pavel 16. 09. 2009, 09:46:26
Odpovědět  Odkaz 
Ahoj, nastavil jsem si vpn server podle tohodle navodu, klienta taky,do vpn se v pohode pripojim,ale neividim zadne zarizeni v siti. Takze je to ten velky-maly problem :)) muj problem je ale vetsi,protoze kdyz zadam :
route add -net 10.0.1.0 netmask 255.255.255.0 gw ip_adresa_open_vpn_serveru
tak mi to zahlasi chybu, ze je spatne zadana sitova maska.
Nevite nekdo,co s tim? Jinak na serveru bezi OpenSuse 11.1 s Gnome....
Martin Šín Re:OpenVPN poprvé
Martin Šín 16. 09. 2009, 10:28:08
Odpovědět  Odkaz 
Ten příkaz by měl být ok, já ho používám a funguje. Možná bude problém v tom kam to zadáváte. Já tento příkaz zadávám na jiném linuxovém počítači, který je v síti kam se chci připojit a který není "branou" (serverem, ke kterému se připojuji). Jak se to nastavuje ve Windows jsem nepátral. ;-)
Marek Nožka Proxy_ARP
Tlapicka 24. 09. 2009, 21:24:37
Odpovědět  Odkaz 
Velice jednoduché řešení Velkého/Malého problému je v použití proxy_arp. http://wiki.webstep.net/czfree/11

V konfiguraci serveru si ale musím vybrat adresy, které ukrojím z adresního rozsahu vzdálené sítě. Např. vzdálená síť je 192.168.20.0/24. Ukrojím si kousek 192.168.20.240/29 a do konfiguráku serveru zadám:
server 192.168.20.240 255.255.255.248
Pak už jen stačí na tomto stroji, přes který se připojuji a který není branou vzdálené sítě zapnout arp_proxy:
echo 1 > /proc/sys/net/ipv4/conf/ethX/proxy_arp

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Martin Šín

Martin Šín

Martin Šín (*1980) vystudoval pedagogickou fakultu a nyní pracuje jako učitel matematiky a výpočetní techniky na střední škole. Ve volném čase překládá a také hraje hry (ani jedno mu příliš nejde). V práci se snaží prosazovat open-source programy.


  • Distribuce: Debian
  • Hodnocení autora: **

| proč linux