Tunel OpenVPN

Řekněme, že máme vlastní asterisk s neveřejnou IP adresou na 4smart.cz, který je propojen s Odorikem pomocí návodu. Stejný způsob můžeme použít, i pokud třeba pohodlně a bezpečně chceme ladit webové aplikace.

Nyní potřebujeme, aby se náš telefon doma nebo v kanceláři mohl k tomuto asterisku přihlásit. Jak ale na to? Vždyť má neveřejnou IP adresu!

Fakt, že máte neveřejnou IP adresu, nepřináší žádnou podstatnou nevýhodu, ba naopak přináší zvýšenou bezpečnost. Připojit se na daný asterisk můžete i z více různých míst pomocí vpn tunelu, což si zde ukážeme. Virtuální servery 4smart mají totiž jak podporu vpn tak i vlastního routování.

V našem případě potřebujeme kromě serveru ještě jeden linuxový počítač, který bude ve stejné síti jako připojované telefony. Není nezbytně nutné, aby daný počítač sloužil jako router nebo měl dvě síťové karty. Jedna síťová karta může totiž mít více různých IP adres v různých podsítích. Na jednom fyzickém switchi může být více nezávislých podsítí, které jsou si třeba i vzájemně nedostupné. (díky masce)

Základní pojmy počítačových sítí

Vyjasnění základních pojmů z počítačových sítí včetně dvou youtube filmečků naleznete na naši sesterské wiki služby odorik.cz.

http://www.odorik.cz/w/sit

Trocha teorie

schéma virtuálního spojení openvpn

Pokud nějakému stroji zadáte IP adresu, zadáváte i masku a výchozí bránu. Já nyní objasním, k čemu přesně jsou tyto údaje dobré, protože je potřebujeme chápat, abychom si mohli nastavit náš tunel. Maska, nejčastěji ve tvaru 255.255.255.0 nebo též /24, značí, jaký rozsah má lokální síť. To nejspíš víte. Proč to ale naše síťová karta potřebuje vědět? Přímo může naše síťová karta poslat pakety jen na IP adresy v lokální síti určené maskou. Je-li požadovaná adresa v jiném rozsahu, paket bude poslán na výchozí bránu, která se o doručení postará. Výchozí brána musí být vždy v rozsahu určené maskou, jinak by byla nedostupná! Výchozí brána bývá router, ale obecně to může být jakýkoli počítač na síti, který se postará o další směrování paketu - v našem případě je to obyčejný počítač s Linuxem, třeba notebook, který pakety pošle dál a to tunelem. V dalších textech budu tento počítač nazývat notebook v lokální síti, abych jej tak jednoznačně odlišil od virtuálního serveru.

Pro sestavení našeho tunelu použijeme zvláštní rozsah IP adres z neveřejného rozsahu a to takový, aby nekolidoval s použitým rozsahem v lokální síti. (ale i to by klidně mohl, pokud by jsme zaručili, že nedojde k tomu, že dvě zařízení budou mít stejnou IP adresu) Pro pochopení, jak se počítá maska a jaké IP rozsahy IP adres se tím dají vyjádřit, se podívejte na nějaký kalkulátor podsítí on-line.

10.9.8.1  -- adresa virtuálního tunelového síťového rozhraní tun0 clienta - notebook
10.9.8.2  -- adresa (jako druhá) rozhraní eth0:0 notebooku - výchozí brána (default getway) pro telefony
10.9.8.3-15  -- adresy IP telefonů
10.9.8.17 -- adresa virtuálního tunelového síťového rozhraní tun0 virtuální serveru

Nyní si projdeme, jak vypadá nastavení předtím, než s tunelem začneme. Stávající IP adresy našeho virtuálu na 4smart si vypíšeme příkazem ifconfig.

root@localhost:~# ifconfig
lo        Link encap:Místní smyčka
          inet adr:127.0.0.1 Maska:255.0.0.0
          inet6-adr: ::1/128 Rozsah:Počítač
          AKTIVOVÁNO SMYČKA BĚŽÍ  MTU:16436  Metrika:1
          RX packets:38 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
          kolizí:0 délka odchozí fronty:0
          RX bytes:4061 (3.9 KiB)  TX bytes:4061 (3.9 KiB)

venet0    Link encap:NEZNÁM  HWadr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet adr:127.0.0.1  P-t-P:127.0.0.1  Všesměr:0.0.0.0 Maska:255.255.255.255
          AKTIVOVÁNO VŠESMĚROVÉ_VYSÍLÁNÍ POINTOPOINT BĚŽÍ NEARP  MTU:1500  Metrika:1
          RX packets:94422 errors:0 dropped:0 overruns:0 frame:0
          TX packets:93452 errors:0 dropped:0 overruns:0 carrier:0
          kolizí:0 délka odchozí fronty:0
          RX bytes:20413131 (19.4 MiB)  TX bytes:29436461 (28.0 MiB)

venet0:0  Link encap:NEZNÁM  HWadr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet adr:192.168.0.67  P-t-P:192.168.0.67  Všesměr:0.0.0.0 Maska:255.255.255.255
          AKTIVOVÁNO VŠESMĚROVÉ_VYSÍLÁNÍ POINTOPOINT BĚŽÍ NEARP  MTU:1500  Metrika:1

Vidíme, že naše neveřejná adresa je 192.168.0.67.

Pozn.: venet0, venet0:0 jsou virtuální síťové karty na virtuálním serveru.

IP adresy lze vypsat i modernějším příkazem ip addr (addr je parametr, příkaz je IP, a je v balíčku iproute)

root@localhost:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
3: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/void
    inet 127.0.0.1/32 scope host venet0
    inet 192.168.0.67/32 scope global venet0:0

Dále mám k dispozici notebook v lokální síti. Ve stejné síti i nějaké VoIP telefony nebo adaptéry, s kterými chci experimentovat. Příkaz ifconfig (jako root) na mém notebooku vypíše následující.

eth0      Link encap:Ethernet  HWadr 00:1d:72:05:b2:25
          inet adr:192.168.0.115  Všesměr:255.255.255.255 Maska:255.255.255.0
          AKTIVOVÁNO VŠESMĚROVÉ_VYSÍLÁNÍ BĚŽÍ MULTICAST  MTU:576  Metrika:1
          RX packets:315 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226 errors:0 dropped:0 overruns:0 carrier:0
          kolizí:0 délka odchozí fronty:1000
          RX bytes:37694 (36.8 KiB)  TX bytes:35807 (34.9 KiB)
          Přerušení:16

lo        Link encap:Místní smyčka
          inet adr:127.0.0.1 Maska:255.0.0.0
          inet6-adr: ::1/128 Rozsah:Počítač
          AKTIVOVÁNO SMYČKA BĚŽÍ  MTU:16436  Metrika:1
          RX packets:98 errors:0 dropped:0 overruns:0 frame:0
          TX packets:98 errors:0 dropped:0 overruns:0 carrier:0
          kolizí:0 délka odchozí fronty:0
          RX bytes:5948 (5.8 KiB)  TX bytes:5948 (5.8 KiB)

Instalace openvpn

Nainstalujeme openvpn na notebooku (hostu) i virtuálním serveru:

aptitude install openvpn

Vygenerování klíče

Na serveru si vygenerujeme klíč:

openvpn --genkey --secret /etc/openvpn/static.key

klíč zkopírujeme i na hosta též do /etc/openvpn/static.key

Nastavení na serveru

/etc/openvpn/tun0.conf
 
dev tun0
ifconfig 10.9.8.17 10.9.8.1 #adresa tunelu adresa hosta
route 10.9.8.0 255.255.255.240 #prida routovani pro 1-15 do tunelu
secret /etc/openvpn/static.key
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
comp-lzo

Nastavení na hostu (notebooku), který je ve stejné fyzické síti jako telefony

/etc/openvpn/tun0.conf
remote 89.185.255.40 2800 
#adresa, kam se mám připojit, port je přidělený přesměrovaný port 1194, dostupný na veřejné adrese 89.185.255.40:2800 
# u vás to bude jiný port, Přesměrování je třeba nastavit v admin rozhraní 4smart
dev tun0
ifconfig 10.9.8.1 10.9.8.17 #adresa tunelu adresa serveru
secret /etc/openvpn/static.key 
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
comp-lzo
Síťové kartě eth0 na notebooku přidáme druhou IP adresu, která bude sloužit jako výchozí brána směrem do tunelu

v příkazovém řádku spusťte následující příkaz s parametry

ifconfig eth0:0 10.9.8.2 netmask 255.255.255.240 up

nebo přidejte potřebné do /etc/network/interfaces (debian a ubuntu)

       auto eth0:0
          iface eth0:0 inet static
          address 10.9.8.2
          netmask 255.255.255.240

Výsledek si můžete ověřit příkazem ifconfig eth0:0

eth0:0    Link encap:Ethernet  HWaddr 00:19:66:CE:96:23  
          inet addr:10.9.8.2  Bcast:10.9.8.255  Mask:255.255.255.240
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:43 

IP adresu je nutné přidat, protože náš notebook musí mít na daném síťovém rozhraní alespoň jednu adresu z daného rozsahu, aby byl dostupný v lokální síti. Pro telefony bude sloužit jako default gateway.

Aby notebook mohl sloužit jako gateway je třeba povolit IP forwarding. To provedete odkomentováním příslušné části v souboru /etc/sysctl.conf. Konkrétně řádek net.ipv4.ip_forward=1 Zkontrolovat aktuální nastavení můžete pomocí příkazu cat /proc/sys/net/ipv4/ip_forward a provést nastavení bez restartu pomocí echo 1 > /proc/sys/net/ipv4/ip_forward

Spustíme vpn na serveru i na hostu

openvpn --config /etc/openvpn/tun0.conf

vytvoří virtuální síťovku tun0, což si můžeme ověřit příkazem ifconfig tun0

na serveru

tun0      Link encap:NEZNÁM  HWadr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet adr:10.9.8.17  P-t-P:10.9.8.1 Maska:255.255.255.255
          AKTIVOVÁNO POINTOPOINT BĚŽÍ NEARP MULTICAST  MTU:1500  Metrika:1
          RX packets:164 errors:0 dropped:0 overruns:0 frame:0
          TX packets:165 errors:0 dropped:0 overruns:0 carrier:0
          kolizí:0 délka odchozí fronty:100 
          RX bytes:64976 (63.4 KiB)  TX bytes:71180 (69.5 KiB)

na klientu

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.9.8.1  P-t-P:10.9.8.17  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:890 errors:0 dropped:0 overruns:0 frame:0
          TX packets:899 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:187125 (182.7 Kb)  TX bytes:178607 (174.4 Kb)

nebo jako démon

/etc/init.d/openvpn start

Routovací tabulka na clientu - náš notebook

Spuštěním tunelu dojde k automatické úpravě routovacích tabulek v jádře. My jen zkontrolujeme, zda-li to dává smysl a neudělali jsme někde chybu.

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    203    0        0 eth0
10.9.8.0        0.0.0.0         255.255.255.240 U     0      0        0 eth0
10.9.8.17       0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.0.0     0.0.0.0         255.255.255.0   U     203    0        0 eth0

rozsah 10.9.8.0/255.255.255.240 tj. ip 10.9.8.1-16 jsou v lokálni síti na sítovce eth0
IP adresa 10.9.8.17 smeřuje do tunelu tun0

Routovací tabulka na serveru

Nastartováním tunelu dojde i aktualizaci routovacích tabulek v kernelu. Můžeme tak zkontrolovat, zda-li dávají smysl a neudělali jsme někde chybu.

route -n
Směrovací tabulka v jádru pro IP
Adresát         Brána           Maska           Přízn Metrik Odkaz  Užt Rozhraní
192.0.2.1       0.0.0.0         255.255.255.255 UH    0      0        0 venet0
10.9.8.1        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.9.8.0        10.9.8.1        255.255.255.240 UG    0      0        0 tun0
0.0.0.0         192.0.2.1       0.0.0.0         UG    0      0        0 venet0

routovací tabulka říká, že rozsah 10.9.8.1 až 10.9.8.15 bude poslán tunelem tun0.

ping - test

Nyní zkusíme z notebooku dostupnost IP adresy 10.9.8.17 pomocí příkazu ping.

ping 10.9.8.17

Nastavení telefonů

statickou adresu napr. 10.9.8.3 v siti 10.9.8.0 /28 
branu na hosta 10.9.8.2


Naše telefony se budou hlásit na adresu 10.9.8.17, což je druhá adresa našeho virtuálního serveru. Aby asterisk naslouchal i na této adrese, restartujte jej. Tuto adresu můžete pro kontrolu zkusit pinknout z Vašeho notebooku.

sip/proxy server 10.9.8.17

Závěr

Snad jen to, že je možné onu tunelovou síť rozdělit na více různých podsítí a připojovat se na ni z různých míst. Získáme tak extra bezpečnost. Součástí lepších routerů bývá často přímo VPN, takže nám kvůli tomu nemusí běžet v kanceláři speciální počítač s linuxem - ostatně na něm by nám pak mohl běžet celý Asterisk.

openVPN ve Windows

Stáhněte si openvpn odsud: http://openvpn.net/index.php/download/community-downloads.html Nainstalujte. Do adresáře c:/Program files/openvpn/config nahrajte konfigurační soubor a klíč či podobně viz výše. Konfigurační soubor v adresáři c:/Program files/openvpn/config musí mít koncovku ovpn, jinak je ingorován. Tedy např. moje_spojeni.ovpn. Klikněte na ikonku OpenVPN GUI pravým tlačítkem myši a vyberte „Spustit jako správce“. Dole na liště se objeví ikonka OpenVPN GUI . Připojit/odpojit/podívat se na logy lze kliknutím pravým tlačítkem myši a vybráním položky v menu.

Pokud chcete konfigurační soubor editovat, je potřeba editor „Spustit jako správce“, aby měl práva zapisovat.

V mém případě ikonka hlásí připojeno, ale při stejné konfiguraci jako pro Linux na sebe počítače nepingají. Nemám více času se zabývat tímto neperspektivním a iritujícím systémem, pro dnešek to vzdávám. (Poté, co je člověk zvyknutý na Linux, jsou Windows opravdu nepříjemné nepohodlí, kde se navíc vše jeví zbytečně složité a podivné.)

Pokud používáte Windows, může být jednodušší použít microsoftí i když mírně nebezpečný pptp vpn protokol.

 
openvpn_navod.txt · Poslední úprava: 2015/08/20 15:19 autor: misa