Smitka development

Jak na VPN s OpenSSH

Tento článek napsal dexter
Autor nenese žádnou odpovědnost za jakékoliv možné problémy způsobené postupem v tomto návodu. Jestliže vás vyhodí z práce, dostanete ban, zničíte systém na veledůležitém serveru nebo vám někdo ukradne data za miliony, nepište mi.

Mnozí jste určitě četli Smíťův članek Hrajeme si s SSH. OpenSSH má spoustu dalších zajímavých funkcí a já se s vámi podělím o jednu podle mě z nejzajímavějších.

Od OpenSSH verze 4.3 existuje parametr -w, který dokáže za určitých podmínek vytvořit plnohodnotnou P2P VPNku.

Jak na to:
  • sshd_config nastavte PermitTunnel yes a PermitRootLogin yes na obou strojích, mezi kterými chcete udělat VPNku a restartujte sshd
  • Následuje příkaz na jednom ze strojů ssh -w 0:0 login@server kde -w je přepínač na vytvoření VPNky a 0 je pořadí TUN rozhraní. Pokud už nějaký ten TUN máte, čísla podle toho upravte.
  • Po přilognutí na server se můžete přesvědčit, že se opravdu vytvořilo nové rozhraní
nas_server.cz ~ # ifconfig tun0
tun0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          POINTOPOINT NOARP MULTICAST  MTU:1500  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:500
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
  • Teď už jenom stačí nastavit nějaké IP adresy na obou strojích, případně routování, apod.
Ještě uvedu příklad skriptu, jak to všechno udělat automaticky. Nevýhoda je, že takto vytvořenou VPNku můžeme zrušit akorát killnutím procesu ssh:

ssh -f -w 1:0 nas_server.cz 'ifconfig tun0 1.1.1.1 netmask 255.255.255.252; route add -net 192.168.50.0/24 dev tun0'
ifconfig tun1 1.1.1.2 netmask 255.255.255.252

Parametr -f znamená, že ssh po provedení příkazu v apostrofech půjde na pozadí a nejde nijak zpátky vyvolat (nebo jsem nepřišel na to jak). V apostrofech je příkaz, který se provede na serveru - vidíme, že se nastaví Point2Point IP adresa na rozhraní tun0 a přidá se routa do naší vnitřní sítě (viz. dále). Na dalším řádku našeho skriptíku se už akorát nastaví adresa klienta.

nas_server.cz ~ # ping 1.1.1.2
PING 1.1.1.2 (1.1.1.2) 56(84) bytes of data.
64 bytes from 1.1.1.2: icmp_seq=1 ttl=64 time=0.769 ms

Pokud budeme chtít přistupovat do vnitřní sítě, musíme kromě routy udělat ještě tzv. maškarádu. V našem případě to uděláme na klientovi přes iptables a to zhruba takto:
iptables -t nat -A POSTROUTING -s 1.1.1.1/32 -j MASQUERADE
Jestliže jste ještě nikdy tento routing nepoužili, pravděpodobně budete muset ještě nastavit echo 1 > /proc/sys/net/ipv4/ip_forward

nas_server.cz ~ # ping 192.168.50.1
PING 192.168.50.1 (192.168.50.1) 56(84) bytes of data.
64 bytes from 192.168.50.1: icmp_seq=1 ttl=62 time=0.811 ms

komentáře komentáře (0)


Kolik je 4+3?


linkuj.czjagg.czpošli na vybrali.sme.skdeliciousTopČlánky.cz
Nahoru HOME PC•Elektro Programování Blog Autor Lynt Speciální backlink: Šulislav
© 2006 Smitka development