Как обойти цензуру в интернете? Обфускация трафика obfsproxy + openvpn.

В разных странах в разное время возникают проблемы с интернетом, которые официально объясняются DDOS-атаками извне, или отключениями со стороны внешних операторов. При этом, по загадочным обстоятельствам, тормозить начинают даже те сайты, которые расположены внутри страны и не подвергаются никаким атакам. Также, при проверке связи не наблюдаются повышенные задержки и потери пакетов. Другими словами, есть вероятность, что в этих странах проблемы с интернетом носят вызваны совсем не атаками извне. А значит, их можно попытаться обойти разными способами.

Один из способов — построение туннеля к тем серверам, которые доступны извне. Существуют различные виды туннелей, но сегодня мы будем настраивать openvpn с обфускацией через obfsproxy на базе ubuntu 18.04.

Итак, нам понадобится:
1. Сервер, который доступен по любому порту из места, где бывают проблемы с интернетом.
2. Openvpn клиент и obfsproxy на компьютере, с которого мы планируем выходить в интернет.

Установка серверной части

Установку OpenVPN-сервера, для краткости, описывать не буду. Описаний этого процесса в интернете достаточно, есть даже готовые скрипты. Например, https://git.io/vpn

После установки и базовой настройки openvpn, устанавливаем obfsproxy:

apt install obfsproxy

Его настройка и использование достаточно просты. Все необходимые параметры перечисляются прямо в строке запуска. Выглядит это как-то так:

obfsproxy --log-min-severity=info obfs2 --dest=127.0.0.1:1194 --shared-secret=<some-random-key> server 0.0.0.0:8080

В примере выше подразумевается, что openvpn слушает порт 1194 на адресе 0.0.0.0, либо, как минимум, 127.0.0.1. Если вы прописали в конфиге openvpn строго один айпишник — замените 127.0.0.1 на свой адрес. Сам obfsproxy будет слушать порт 8080, но вы можете повесить его на любой доступный вам порт (80, 443 или 22, если ssh вы перенесли на другой).

Для работы openvpn через obfsproxy необходимо, чтобы openvpn был настроен на работу по протоколу tcp. В противном случае вы получите ошибку:

[ERROR] Invalid SOCKS command: '3'

Кроме этого, в настройки сервера openvpn необходимо добавить следующие строки:

push "redirect-gateway local"
push "route xx.xx.xx.xx 255.255.255.255 yy.yy.yy.yy"

где xx.xx.xx.xx — внешний адрес вашего VPN-сервера, а yy.yy.yy.yy — адрес шлюза в сети клиента. После подключения клиента к VPN-серверу, будет автоматически добавляться маршрут к нему, а остальной трафик будет уходить через прокси. Если маршрут не добавлять, трафик по соединению не пойдет и оно само будет разрываться после таймаута.

Примерный конфиг сервера должен выглядеть так:

local 22.22.22.22
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem
push "redirect-gateway local"
push "route xx.xx.xx.xx 255.255.255.255 yy.yy.yy.yy"

Запускаем openvpn-server. Если вы устанавливали его при помощи скрипта по ссылке, то запуск будет выглядеть так:

systemctl start openvpn-server@server

Не забываем открыть необходимые порты снаружи. В этом примере нужен как минимум порт 8080.

Настройка клиента

Клиент будет выступать в роли шлюза, на который можно удобно завернуть весь трафик. Также, это все можно настроить у себя на компьютере под управлением Linux (в таком случае включать форвардинг пакетов и выполнять команду iptables не надо).

Устанавливаем openvpn и obfsproxy:

apt install openvpn obfsproxy

Запускаем obfsproxy с тем же shared secret, что и в серверном варианте:

obfsproxy --log-min-severity=info obfs2 --shared-secret=<some-random-key> socks 127.0.0.1:10194

Копируем конфигурационный файл для клиента openvpn с сервера и вносим в него небольшие изменения для подключения через прокси:

socks-proxy-retry
socks-proxy 127.0.0.1 10194

Запускаем клиент командой:

openvpn --client --config /path/to/config/file

Если все настроено правильно, у вас появится интерфейс tun0 и весь трафик пойдет через него.

Включаем ip forwarding для того, чтобы наш клиент мог выступать в качестве шлюза для хостов в локальной сети:

sysctl -w net.ipv4.ip_forward=1

И раскомментируем строку в файле /etc/sysctl.conf:

net.ipv4.ip_forward = 1

И последнее — настройка iptables:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

После этого, мы можем указать наш хост как шлюз внутри сети и получать защищенный интернет без цензуры на любом хосте внутри сети.

О том, как сделать так, чтобы все запускалось автоматически — в следующей части (ссылка на нее будет добавлена после публикации).

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

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