Ř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)
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.
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)
Nainstalujeme openvpn na notebooku (hostu) i virtuálním serveru:
aptitude install openvpn
Na serveru si vygenerujeme klíč:
openvpn --genkey --secret /etc/openvpn/static.key
klíč zkopírujeme i na hosta též do /etc/openvpn/static.key
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
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
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
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
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.
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
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.
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.
Nyní zkusíme z notebooku dostupnost IP adresy 10.9.8.17 pomocí příkazu ping.
ping 10.9.8.17
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
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.
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.