- TOR роутер на базе Raspberry с поддержкой VPN!
- Установка системы и подключение
- Форвардинг трафика
- iptables
- Установка пакетов
- Настройка сетевого подключения
- Tor + obfsproxy
- OpenVPN
- Тестирование
- Заключение
- Тёмный маршрутизатор из Raspberry Pi
- Этап первый: настройка DPI
- Этап второй: настройка TOR
- Этап третий: установка golang
- Этап четвёртый: заключительные действия
- Этап пятый: запуск
- Спасибо за внимание
TOR роутер на базе Raspberry с поддержкой VPN!
Постановка задачи : получить одноплатный компьютер, который можно подключить к своему ноутбуку/ПК/мобильному устройству и который будет заворачивать трафик сначала в VPN, затем в Tor, обфусцировать с помощью obfs-proxy и отправлять на удаленный VPN-сервер.
1) Одноплатный компьютер. В моем случае это Raspberry Pi модель B+;
2) ОС Raspbian. Для данной статьи использовалась Raspbian Jessie, билд от 18-03-2016;
5) Беспроводной адаптер или переходник ethernet to usb;
6) Удаленный OpenVPN сервер.
1. SBC — одноплатный компьютер;
2. CR — устройство, через которое осуществляется доступ в Интернет. Устройство не обязательно может быть подключено напрямую в порт SBC;
3. PC — какой-либо компьютер (или мобильное устройство) подключаемое к SBC;
4. VPN-server — целевой VPN сервер;
5. Входной интерфейс — физический интерфейс, куда поступает клиентский трафик;
6. Выходной интерфейс — физический интерфейс, с которого трафик уходит в Интернет.
В статье рассматривается случай, когда параметры для линка в интернет приходят по DHCP или задаются статически. Для случаев с получением параметров для линка по L2TP, PPPoE или иных ситуаций настройка будет отличаться. Также будем считать, что для удобной работы VPN-сервер выступает как DNS-relay.
Установка системы и подключение
На официальном сайте Rasbian присутствуют очень подробные инструкции для записи образа для Linux, Mac OS и Windows, поэтому я не буду описывать процесс записи образа ОС на карту памяти, чтобы не загромождать статью. Лучше брать карту от 16 Гб, чтобы избежать в будущем проблем с нехваткой памяти.
С подключением к плате после записи образа и включения может быть несколько вариантов:
1) Если у вас есть специальный экран/монитор/телевизор c поддержкой hdmi, то достаточно его подключить по hdmi;
2) Если экрана нет, но параметры на физический интерфейс приходят по DHCP, то можно просканировать сеть nmap-ом с другого компьютера и подключиться по ssh. Пользователь pi, пароль raspberry;
3) Если нет DHCP, то можно отредактировать файл /etc/network/interfaces и прописать туда адреса вручную.
Форвардинг трафика
Для того, чтобы трафик пересылался с одного интерфейса на другой, необходимо, чтобы был включен соответствующий параметр ядра Linux. Это можно сделать с помощью команды:
sysctl -w net.ipv4.ip_forward=1
Для проверки можно использовать команду:
cat /proc/sys/net/ipv4/ip_forward
iptables
Для того, чтобы упростить маршрутизацию трафика, включим маскардинг для туннельного интерфейса с помощью iptables:
iptables -t nat -A POSTROUTING-s10.5.5.0/24 -o tun0 -j MASQUERADE
Вместо этого можно было бы прописать статические маршруты и статический адрес для клиента. Или использовать ccd.
Установка пакетов
Обновить репозитории и получить обновления:
Установка из репозиториев:
sudo apt-get install python2.7python-pip python-dev build-essential tor openvpn obfs-proxy
Если вы хотите схему с точкой доступа, то помимо этого установим hostapd и DHCP-cервер:
sudo apt-get install hostapd isc-dhcp-server
Вместо isc-dhcp-server вполне может быть использован любой другой. В репозиториях часто содержаться не самые последние версии, поэтому можно собрать пакеты из исходников, но если вам нужно получить быстрое решение, то подойдет и установка из репозитория.
Настройка сетевого подключения
Данный вариант является самым простым. На физическом интерфейсе Raspberry Pi, к которому подключается ПК, достаточно настроить статический адрес. На ПК также задать параметры вручную. Также можно настроить isc-dhcp-server, чтобы он выдавал параметры. На клиентской машине на Linux для первоначальной настройки достаточно выполнить команды:
ip a add 10.5.5.2/24 dev<интерфейс>
ip route add default gw 10.5.5.1
А в файл /etc/resolv.conf добавить запись:
В данной схеме входным интерфейсом будет беспроводной интерфейс, работающий в режиме точки доступа. Вместо режима полноценной точки доступа можно настроить режим Ad-hoc.
Для организации wi-fi точки доступа с DHCP я использовал связку hostapd и isc-dhcp-server, но не обязательно использовать именно эту связку.
/etc/hostapd/hostapd.conf1
hw_mode=g Стандарт работы точки доступа
macaddr_acl=0 Не использовать списки доступа
wpa_passphrase=raspberry Пароль для подключения
wpa_pairwise=TKIP Алгоритмы работы с ключами и шифрованием
Задание подсети для которой будет работать данный DHCP сервер
subnet 10.5.5.0 netmask255.255.255.0
option broadcast-address10.5.5.255; Широковещательный адрес
default-lease-time 600; Стандартное удержания адреса
max-lease-time 7200; Максимальное время удерживания адреса
option domain-name-servers10.8.0.1;> Список DNS-серверов.
Сразу стоит оговориться, что у некоторых могут возникнуть проблемы с драйверами и работой беспроводной карточки в режиме точки доступа. Лучше поинтересоваться такими вещами заранее.
Часть с настройкой входного интерфейса ничем не отличается от предыдущей схемы. Выходной интерфейс необходимо подключить к точке доступа. Пример подключения с использованием утилиты nmcli:
nmcli d wifi connect <SSIDточки> password <пароль>iface <интерфейс>
Настройка входного интерфейса происходит как в схеме eth-eth, выходного — как в wlan-wlan.
Tor + obfsproxy
Для маскировки Tor трафика будем использовать obfsproxy .
Привожу пример настройки Tor:
ServerTransportPlugin obfs3 exec/usr/bin/obfsproxy managed
Данные для подключения к серверам obfsproxy можно взять здесь .
OpenVPN
Для организации VPN будем использовать OpenVPN через TCP и в режиме L3 (tap-интерфейс). Используется TCP, поскольку Tor работает только TCP-трафиком. В сам же VPN-туннель можно пускать любой трафик. Для того, чтобы направить VPN трафик в Tor, будем «проксировать» весь VPN-трафик через Tor. OpenVPN поддерживает такую возможность.
Привожу пример настройки клиентской части OpenVPN с подробными комментариями:
/etc/openvpn/client.conf1
proto tcp Задать TCP транспортным протоколом
socks-proxy 127.0.0.1 9050 Использовать Tor как Socks-proxy.
socks-proxy-retry Пытаться подключаться многократно
# Внешний IP, на или за которым находится сервер OpenVPN и порт (на сервере или на сетевом устройстве, на котором настроен проброс портов до сервера)
remote 1.1.1.1 443 Порт специально выбран таким образом, чтобы он совпадал с портом, используемым протоколом https.
resolv-retry infinite Подключаться до тех пор, пока подключение не будет осуществлено.
cert /etc/openvpn/keys/client.crtСертификат клиента
key /etc/openvpn/keys/client.keyПриватный ключ клиента
tls-auth /etc/openvpn/keys/ta.key 1Ключ для аутентификации в TLS
auth SHA1 Задать SHA1 как алгоритм хеширования
cipher AES-128-CBC Задать основным алгоритмом шифрования AES с длиной ключа в 128 бит в режиме сцепления блоков.
По настройке сервера есть достаточно много инструкцией в интернете. Ключевым в настройке является совпадение параметров и наличие в конфиге сервера строчки «push «redirect-gateway def»». Она необходима, чтобы на клиенте установился маршрут по-умолчанию для проходящего трафика, который указывает на VPN сервер.
Тестирование
Для теста правильности работы пустим ping от подключенного ПК до tun-интерфейса VPN-сервера, будем снимать трафик с помощью tcpdump и анализировать в Wireshark для наглядности.
1) ICMP-запрос приходит на входной интерфейс Raspberry Pi.
Стоит обратить внимание на идентификаторы BE, LE и временную метку. Далее они нужны будут для того, чтобы опознать ICMP-запрос на стороне сервера.
2) ICMP-пакет прошёл процедуру обработки в OpenVPN и направился на порт 9050, который «слушается» Tor. Снимок трафика происходит на loopback интерфейсе Raspberry Pi.
3) Пакет выходит из Raspberry Pi и направляется на один из узлов сети Tor с серверной частью obfsproxy:
4) И снимок трафика уже на туннельном интерфейсе VPN-сервера. Тут же можно заметить, что сервер послал ответ.
Идентификаторы BE, LE и временная метка совпадают с теми, которые были в отправленном пакете.
5) Пакет, выходящий с VPN-сервера, в котором содержиться ICMP-reply.
Также я произвел тестирование пропускной способности этого решения с помощью iperf для TCP и UDP трафика до сервера. Тестирование проводилось с использованием Raspberry Pi model B+ и ОС Raspbian в домашней сети, так что цифры для других одноплатных компьютеров с другими ОС или другой сетевой средой могут отличаться.
— связка Tor + VPN+ obfsproxy
Заключение
Потенциальные подводные камни:
1) Синхронизация времени. Поскольку tor выполняет криптооперации с проверкой временных меток, то время должно быть синхронизировано. К сожалению, время нужно будет синхронизировать каждый раз после выключения платы.
2) Размер mtu. DF-бит в отправляемых пакетах может привести к тому, что трафик будет «резаться», если где-то по пути запрещена фрагментация пакетов, а значение mtu меньше вашего.
3) Использование VPN throught Tor и obfsproxy не панацея от всего.
#безопасность и мир #безопасность #интернет #шифрование #компьютер #анонимность в интернете #защита #слежка #приватность
Тёмный маршрутизатор из Raspberry Pi
В данной статье я расскажу о том, как я сделал из Raspberry Pi маршрутизатор, способный перенаправлять отдельные сайты, отдельные подсети, да хоть все запросы через tor.
Клонируем мой репозиторий с github и производим настройку. Все действия также описаны на странице репозитория.
Этап первый: настройка DPI
Центром нашего маршрутизатора будет DPI, созданный пользователем @Evengard (ссылка на статью — https://habr.com/ru/post/548110/).
Выполняем сделующие команды, не забывая заменить username на имя своего пользователя:
mkdir build cd build wget https://openresty.org/download/openresty-1.19.9.1.tar.gz # or latest release from https://openresty.org/en/download.html tar -xzvf openresty-1.19.9.1.tar.gz mv openresty-1.19.9.1 openresty git clone https://github.com/fffonion/lua-resty-openssl git clone https://github.com/fffonion/lua-resty-openssl-aux-module git clone https://github.com/Evengard/lua-resty-getorigdest-module git clone https://github.com/iryont/lua-struct git clone https://github.com/Evengard/lua-resty-socks5 cd openresty ./configure --prefix=/home/username/nginxdpi --with-cc=gcc --add-module=/home/username/build/lua-resty-openssl-aux-module --add-module=/home/username/build/lua-resty-openssl-aux-module/stream --add-module=/home/username/build/lua-resty-getorigdest-module/src make -j4 && make install cp -r /home/username/build/lua-resty-getorigdest-module/lualib/* /home/username/nginxdpi/lualib/ cp -r /home/username/build/lua-resty-openssl/lib/resty/* /home/username/nginxdpi/lualib/resty/ cp -r /home/username/build/lua-resty-openssl-aux-module/lualib/* /home/username/nginxdpi/lualib/ cp /home/username/build/lua-resty-socks5/socks5.lua /home/username/nginxdpi/lualib/resty/ cp /home/username/build/lua-struct/src/struct.lua /home/username/nginxdpi/lualib/
Далее отредактируйте /scripts/startDpi.sh:
- Измените eth0 на ваш интерфейс
- Измените /opt/nginxdpi/bin/openresty и /opt/nginxdpi/cfg/nginx.conf на ваш путь
- Замените 127.0.0.1 и 9050 на ваш SOCKS5 server (его мы настроим далее в статье)
- Также замените 192.168.1.1 на IP адрес вашего of the DNS сервера (если он у вас есть, если нет, то можете, напимер написать 1.1.1.1 или 8.8.8.8)
Этап второй: настройка TOR
Установите тор и откройте файл конфигурации:
sudo apt install tor sudo nano /etc/tor/torrc
Вставьте в файл следующие настройки и замените 192.168.1.1 на адрес вашего raspberry pi:
SocksPort 192.168.1.1:9050 SocksPort 127.0.0.1:9050 SocksPolicy accept 192.168.1.0/24 RunAsDaemon 1 DataDirectory /var/lib/tor VirtualAddrNetwork 10.0.0.0/10 AutomapHostsOnResolve 1 TransPort 9040 DNSPort 192.168.1.1:9053
Этап третий: установка golang
Установить golang вы можете следуя оффициальному гайду
Этап четвёртый: заключительные действия
Откройте scripts/startDefaultDns.sh и замените 192.168.1.1:53 на ваш статический DNS
Откройте scripts/startTorDns.sh и замените 192.168.1.1:9053 на DNS вашего TOR
Этап пятый: запуск
Вы можете стразу запустить скрипт командой
Либо скомпилировать файл для более быстрой работы
Зайдите на web панель по адресу ip_your_raspberrypi:8080
- Включение и выключение DPI: Полностью включает и выключает маршрутизацию
- Маршрутизация добавленных пользователем сайтов и подсетей через тор
- Использование DNS от тора, возможность заходить на .onion сайты
- Маршрутизация всех заблокированных в России подсетей через тор
- Использование правила ‘MASQURADE’ в iptables для создания NAT
- Маршрутизация всего трафика через тор
Вам остаётся сделать ваш raspberry pi шлюзом в настройках сети телефона или компьютера и пользоваться.
Спасибо за внимание
На этом все! Спасибо всем, кто дочитал статью.