SSH-tunnlar kan vara lite förvirrande eftersom de involverar två ssh-processer, tre nätverksförbindelser och potentiellt sett fyra hosts.
CLIENT <-1-> "ssh -L..." <-2-> "sshd" <-3-> SERVER
Vitsen är att förbindelse 2 är krypterad ("säker"). Ofta är en eller båda av förbindelserna 1 och 3 på samma maskin (localhost).
En TCP-förbindelse består av IP-adressen för source och destination, samt en source-port och en destination-port. Fyra värden.
Det kan inte finnas två TCP-förbindelser med samma fyra värden; varje TCP-förbindelse måste vara unik (uppnås genom att man väljer olika source-portar). Om flera klienter vill koppla sig till samma server (samma portnummer) får man flera uppkopplingar med samma dst-host och dst-port; src-host och src-port måste då variera.
Då ditt kommando har gjort en tunnel har vi följande nätverkskoppel:
<-1->: clienthost:XXX <-> sshhost:2000
<-2->: sshhost:YYY <-> sshdhost:22
<-3->: sshdhost:ZZZ <-> sshdhost:4000
På sshhost ser du förbindelse <-1-> och <-2->
På sshdhost ser du <-2-> och <-3->
Portarna XXX, YYY och ZZZ slumpas av operativsystemet på klienten för att varje förbindelse skall vara unik. Rubbernet visar bara remote port för varje förbindelse så på inkommande förbindelser ser du de slumpade portnumren.
Terminalkommando för att se ssh-förbindelser (inklusive src-port och dst-port):
$ lsof -n | grep TCP | grep ssh