Casto se potrebujeme pripojit na pocitac, ktery je za NATem. Obvykle se vyuziva VPN. Pokud vsak potrebujeme zpristupnit pouze nekolik malo, nebo jeden port, je nejpohodlnejsi a nejrychlejsi pouzit SSH.
Princip presmerovani SSH portu je videt na nasledujcim obrazku:
(obrazek prevzaty z http://www.dirk-loss.de/ssh-port-forwarding.png)
Nas zajima remote port forwarding. Pokud se nekdo pripoji na port X na serveru, dojde k presmerovani na ip:port na klientovi.
Nastaveni serveru
V zakladu OpenSSH nepovoluje remote port forwarding. Zapneme ho jednoduse pridanim
GatewayPorts yes AllowTcpForwarding yes
iptables -I INPUT -p tcp --dport 2222 -j ACCEPT
Pripojeni z klienta
Na PC, kde se budeme pripojovat spustime:
# ssh -R 0.0.0.0:2222:localhost:22 root@server.com
Pokud se nekdo pripoji na server.com na port 2222, tak se spojeni presmeruje skrz tunel na localhost 22. Server musi poslouchat na 0.0.0.0!
# ssh -R 0.0.0.0:2222:10.20.30.40:22 root@server.com
Pokud nyni spustime prikaz na svem PC, tunel se bude smerovat na IP 10.20.30.40 – libovolna IP dostupna z LAN, ve ktere je PC.
Jestlize nepotrebujeme terminal, ale samotny ssh tunel, pridame parametr -nnT :
# ssh -nNT -R 0.0.0.0:2222:localhost:22 root@server.com
# ssh -nNT -R 0.0.0.0:2222:10.20.30.40:22 root@server.com/pre>
Kdyz nebude fungovat, overime, zda server na danem portu posloucha:
# lsof -i:2222 sshd 6976 root 7u IPv4 620225 0t0 TCP *:2222 (LISTEN) ...
# ssh -p 2222 ubuntu@server.com
+----------------+ +-----+ | Uzivatelsky pc +---------> NAT +------------+ +----------------+ +-----+ | | | | +----v----+ | SERVER | | VEREJNA | | IPv4 | | | +----+----+ | | | | +--v--+ | NAT | +--+--+ | | | +-----+ +--v---+ | PC n<-----+ PC 1 | +-----+ +------+