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 |
+-----+ +------+