Hlavní navigace

Stavíme VPN - CIPE

Miroslav Petříček

CIPE je jedno z nejjednodušších dostupných VPN řešení, které je ovšem omezeno na koncové body používající Linux nebo Windows. Jeho výhodou je triviální konfigurace a efektivní fungování. CIPE je standardní součástí distribuce Red Hat Linux a právě řešením modelového VPN příkladu v této distribuci se bude zabývat tento článek.

CIPE navazuje mezi koncovými body IP-PPP tunel, který pro zapouzdření používá UDP. Na rozdíl od jiných implementací tedy nepotřebuje ke svému fungování žádný další protokol třetí vrstvy a vystačí si s jedním UDP socketem, takže je možné jej poměrně snadno používat i v prostředí firewallů, NAT překladů apod.

O šifrování přenášených datagramů se stará rychlá symetrická šifra blowfish s délkou klíče 128 bitů. Volitelně je možné používat IDEA. Novější verze CIPE mohou používat také autentizaci založenou na asymetrických klíčích RSA.

Způsob použití CIPE nejlépe dokumentuje následující příklad. Řekněme, že máme dvě sítě 192.168.0.0/24 a 192.168.1.0/24, které jsou připojeny do Internetu skrze routery s veřejnými IP adresami 240.0.0.1 a 240.0.1.1 tak, jak je to vidět na následujícím schematu. Potřebujeme mezi těmito sítěmi vytvořit propojení tak, aby počítače na síti A mohly bezpečně komunikovat s počítači v síti B.

Nejdříve je nutné sestavit tajný klíč, který bude použit k autentizaci. Klíč má podobu 128 bitového čísla v hexadecimálním tvaru, které uložíme do souboru /etc/cipe/options-cipcb0 na oba dva routery. Soubor s klíčem musí mít nastavená práva přístupu pouze pro roota:

# echo "key 12345678901234567890abcdefabcdef" &qt;
  /etc/cipe/options-cipcb0
# chmod 0600 /etc/cipe/options-cipcb0

Nyní je potřeba vytvořit virtuální interface sloužící k vlastní realizaci spojení. V Red Hat Linuxu je k tomuto účelu připraven skript ifup-cipcb, proto postačí na routeru A vytvořit definiční soubor /etc/sysconfig/net­work-scripts/ifcfg-cipcb0 s následujícím obsahem:

DEVICE=cipcb0
ONBOOT=yes
USERCTL=yes
MYPORT=5000
PEER=240.0.1.1:5000
PTPADDR=192.168.1.253
IPADDR=192.168.0.253

Na routeru B pak ve stejném souboru:

DEVICE=cipcb0
ONBOOT=yes
USERCTL=yes
MYPORT=5000
PEER=240.0.0.1:5000
PTPADDR=192.168.0.253
IPADDR=192.168.1.253

Význam jednotlivých parametrů je následující:

  • MYPORT – číslo UDP portu, na kterém CIPE očekává spojení. Může být vcelku libovolný, pouze se ujistěte, zdali případný firewall nefiltruje spojení na tento port.
  • PEER – veřejná IP adresa a číslo CIPE portu protilehlého routeru. Na tuto adresu bude navazováno CIPE spojení skrze existující fyzické rozhraní. Touto adresou tedy musejí být routery přístupné ještě před konfigurováním CIPE tunelu.
  • IPADDR – adresa lokálního konce IP tunelu
  • PTPADDR – adresa vzdáleného konce IP tunelu

Po správném nastavení parametrů již můžeme vytvořit rozhraní pomocí příkazu „ifup cipcb0“. O vytvoření zařízení se můžeme přesvědčit příkazem ifconfig:

[root@routerA]# ifconfig cipcb0
cipcb0  Link encap:IPIP Tunnel  HWaddr
        inet addr:192.168.0.253  P-t-P:192.158.1.253
      Mask:255.255.255.255
        UP POINTOPOINT NOTRAILERS RUNNING NOARP  MTU:1442  Metric:1
        RX packets:0 errors:0 dropped:0 overruns:0 frame:0
        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:100
        RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Rozhraní je samozřejmě nutné vytvořit i na routeru B. Fungování IP tunelu nejlépe ověříme pomocí pingu na adresu vzdáleného konce CIPE tunelu. Pokud máte rozhraní na obou stranách vytvořené a ping přesto nefunguje, hledejte problém nejspíše na firewallu, vypnutém IP-forwardingu, špatných právech k souboru s klíčem atd.

Jestliže vám funguje ping na CIPE adresu druhého routeru, můžete přistoupit k nastavení routování sítě do sítě B:

[root@routerA]# route add -net 192.168.1.0/24 dev cipcb0

podobně na routeru B:

[root@routerB]# route add -net 192.168.0.0/24 dev cipcb0

Routování je možné nastavovat v některém ze startovacích skriptů, nebo přímo v /etc/cipe/ip-up, který se volá při vytváření rozhraní. Kompletní routovací tabulka pak může na routeru A vypadat nějak takto:

[root@routerA]# netstat -rn
192.168.1.0     *        255.255.255.0   U   40  0  0 cipcb0
240.0.1.0   *        255.255.255.252 U   40  0  0 ppp0
192.168.1.253   *            255.255.255.255 UH  40  0  0 cipcb0
192.168.0.0     *            255.255.255.0   U   40  0  0 eth0
127.0.0.0       *            255.0.0.0       U   40  0  0 lo
default         240.0.1.2    0.0.0.0         UG  40  0  0 ppp0

Po nastavení routování bychom již měli být schopni transparentně navazovat spojení ze sítě A do sítě B.

Jak vidíte, použití CIPE je snadné. Ovšem pokud máte na VPN technologii o malinko větší nároky, např. komunikaci většího počtu uzlů v multipoint režimu, případně interoperabilitu mezi jinými koncovými body, než jsou Linux a Windows (viz odkazy), nezbude vám, než se poohlédnout někde jinde. Proto se příšte budeme zabývat některou z implentací VPN technologie IPsec.

Zajímavé odkazy

Našli jste v článku chybu?