На Ubuntu (как на любом Linux) это делается элементарно через iptables.
Например,
Redsocks (
github,
пакет в Ubuntu) - почти готовое решение, скрипт, который несет в себе все необходимые команды iptables для решения конкретной задачи. Позволяет прокидывать весь TCP (!) трафик с машины через SOCKS4/5 (а значит и через TOR или SSH) и даже через HTTP-proxy с доступным методом CONNECT (правда, сегодня такие уже большая редкость). Устроен он очень просто, советую заглянуть в исходник (на главной странице сайта также приведен), чтобы убедится в том, что те же действия с iptables несложно проделать и руками при необходимости.
Примечательно: При покупке собственного VPS, в этом варианте
нет необходимости поднимать на нем VPN, достаточно голого шелла, который вы получаете из коробки сразу при покупке. На клиенте при этом работает связка ssh (лучше autossh) + redsocks (или аналогичный скрипт).
Что касается Windows, то на машине,
напрямую подключенной к Сети, единственный безопасный метод ее запуска - это внутри виртуальной машины. А трафик с виртуальной машины можно легко фильтровать и/или запихнуть в туннель при помощи того же iptables.
Как правильно заметил
xmoonlight , владельцам роутеров с полноценным Linux на борту повезло в том, что Windows-машины (даже без виртуалок) могут быть безопасно подключены к Сети через роутер при помощи настройки iptables на нем.