OpenVPN и TOR

Настраиваем доступ к TOR через OpenVPN подключение.

Для начала важный моент — лучшим способом получить доступ к .onion сайтам будет простая загрузка Tor Browser’a. Скачиваете или ставите из репозитория своего дистрибутива, запускаете и используете. Всё. Если же, по какой-то причине, вам захотелось как и мне настроить цепочку OpenVPN > TOR > Internet — добро пожаловать в заметку.

openvpn tor

Как и в обычной настройке OpenVPN, нам потребуется самый простой виртуальный сервер с CentOS 7 на нём. Одним из отличий от обычного сетапа будет то, что я таки воспользуюсь iptables вместо firewalld. Кроме того, конфиг от стандартной настройки будет немного отличаться (будем передавать другие резольверы клиенту).

I. Поставим всё необходимое.

Тянем из репозиториев:

# yum install epel-release
# yum install openvpn tor wget zip nano iptables-services

II. Настроим OpenVPN.

Настройка тут схожа с тем, что делалось  в предыдущих заметках.

1. Для генерации ключей поставим старый-добрый easy-rsa:

# cd /usr/local/src/
# wget https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz
# tar xvfz 2.3.3.tar.gz
# mkdir -p /etc/openvpn/easy-rsa/keys
# cp -arvp /usr/local/src/easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
# cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

2. Не забываем в файле /etc/openvpn/easy-rsa/vars прописать нужные значения, либо оставляем всё как есть, если это не критично:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Tundra"
export KEY_ORG="TundraINC"
export KEY_EMAIL="info@tundra.tld"
export KEY_OU="TundraVPN"

3. Генерируем сертификат и ключ для сервера (имя сервера здесь — server):

# cd /etc/openvpn/easy-rsa
# source ./vars 
# ./clean-all
# ./build-ca
# ./build-key-server server
# ./build-dh
# cd /etc/openvpn/easy-rsa/keys/
# cp dh2048.pem ca.crt server.crt server.key /etc/openvpn/

Отвечаем на опросы, создаём сертификат, дожидаемся завершения процесса.

4. Создаём конфиг нашего VPN:

local 1.2.3.4
port 3333
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 10.8.0.1"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
mssfix
fragment 1300
duplicate-cn
sndbuf 524288
rcvbuf 524288
push "sndbuf 524288"
push "rcvbuf 524288"
log openvpn.log
verb 5

Обратите внимание на следующие моменты:

  • В конфиге уже включены увеличенные буферы. Подробнее об этом можно почитать здесь.
  • В конфиге мы пушим резольвер 10.8.0.1. Именно с него мы будем заворачивать трафик в TOR.
  • В конфиге включены логи. Если это критично, отправьте лог в /dev/null
  • В конфиге уже используется опция duplicate-cn. Она позволяет подключаться нескольким клиентам по одному сертификату.

Сохраняем конфиг и перезапускаем сервис командой:

# systemctl restart openvpn@server.service

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

Открываем файл /etc/tor/torrc и дописываем в него следующее:

VirtualAddrNetwork 10.192.0.0/10
AutomapHostsOnResolve 1
DNSPort 10.8.0.1:53530
TransPort 10.8.0.1:9040

Сохраняем изменения, перезапускаем сервис.

# systemctl restart tor

IV. Настраиваем iptables и форвардинг.

Важный момент — данная инструкция пишитеся для «чистого» сервера, на котором модификация правил фаервола не повлияет на доступность сервисов. Для серверов с уже нстроенным фаерволом, или какими-либо работающими сервисами настройка может отличаться.

1. Для начала, отключим firewalld и включим iptables в работу. При этом, мы очистим все имеющиеся правила.

# systemctl stop firewalld
# systemctl disable firewalld
# systemctl enable iptables
# systemctl restart iptables
# iptables -F

2. Добавим правила, которые будут перенаправлять приходящий на серер трафик в TOR.

# iptables -A INPUT -i tun0 -s 10.8.0.0/24 -m state --state NEW -j ACCEPT
# iptables -t nat -A PREROUTING -i tun0 -p udp --dport 53 -s 10.8.0.0/24 -j DNAT --to-destination 10.8.0.1:53530
# iptables -t nat -A PREROUTING -i tun0 -p tcp -s 10.8.0.0/24 -j DNAT --to-destination 10.8.0.1:9040
# iptables -t nat -A PREROUTING -i tun0 -p udp -s 10.8.0.0/24 -j DNAT --to-destination 10.8.0.1:9040

3. Сохраняем конфигурацию iptables:

# service iptables save

3. Не забываем так же, включить форвардинг пакетов в sysctl.conf:

# cat /etc/sysctl.conf 
net.ipv4.ip_forward = 1 
# sysctl -p

V. Выписываем сертификат для клиентов.

Создаём сертификат, с помощью которого к серверу будут подключаться клиенты:

# cd /etc/openvpn/easy-rsa
# ./build-key client
# mkdir /root/clientserts
# mv /etc/openvpn/easy-rsa/keys/client.* /root/clientserts/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /root/clientserts/
# cd /root/
# zip -r -9 clientserts.zip clientserts/

Архив clientserts.zip используем по ситуации — для кого-то нужно будет написать конфигурационный файл, ключающий в себя сертификаты и ключ, кто-то просто с помощью GUI настроит подключение и т. д. Примеры настройки для Windows и для NetworkManager в Linux есть в прошлой заметке (прокручиваем вниз).

Так или иначе, после того как подключение будет настроено, и клиент подключится к OpenVPN серверу 1.2.3.4, его исходящим IP адресом будет IP из TOR сети.

Резольвинг .onion адресов так же будет работать:

$ nslookup expyuzz4wqqyqhjn.onion
Server: 10.8.0.1
Address: 10.8.0.1#53

Non-authoritative answer:
Name: expyuzz4wqqyqhjn.onion
Address: 10.241.254.78
Name: expyuzz4wqqyqhjn.onion
Address: fe96:a51a:3ef2:e38f:ed9:9f89:afda:e681
$ wget http://expyuzz4wqqyqhjn.onion/
--2018-09-15 09:40:29-- http://expyuzz4wqqyqhjn.onion/
Распознаётся expyuzz4wqqyqhjn.onion (expyuzz4wqqyqhjn.onion)… 10.241.254.78, fe96:a51a:3ef2:e38f:ed9:9f89:afda:e681
Подключение к expyuzz4wqqyqhjn.onion (expyuzz4wqqyqhjn.onion)|10.241.254.78|:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 15671 (15K) [text/html]

На этом, настройку можно считать завершённой. Теперь, наше подключение к сети выглядит ровно так, как и задумывалось OpenVPN > TOR > Internet.

P. S. Ещё разок — для доступа к .onion сайтам лучше всего использовать Tor Browser, но если по какой-то причине, вы хотите, что бы стандартный Firefox, после описанной выше настройки резольвил .onion адреса, откройте about:config в нём, найдите там настройку blockdotonion и задайте для неё значение false. Это плохая идея.

3 thoughts on “OpenVPN и TOR

  1. Спасибо. Интересно и просто. Кому то покажется даже нужным. Но есть 1 минус. На многие сайты невозможно зайти имея ip тора. Может все же когда нибудь владельцы пересмотрят свои взгляды.

  2. А можно инструкцию как настроить VPN через TOR? (TOR > OpenVPN > Internet)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *