Raspberry pi tor роутер

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:

Читайте также:  Настроить 2 роутера одна сеть

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 поддерживает такую возможность.

Читайте также:  Стандартные пароли роутеры wifi

Привожу пример настройки клиентской части 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

  1. Включение и выключение DPI: Полностью включает и выключает маршрутизацию
  2. Маршрутизация добавленных пользователем сайтов и подсетей через тор
  3. Использование DNS от тора, возможность заходить на .onion сайты
  4. Маршрутизация всех заблокированных в России подсетей через тор
  5. Использование правила ‘MASQURADE’ в iptables для создания NAT
  6. Маршрутизация всего трафика через тор

Вам остаётся сделать ваш raspberry pi шлюзом в настройках сети телефона или компьютера и пользоваться.

Спасибо за внимание

На этом все! Спасибо всем, кто дочитал статью.

Источник

Оцените статью
Adblock
detector