Туннелирование - это процесс, в котором один уровень инкапсулируется в полезную нагрузку другого уровня. В модели OSI.
IP-туннелирование. Предположим, вы туннелируете ip-пакет внутри другого ip-пакета. Слева вы видите пакет для инкапсуляции, а справа этот пакет добавляется в качестве полезной нагрузки в другой IP-пакет.
На принимающей стороне процесс переворачивается, и пакет полезной нагрузки отправляется на верхние уровни стека.
IP-туннелирование может быть разных типов: ip через ip, ip6 через ip, ip через ip6.
В туннелировании TCP такой же процесс выполняется на уровне TCP.
Туннелирование TCP обычно используется для переадресации портов, потому что трафик может быть выборочно перенаправлен на основе порта назначения.
Вот несколько хороших статей:
IP-туннелирование. http://www.linuxfoundation.org/collaborate/workgroups/networking/tunneling
Переадресация TCP-порта: http://www.cyberciti.biz/faq/linux-unix-tcp-port-forwarding/