22.7.2004

TUNEL MEZI LINUXEM A WINDOWS XP

Filed under: networks — nax @ 16:20

Včera se mi konečně podařilo rozběhnout tunel nebo chcete li VPN mezi mĂ˝m linuxovĂ˝m routerem a notebookem moji vyvolenĂŠ kterĂ˝ mĂĄ od přírody Windows XP. Po vĹĄech marnĂ˝ch pokusech s ipsec (je to btw povinnĂĄ součást IPv6 a na linuxu to implementuje projekt openswan – fork dřívějĹĄĂ­ho freeswan projektu), kde se mi to nepovedlo rozjet na windowsĂ­ch a nebo s pptpd (pro linux existuje sice server poptop ale řeĹĄĂ­ se to nějak Ăşplně divně přes pppd, kterĂ˝ mĂĄm prostě spojenĂ˝ podvědomě hlavně s modemem a vytáčenĂ˝m připojenĂ­m – i kdyĹž vĂ­m Ĺže point to point protokol se jen na tohle nevyuŞívĂĄ) jsem nakonec jako optimĂĄlnĂ­ volbou shledal openvpn, coĹž je userspace implementace vpn, kterĂĄ běží jak na Windows (mĹŻĹže i jako sluĹžba) nebo na linuxu (normĂĄlnĂ­ daemon, kterĂ˝ jen v jĂĄdře potřebuje podporu tun/tap modul).

Nastavit se to dĂĄ jak aby pouŞíval silnĂŠ ĹĄifrovĂĄnĂ­ tak taky tak, aby třeba jen komprimoval packety. Ono sice větĹĄinou je potřeba ĹĄifrovĂĄnĂ­ (firemnĂ­ sfĂŠra, kterĂĄ sdruĹžuje dvě lan do jednĂŠ pomocĂ­ VPN), ale zrovna v mĂŠm případě by to bylo totĂĄlně na houby a jen bych zbytečně pekl procesory na obou stranĂĄch tunelu (navĂ­c u mě na balkĂłně je to docela starĂĄ ĹĄunka, na kterĂŠ byste si třeba quaka 2 rozhodně nezapařili 😉 No abych to zkrĂĄtil: U sebe jsem si stĂĄhl zdrojĂĄky (pozor abyste na obou kompech měli stejnĂŠ verze ! JĂĄ nejdřív stĂĄhnul 2.0beta ale pro widle jsem naĹĄel jen stabilnĂ­ 1.6 a byly s těmi rozdĂ­lnĂ˝mi verzemi problĂŠmy) a zkompiloval a nainstaloval.

Vlastně neĹž se pustĂ­m do dalĹĄĂ­ho popisu konfigurace, tak bych asi měl popsat situaci, proč vlastně ten tunel dělĂĄm. Inu jde o to, Ĺže moje přítelkyně je zrovna připojenĂĄ na to jedinĂŠ AP v ĹĄirĂŠm okolĂ­, kde admin zĂĄsadně odmĂ­tĂĄ udělat default routu do czfree (tedy na mne). VĹĄechny desĂ­tkovĂŠ adresy se routujĂ­ sprĂĄvně, ale internetovĂŠ adresy pro kterĂŠ samozřejmě nemĹŻĹže bĂ˝t v routovacĂ­ tabulce zĂĄznam (protoĹže internetovĂŠ adresy jsou vĹĄechny ostatnĂ­ neĹž privĂĄtnĂ­, tedy desĂ­tkovĂŠ, 192.168kovĂŠ a jeĹĄtě pĂĄr rozsahĹŻ mĂŠně pouŞívanĂ˝ch) a tedy jde je směřovat jen pomocĂ­ default routy. No a vzhledem k tomu, Ĺže ten sprĂĄvce AP mĂĄ svojĂ­ přípojku UPC a chce aby z routeru měl přístup na net přes svojĂ­ přípojku, ale ŞådnĂ˝m klientĹŻm to neumoŞňuje (ani nemĹŻĹže podle smluvnĂ­ch podmĂ­nek) tak je tu problĂŠm, protoĹže pro klienty co jsou na něj připojenĂ­ vede routa prostě “do zdi”. JĂĄ jsem u sebe samozřejmě řeĹĄil stejnĂ˝ problĂŠm, ale jĂĄ jsem se nebĂĄl experimentoval a řeĹĄenĂ­m na Ăşrovni routovĂĄnĂ­ je pouŞít tzv. source routing, kterĂŠ se dělĂĄ pomocĂ­ značkovĂĄnĂ­ packetĹŻ ve firewallu podle zdrojovĂŠ adresy a pomocĂ­ nĂĄstrojĹŻ z balĂ­ku iproute (v debianu ho mĂĄm jako iproute2) je definovĂĄno několik routovacĂ­ch tabulek a podle značky kterou packet dostal ve firewallu se packet poĹĄle do tĂŠ kterĂŠ tabulky. TĂ­m je tedy dosaĹženo, Ĺže přímo z mĂŠho routeru dostanu default routu do vnitřnĂ­ sĂ­tě (a tedy na svojĂ­ přípojku do upc) ale vĹĄichni moji klienti majĂ­ v alternativnĂ­ routovacĂ­ tabulce default routu na internetovou brĂĄnu naĹĄeho czfree cloudu.

Jenže ten správce AP tvrdí, že je to moc práce a potenciální zdroj díry ve firewallu a že prostě source routing ani náhodou. Pak tedy již zbývají jen dvě varianty. Buďto se použije proxy server (tak jsem to u přítelkyně řešil dosud) ale to má tu velikánskou nevýhodu, že to ta aplikace musí podporovat (třeba internetová prohlížeče jako Mozilla nebo i to IE takové nastavení má) ale třeba většina her (například takové cube, které jsme si s přítelkyní velmi oblíbili) to neumí a prostě si pak přes internet nezahrajete a jste odkázáni jen na hraní uvnitř czfree (tedy desítkové sítě). Druhým způsobem je udělání takzvaného tunelu neboli vpn. Polopatě řečeno to znamená, že na obou počítačích se vytvoří virtuální interfacy které se vzhledem třeba k routování tváří, že jsou spolu přímo ty počítače spojené. Celé to potom funguje tak, že co se pošle na ten virtuální interface, tak se obalí novými hlavičkami a tam se zapíše adresa přímo dosažitelná (tedy v mým případě desítková) a odešle se to. Na druhém počítači když takový packet přijde tak se zase rozbalí a řekne se že ten vnitřek přišel z toho virtuálního interfacu.

No a teď k tĂŠ konfiguraci. Openvpn umĂ­ dva reĹžimy – jednak tun, coĹž znamenĂĄ simulaci přímĂŠho spojenĂ­ dvou počítačů a nebo tap, coĹž je simulace Ethernetu, tedy kdy na jeden segment je připojeno vĂ­ce počítačů. ZatĂ­mco v tĂŠ prvnĂ­ v konfigurĂĄku nastavĂ­te vĹždy jen přímo viditelnou IP adresu druhĂŠho počítače (remote) a obě virtuĂĄlnĂ­ adresy (řádek ifconfig) tak u varianty tap u serveru (neboli jednoho z počítačů, kterĂ˝ bude zprostředkovĂĄvat spojenĂ­ ostatnĂ­m) remote nechĂĄte zakomentovanĂŠ a do ifconfig nastavĂ­te virtuĂĄlnĂ­ adresu svojĂ­ a masku. Na klientech pak do remote napĂ­ĹĄete jmĂŠno serveru a ifconfig bude vypadat stejně akorĂĄt s tĂ­m rozdĂ­lem, Ĺže tam bude virtuĂĄlnĂ­ adresa toho klienta. Oproti ipsec je to prochĂĄzka rĹŻĹžovĂ˝m krajem. OstatnĂ­ volby nejsou tak dĹŻleĹžitĂŠ a vĹĄe je velice hezky okomentovĂĄno, takĹže by neměl bĂ˝t problĂŠm.

JeĹĄtě je třeba ve firewallu na obou stranĂĄch povolit protokol GRE (neboli PROTOKOL! 47 – POZOR! Ne port, ale protokol) a port kterĂ˝ jste pro komunikaci vybrali (defaultně UDP port 5000). VypĂ­ĹĄu tady co sem přidal jĂĄ do svĂŠho fw:

$IPTABLES -A FORWARD -i $TUNEL1_IF -j ACCEPT
$IPTABLES -A INPUT -i $TUNEL1_IF -j ACCEPT
$IPTABLES -A INPUT -p 47 -s $EVIK_IP -j ACCEPT
$IPTABLES -A INPUT -p UDP -s $EVIK_IP --dport 5000 -j ACCEPT
$IPTABLES -A OUTPUT -s $TUNEL1_IP -j ACCEPT

Jenom připomenu, že mám autentizaci pomocí statického klíče, takže proto mám povoleno vše z interfacu toho tunelu. Na těch windowsích jsem ještě musel dostat do routovací tabulky to, aby desítkové adresy posílal na to svoje AP a ne do tunelu (jinak by to vedlo k tomu, že by se packety zabalené z tunelu o5 cpaly do tunelu). V cmd jsem tedy pustil permanentní přidání routy (parametr -p zařídí že tam ta routa bude i po rebootu) do desítkové sítě:

route -p add 10.0.0.0 mask 255.0.0.0 10.27.9.1

kde to 10.27.9.1 je IP toho AP z rozsahu, který má i ten její notebook (tedy je ze stejné sítě).

Comments are closed.

Powered by WordPress