Jak na VPN s OpenSSH
Tento článek napsal dexterAutor 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:
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)
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





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:
- V 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í
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.
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


