Пускаем на VPN-сервере весь трафик клиентов через сеть TOR

Для большей анонимизации можно пускать трафик с VPN-сервера в сеть TOR. Такая же схема подходит для ситуаций, когда сеть TOR у вас заблокирована государством (про обход блокировок средствами TOR без участия VPN можно прочесть тут).

Немного теории

Существует множество схем построения сетей, но самыми популярными являются:

  1. Клиент -> VPN Out -> TOR -> Internet

  2. Клиент -> VPN In -> VPN Out -> TOR -> Internet

Для обоих вариантов сначала необходимо настроить VPN-сервер.
Настройка первого варианта уже рассматривалась в статье Разворачиваем за минуту OpenVPN-сервер с пользовательскими ключами, второго — в статье Double VPN.

Дальнейшие действия для обеих схем аналогичные. Вся настройка для работы с TOR производится лишь на сервере vpn out.

Настраиваем TOR

Устанавливаем TOR и добавляем в /etc/tor/torrc на vpn out следующие строки:

TransPort 9040
DNSPort 5353
AutomapHostsOnResolve 1
TransListenAddress 10.8.0.1
DNSListenAddress 10.8.0.1

Где 10.8.0.1 — локальный IP VPN-сервера (задаётся через опцию server в конфиге OpenVPN).

Внимание! Не торопитесь перезапускать TOR, он должен запускаться лишь после запуска VPN-сервера (!), иначе он будет ругаться на отсутствие адреса 10.8.0.1.

Лучше запуск TOR вовсе убрать из автозагрузки:

$ sudo systemctl disable tor

Настройка iptables

В iptables на vpn out помимо необходимых для работы OpenVPN правил (освещено в статьях приведённых выше) необходимо добавить 2 следующих правила:

$ sudo iptables -A PREROUTING -s 10.8.0.0/24 -p udp -m udp --dport 53 -j REDIRECT --to-ports 5353
$ sudo iptables -A PREROUTING -s 10.8.0.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040

Первое правило задаёт использование DNS через сеть TOR, второе перенаправляет весь трафик из подсети 10.8.0.0 на порт 9040 демона tor.

Не забудьте добавить восстановление правил iptables в автозагрузку!

Настройка OpenVPN

Каких-либо изменений в конфигурации OpenVPN (как сервера, так и клиента) для работы с TOR производить не нужно! В том числе ничего не нужно менять на сервере с vpn in (если он используется).

Запуск и тестирование

Поскольку запуск TOR на vpn out необходимо производить в данном случае лишь после запуска OpenVPN — не забываем после каждой перезагрузки сначала запускать OpenVPN, а потом уже TOR.
Например, так:

$ sudo systemctl start openvpn
$ sudo systemctl start tor

Полезный лайфхак

Не всегда хочется использовать VPN для работы через TOR по ряду причин (медленное соединение, бан в ряде сайтов, капчи), поэтому предлагаю на vpn out поднять сразу два сервера OpenVPN на разных портах. Первый порт (например, 443) будет ходить сразу в интернет, второй же (например, 344) — через TOR.