smart-proxy - скрипт на bash запускающий SOCKS прокси и простой HTTP сервер со сгенерированным Proxy Auto-Configuration (PAC).
Изначально скрипт smart-proxy написан с целью запуска на Linux/Mac, но при необходимости может быть запущен в Windows поверх WSL или CygWin
PAC файл автоматически генерируется при запуске или вручную по мере необходимости из файла с хостами ${HOME}/.smart-proxy/hosts_list
PAC содержит домены и IP-адреса ресурсов, а также прокси-сервер, через который нужно точечно перенаправлять трафик по указанным ресурсам.
Идея с PAC не нова, и уже имеется немалоизвестный проект АнтиЗапрет чем и вдохновлен smart-proxy
Отличие от АнтиЗапрета заключается в использовании собственного прокси и пользовательских списков для проксирования.
Прокси SOCKS запускается поверх SSH туннеля. SSH как туннель выбран не случайно:
- Протокол SSH пока не блокируется
- Не требует сложной настройки
- SSH по умолчанию установлен на всех ОС из коробки
-
Генерируем ssh ключ без пароля:
$ ssh-keygen -t ed25519 -N "" -C 'smart-proxy' -f ${HOME}/.ssh/ed25519_smart-proxy
-
Копируем содержимое в ${HOME}/.ssh/ed25519_smart-proxy.pub в файл ~/.ssh/authorized_keys на удаленном сервере вручную или командой
$ ssh-copy-id -i ${HOME}/.ssh/ed25519_smart-proxy.pub ИМЯ_ПОЛЬЗОВАТЕЛЯ_ВАШЕГО_СЕРВЕРА@IP_АДРЕС_ВАШЕГО_СЕРВЕРА
-
В ${HOME}/.ssh/config добавляем конфиг:
Host smart-proxy HostName IP_АДРЕС_ВАШЕГО_СЕРВЕРА User ИМЯ_ПОЛЬЗОВАТЕЛЯ_ВАШЕГО_СЕРВЕРА IdentitiesOnly yes # используем авторизацию исключительно по ключу IdentityFile ~/.ssh/ed25519_smart-proxy.pub
-
Пытаемся подключиться по SSH:
$ ssh smart-proxy
Если всё в порядке, идём дальше; в противном случае разбираемся с SSH. Важно! Каждый раз при запуске скрипта нужно будет вводить пароль, если он установлен для ключа. В качестве выхода из ситуации можно использовать SSH-агент. Также можно использовать альтернативный файл настроек или другое имя ssh подключения. Подробности в Параметры конфигурации
- Склонируем репозиторий
$ git clone https://github.com/mukhumaev/smart-proxy && cd smart-proxy
- Инициализируем
$ ./smart-proxy init
Если у вас Linux, то после инициализации скрипт автоматически установится в ${HOME}/.local/bin/smart-proxy
, в противном случае необходимо самостоятельно установить скрипт в одну из директорий переменной ${PATH}
для запуска без указания полного пути
- Добавляем домены и IP адреса для проксирования согласно описанию
Настройка списка доменов и IP адресов для просирования
ниже - Запускаем скрипт
$ /path/to/smart-proxy start
- Настраиваем PAC согласно инструкции Настройка PAC
- Радуемся жизни
Домены и IP адреса для проксирования указываются в файле ${HOME}/.smart-proxy/hosts_list
.
Домены можно указывать с * тогда будут учтены все поддомены родительского домена. Пример hosts_list
для проксирования YouTube:
*.googlevideo.com
*.youtube.com
*.youtu.be
*.ytimg.com
*.ggpht.com
*.youtubei.googleapis.com
IP адреса настраиваются аналогично, только вместо * указывается подсеть. Пример для проксирования 2ip.ru по IP и подсети 172.19.12.16/29
:
195.201.201.32 # IP сайта 2ip.ru
172.19.12.16/29 # подсеть
При изменении файла ${HOME}/.smart-proxy/hosts_list
необходимо перезапускать smart-proxy ИЛИ пререгенерировать файлы:
$ /path/to/smart-proxy restart # команда перезапуска
$ /path/to/smart-proxy regen-files # перегенерировать файлы
Файл конфигурации по умолчанию расположен в ${HOME}/.smart-proxy/config
и позволяет задавать следующие переменные:
Переменная | Значение по умолчанию | Комментарий |
---|---|---|
PROXY_IP | 127.0.0.1 | IP адрес для запуска SSH прокси |
PROXY_PORT | 61942 | Порт для SSH прокси |
PROXY_AUTORESTART | true | Рестарт прокси при аварийном завершении |
FILES_GEN_AUTORESTART | false | Автоматически перегенерировать файлы для HTTP сервера при изменении файла с доменами или IP адресами |
FILES_GEN_INTERVAL | 10 | Интервал проверки файла на наличие изменений в секундах. Не используется при FILES_GEN_AUTORESTART=false |
IP_CHECKER_HOST | ifconfig.me | Внешний хост для проверки работы прокси. При обращении через curl должен возвращать IP адрес. Пример таких сервисов: 2ip.ru, eth0.me, icanhazip.com, api64.ipify.org, ipinfo.io/ip |
HTTP_SERVER_IP | 127.0.0.1 | IP адрес HTTP сервера |
HTTP_SERVER_PORT | 8080 | Порт для HTTP сервера |
SSH_CONFIG | true | Использовать SSH конфиг файл SSH_CONFIG_FILE для прокси |
SSH_CONFIG_FILE | ${HOME}/.ssh/config | Путь к SSH конфигу |
SSH_HOST | smart-proxy | Хост для организации SSH подключения. Если SSH_CONFIG=true то хост из конфига указанного в переменной SSH_CONFIG_FILE, в противном случае - хост для прямого подключения |
SSH_PORT | 22 | Порт SSH удаленного хоста. Не используется при SSH_CONFIG=true |
SSH_IDENTITY | ${HOME}/.ssh/id_rsa | SSH ключ для подключения к удаленному хосту. Не используется при SSH_CONFIG=true |
Ниже описаны инструкции для настройки PAC в браузерах и ОС.
Важно! Настройки, адреса и данные для подключения действительны для конфигурации по умолчанию. Значения могут отличаться, если переопределены переменные, указанные в Параметры конфигурации
- Установить расширение FoxyProxy
- Открыть настройки расширения FoxyProxy
- Перейти в: Настройки > Импортировать настройки > Import from URL
- Вставить ссылку http://127.0.0.1:8080/foxy_proxy.json
- Нажмите кнопку Импортировать настройки, затем Сохранить
- Нажмите на иконку FoxyProxy в панели задач браузера и выберите smart-proxy
- Перейдите в: Меню > Настройки > Основные > Настройки сети > Настроить.
- Вставьте ссылку http://127.0.0.1:8080/proxy.pac в поле "URL автоматической настройки прокси" (подробнее)
- Или воспользуйтесь расширением FoxyProxy и настройте по инструкции выше.
- Откройте Настройки > Сеть > Прокси
- Активируйте Сетевой прокси
- В выпадающем списке Конфигурация выберите Автоматически
- В поле URL конфигурации вставьте http://127.0.0.1:8080/proxy.pac
Аналогичная настройка через терминал:
$ gsettings set org.gnome.system.proxy mode 'auto'
$ gsettings set org.gnome.system.proxy autoconfig-url 'http://127.0.0.1:8080/proxy.pac'
- В меню Apple > Системные настройки выберите Сеть.
- Справа выберите сетевую службу, затем нажмите Подробнее
- Перейдите на вкладку Прокси
- Включите Автоконфигурацию прокси, затем введите адрес http://127.0.0.1:8080/proxy.pac.
- Нажмите ОК
- Откройте настройки: Пуск > Параметры > Сеть и Интернет > Proxy.
- Включите Использовать сценарий установки
- В поле Адрес скрипта введите адрес http://127.0.0.1:8080/proxy.pac и нажмите Сохранить
- Откройте настройки: Пуск > Параметры > Сеть и Интернет > Proxy.
- Выберите Настроить рядом с пунктом Использовать сценарий установки.
- В диалоговом окне Изменение скрипта установки включите опцию, введите адрес http://127.0.0.1:8080/proxy.pac и нажмите Сохранить.