Так как я сам пользуюсь такой формулировкой, поясню что именно я вкладываю в нее.
ssh позволяет внутри открытого соединения (оно одно на сессию и двунаправленное, если это важно), поднимать несколько каналов обмена информации, например собственно терминал (т.е. stdin/stdout удаленной сессии), перенаправления портов (ключи -R или -L), socks прокси (ключ -Dip:port ) и даже полноценный vpn туннель (ключ -w 0:0 ) причем как point-to-point так и ethernet (т.е. симуляция физического интерфейса) - tun и tap в терминологии linux, и все это одновременно.
Но все это великолепие будет упаковано в одно единственное соединение tcp. А у tcp есть одно достоинство/недостаток/фича - оно гарантирует порядок доставки отправленных пакетов, т.е. пока N-ый пакет не дойдет до адресата, N+1-ый пакет будет ждать и не дойдет до приложения, хотя физически он в принципе может уже быть на удаленной машине. Т.е. если у вас открыто (инкапсулировано) несколько соединений внутри одной ssh сессии, и у вашего провайдера (или точнее у провайдера на пути до ssh сервера) возникнет проблема/потеря пакета, то все ваши инкапсулированные соединения приостановятся и будут ждать, даже если задержанный пакет принадлежал конкретному соединению, ждать будут все.
Т.е. поднимать vpn с помощью ssh может быть удобно и просто, но отзывчивость результата будет не на высоте, особенно если у вас не очень качественная связь.
p.s. гуглятся форки ssh, поддерживающие udp (который не гарантирует порядок и в принципе доставку пакетов), но на сколько они 'правильно' реализованы я хз.