Wi-Fi через прокси без шума и пыли (почти)
Если раздать Wi-Fi через VPN задача простая и решаемая, вот даже статья «WiFi-портал в Россию» недавно вышла, то с прокси дело обстоит чуть сложнее, нужно немного костылей и напильников, а так же замечательное ПО под названием tun2socks.
Но, в отличие от VPN, прокси дешевле, и если нужно тестировать мобильные устройства с разных геолокаций — то прокси будет неплохим выходом. Конечно, существуют готовые решения, такие как Double SSH Tunnel Manager и Raspberry с прошивкой «Linux Mars», но мы, как водится, пойдём своим путём, да и готовые решения выше предназначены для другого.
Disclaimer. Статья пишется больше для себя, как заметки на полях, поэтому подробного мануала тут не будет. Тем не менее, материал может быть полезен и неограниченному кругу лиц, кто захочет реализовать самостоятельно. Понадобятся небольшие знания по сетям и линуксам.
Немного за технологию
Для работы с прокси будем использовать такую славную вещь, как tun2socks. На хабре уже была статья про это ПО (настоятельно рекомендую к ознакомлению), где рассказывается как настроить шлюз через прокси на Linux или Windows машине. Я же расскажу чуть подробнее, как настроить такой шлюз на роутере.
- Роутер на OpenWrt или роутер, который можно прошить в OpenWrt (я тестировал на незабвенном Tp-Link TL-MR3020 и на не менее незабвенном MikroTik hAP ac²). Помимо работы OpenWrt от роутера понадобится 128 и более мегабайт оперативной памяти и столько же места на внутреннем накопителе — или же возможность установить внешний.
- Под внешний накопитель вполне подойдёт обычная usb-флешка или sd-карточка минимального размера. Я экспериментировал с древней флешкой на 4гб. Для ценителей — usb-модем с sd-карточкой:)
- Прокси-провайдер (предпочтительнее socks5 c поддержкой udp)
- Немного свободного времени
Прошивка роутера
Берём нашу модель и идём на сайт OpenWrt, дальше смотрим-курим поддержку и мануалы по установке. Например, для hAP ac² применимы стандартные методы прошивки для микротиков — https://openwrt.org/toh/mikrotik/common
Подробно расписывать я не буду, но небольшая памятка-TL;DR для микротиков — копируем лицензионный ключ к себе (на всякий случай) выставляем приоритет загрузки на сеть, по BOOTP при помощи например tftp32 грузим sysupgrade.bin, затем при помощи вебморды или ssh+scp прошиваем уже ось initramfs.bin. Если понадобилось вернуть RouterOS, то можно это сделать через netinstall, или через утилиту командной строки rbcfg.
Считаем что роутер у нас перепрошит в OpenWrt. Для роутеров с небольшой внутренней памятью (16мб в hAP ac²!) понадобится перенос системы на внешнюю флешку. Инструкцией в сети полно, поэтому опять же кратенько:
- форматируем флешку — можно сделать сразу два раздела, под систему и swap. Под винду я использовал Minitool Partition Wizard. Выбор файловой системы — по вкусу, я вот взял ext4. По размерам — хватит минимального, я подкинул на swap 256мб, под систему — 1Гб
- ставим в OpenWrt нужные пакеты (роутер надо будет выпустить в инет):
opkg update opkg install block-mount kmod-usb-core kmod-usb2 kmod-usb-ohci kmod-usb-storage kmod-fs-ext4
- Ротуер в ребут, через dmseg можно проверить, что флешка нашлась. Формируем fstab, можно через block-detect (block detect >> /etc/config/fstab), приводим fstab примерно к такому виду (честно стянуто с инета):
config 'global' option anon_swap '0' option anon_mount '1' option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '0' option from_fstab '1' config 'swap' option uuid 'b91e3bff-9e15-4fd0-82e7-25d75d889ce6' option enabled '1' config 'mount' option target '/overlay' option uuid '7ee9d192-239f-4401-b749-3fb60b4f8eaa' option fstype 'ext4' option options 'rw,sync' option enabled '1'
mkdir /mnt/sda2 mount /dev/sda2 /mnt/sda2 tar -C /overlay -cf - . | tar -C /mnt/sda2 -xf - umount /mnt/sda2 rm -rf /mnt/sda2
Теперь у нас есть роутер, на OpenWrt и с достаточным свободным местом. Едем дальше.
Магия tun2socks
Берём tun2socks под нужную нам платформу из гитхаба разработчика — https://github.com/xjasonlyu/tun2socks/releases. Например, для нашего hAP ac² нужна будет arm-архитектура. Я закинул бинарник сюда — /usr/bin/tun2socks
Ставим необходимые пакеты:
opkg update opkg install ip-full kmod-tun
Создаём таблицу маршрутизации (в неё будем пихать весь трафик, который хотим завернуть в прокси):
echo -e '\n300 tun2socks\n' >> /etc/iproute2/rt_tables
Формируем файл для init.d, чтобы tun2socks работал как сервис. У меня он вышел примерно такой (/etc/init.d/tun2socks):
#!/bin/sh /etc/rc.common START=90 USE_PROCD=1 #PROCD_DEBUG=1 #имя туннельного интерфейса tun_name='t2s0' #адрес туннельного интерфейса tun_ip='10.254.1.1' #самое главное - адрес прокси proxy='socks5://192.168.88.201:123456' loglevel='warn' #запускаем tun2socks tun2socks() < procd_open_instance procd_set_param command /usr/bin/tun2socks -device tun://$tun_name -proxy $proxy -loglevel $loglevel procd_close_instance >#правила iptables при старте rulesup()< iptables -t mangle -N tun2socks #отправляем всё, что с бриджа в прокси iptables -t mangle -I PREROUTING -i br-lan -j MARK --set-mark 3 #отправляем https трафик в прокси iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 3 #запускаем туннельный интерфейс ip tuntap add dev $tun_name mode tun ip addr add $/24 dev $tun_name ip link set dev $tun_name up #формируем таблицу маршрутизации ip route add default dev $tun_name table 300 ip rule add fwmark 3 lookup 300 #iptables -A forwarding_lan_rule -o $tun_name -j ACCEPT > #подчищаем правила, когда стопим сервис rulesdown() < ip rule del fwmark 3 lookup 300 iptables -t mangle -D PREROUTING -i br-lan -j MARK --set-mark 3 iptables -t mangle -D OUTPUT -p tcp --dport 443 -j MARK --set-mark 3 ip tuntap del dev $tun_name mode tun >start_service() < rulesup tun2socks >service_stopped()
Теперь можно включить и запустить сервис, и наслаждаться вайфаем через прокси (настройку собственно вайфая на OpenWrt тоже пожалуй оставим за кадром):
/etc/init.d/tun2socks enable /etc/init.d/tun2socks start
Из нюансов — для Tp-Link мне пришлось брать не самый свежий релиз tun2socks, свежий выпадал в ошибку. Зато если на роутере есть кнопка или переключатель — можно повесить на неё старт-стоп сервиса:) Для Tp-Link TL-MR3020 это может выглядеть, как скрипт /etc/hotplug.d/button/00-button :
#!/bin/sh if [ $ACTION == "released" ] ; then if [ $BUTTON == "BTN_1" ] ; then /etc/init.d/tun2socks stop #logger "Slider 3G" elif [ $BUTTON == "BTN_0" ] ; then /etc/init.d/tun2socks start #logger "Slider WISP" fi elif [ $BUTTON == "BTN_0" ] || [ $BUTTON == "BTN_1" ] ; then if grep -qe "sw1.*in hi" /sys/kernel/debug/gpio ; then if grep -qe "sw2.*in hi" /sys/kernel/debug/gpio ; then #logger "Slider AP" fi fi fi
В принципе всё, за некоторым исключением, про которое поговорим отдельно.
Утечка DNS
Внимательный читатель заметит, что я зачем-то кидаю https-трафик от роутера в прокси тоже. Делается это по причине, чтоб не «подтекал» DNS, что обнаруживается всякими прокси-детекторами. Конечно, DNS работает по UDP:53.. А вот DoH (DNS over HTTPS) нет.
Поэтому не забудем включить поддержку DoH на нашем роутере, поставив соответствующий пакет:
opkg update opkg install https-dns-proxy
В стандартных настройках используются DNS-серверы от Google и Cloudflare. Вы можете настроить на любой другой сервер, и, выбрав определённые IP серверов, маркировать трафик до них для отправки в прокси. Я же для простоты промаркировал весь https 🙂
Не хочу прошивать Микротик, он классный
С появлением RouterOS 7 и доработки функционала контейнеров в ней, можно и не сносить прекрасный RouterOS, а запихать tun2socks в контейнер. Оно работает, но с оговорками (поскольку создаётся tap-интерфейс, в процессе дебага может понадобится поребутать роутер). Контейнер можно приготовить на основе образа от разработчика — https://hub.docker.com/r/xjasonlyu/tun2socks , изменив в нём работу с таблицами маршрутизации и iptables по вкусу, и потом силами микротика и его nat (или route rule) отправлять нужный трафик в контейнер. Подробностей не будет, поскольку вариант хоть и занятный, но не каждый MikroTik умеет в контейнеры, да и задачу реализовывал ещё до поддержки контейнеров в ROS7, поэтому дальше так сказать MVP 🙂 реализовывать не стал.
Но если кому захочется — документация о работе с контейнерами — https://help.mikrotik.com/docs/display/ROS/Container, в общем случае понадобится одна переменная среды — PROXY. Из коробки работать не будет, нужно адаптировать образ, ну и конечно понадобится флешка под хранилище — куда без неё:)
Статья вышла немного сумбурной, но надеюсь может быть полезной кому-то, кроме меня. Удачного проксирования!
Раздача Socks5 по Wi Fi Raspberry Pi
Добрый вечер ув. форумчане!
Нужна помощь в настройке Малинки.
Малинка используется в качестве роутера.
Задача: установить 3proxy с последующей раздачей Socks5 по Wi Fi, что бы другие устройства могли подключаться к этой точке доступа и «юзать» веб и приложения с IP Socks5 (dns должен быть от этого же Socks5).
Точка доступа уже настроена, но вот как настроить конфиг под 3proxy, сделать переадрессацию на порт 3proxy и подтянуть dns, возникает проблема, т. к. не до конца понимаю, как создавать правила для iptables.
Добрый человек, протяни руку помощи на небезвозмездной основе)))
GoodOkk
New member
Чтоб сам весь трафик от wifi заворачивался в Socks5? Боюсь такого не выйдет, или работать будет от силы 50% приложений. Мб нужно хттп только траффик заворачивать и пропускать через сокс, то возможно, но iptables на сколько знаю не умеет переадресовывать пакеты+еще заворачивать их в сторонние протоколы. Можно только заворачивать все в другого демона, который бы разбирал и понимая, заворачивал и переправлял траф
Apple_B
New member
Чтоб сам весь трафик от wifi заворачивался в Socks5? Боюсь такого не выйдет, или работать будет от силы 50% приложений. Мб нужно хттп только траффик заворачивать и пропускать через сокс, то возможно, но iptables на сколько знаю не умеет переадресовывать пакеты+еще заворачивать их в сторонние протоколы. Можно только заворачивать все в другого демона, который бы разбирал и понимая, заворачивал и переправлял траф
Если правильно понимаю, то это делается как раз таки через iptables, малинка берет интернет с модема/роутера (через юсб), далее идет редирект на порт 3proxy (как раз через iptables) + настройка dns, а малинка уже в свою очередь раздает Wi Fi c ипом сокса. Подключенные устройства выходят в «свет» с ипом этого сокса (без каких доп манипуляций), хоть через web, хоть через apk.
KaPToHHbIu_EHoT
Если правильно понимаю, то это делается как раз таки через iptables, малинка берет интернет с модема/роутера (через юсб), далее идет редирект на порт 3proxy (как раз через iptables) + настройка dns, а малинка уже в свою очередь раздает Wi Fi c ипом сокса. Подключенные устройства выходят в «свет» с ипом этого сокса (без каких доп манипуляций), хоть через web, хоть через apk.
ХМ.
Делается «ЭТО» (я имею ввиду заворачивание трафика в socks5), возможно, и с помощью iptables. По аналогии с заворачиванием трафика в локальный tor-socks.
Но вот только выбор программы 3proxy — сомнителен.
Ведь программа 3proxy предназначена для того, чтобы поднять сокс или прокси.
Таким образом, если ты установишь 3proxy на свою малинку и поднимешь на ней сокс или прокси, то ip адрес на ней будет тот, что выдаёт твой провайдер. Какой в этих действиях смысл ? Ведь подмены ip не произойдёт !
Может быть ты планируешь сдавать свой «малиновый » сокс в аренду ? То есть предоставлять доступ к нему «третьим » лицам ? Чтобы не ты, а кто-то другой маскирован свой внешний ip и выдавал за твой ?
Как расшарить прокси на вай-фай?
Всем привет. Сразу оговорюсь что в теме сетей мой уровень ближе к нубу, по этому молю об объяснении на пальцах:)
Имеем:
1. ПК с возможность раздачи wi-fi
2. Пачку купленных годных проксей
3. Proxifier клиент (может еще что-то?)
4. Пару телефонов и компов, которые хотят заполучить IPшник прокси.
Вопрос:
Как запустить имеющуюся проксю на wi-fi?
Средний 2 комментария
Попробуйте четко и ясно изложить что конкретно вам нужно, и в чем проблема.
В вопросе бред какой-то, абсолютно непонятный.
АртемЪ, Я так понял, ТС хочет свои телефоны и компы по wifi подцепить к другому компу, который выходит в тырнет через купленые прокси 🙂
Кто выступает в роли шлюза? ПК с wifi или есть до него роутер?
На роутере(или на ПК если он шлюз) надо поднять подключения к проксям.
И далее маршрутизацией завернуть трафик от определенных клиентов на ip адрес прокси.
travelator, Грубо гооворя. Роутер(шлюз) подключаешь к проксям.
Далее есть понятие роутинг. С помощью него заставляешь клиента ходить не через обычный интернет, а через прокси.
Что то типа route add 192.168.0.2(адрес клиента) перенаправить >> на ip прокси.
Напиши на чем у тебя ПК с wifi. Там винда?