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" ..


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

Odpovědět

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



 
 

Top články z OpenOffice.cz

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

| proč linux