Я ios-разработчик и помимо того, что крашу кнопки, мне ещё надо json-ы перекладывать по сети. Девайс – не браузер, тут веб-инспектор не откроешь, breakpoint'ы на всё не поставишь, да и неудобно это. Удобно включить прокси на всю систему в девайсе и смотреть вообще за всем, что он делает.
Такой способ помимо очевидных удобств также обладает и очевидными недостатками:
- теперь видно больше, чем нужно – сотни приложух хотят в фоне что-нибудь скачать. Прокси умеют это всё фильтровать, показывая только то, что нужно, но было бы здорово вообще не проексировать, что не нужно
- некоторые вредные приложухи, вроде инстаграма и ютуба, отказываются работать даже в условиях прозрачного прокси, даже без внедрения в tls траффик.
- Если забыть выключить настройку прокси, отправить ноут в спячку или выключить прокси-приложуху, то на мобиле будто выключили интернет – он же всё ещё пытается ходить через прокси
Идея
В древние времена дикого интернета Netscape navigator придумал proxy-autoconfiguration настройку. Она позволяет пользователю задать только одну url-строку, а сервер на той стороне будет решать, кому через какую прокси ходить на какой сайт. Забавно, что файл, который скачивает система или браузер – это js файл с единственной функцией FindProxyForURL
, а она уже решает, какой url через какую прокси отправлять. То есть сервер только файл отдаёт, а на самом деле решение просходит уже 100% на девайсе. Для целей privacy в контексте этой функции недоступна сеть и файлуха, ну оно и логично.
По случаю в Новосибирске был мой товарищ и мы устроили микрохакатон у меня дома часа на 4, где фактически я проверял идеи, а товарищ программировал. С тех пор мы выложили это в паблик, наросли какие-то мелочи.
Всратый UI 💩
В целом интерфейс решает 80% всех потребностей, что мне нужны от такой приложухи, и этого достаточно. Один раз забил ссылку во все девайсы (одинаковая для всех девайсов, потому что по IP клиента определяет) и сидишь наруливаешь через веб-интерфейс. Новые правила добавляются сверху в форме, повторять старые можно по кнопочке, ссылка для вставки в настройки девайса в самом низу. Правила применяются с некоторой задержкой (кэш на пять минут), обычно проще передёрнуть WiFi.
Проблемы
Дома у меня всё работало хорошо, но на работе эту приложуху админы поселили в docker swarm и там оно почему-то за натом оказалась, в итоге приложуха не видела настоящие айпишки, даже если я делал port host mode. ХЗ почему, мне сетап сворма вообще недоступен, да и вообще я айфонщик. Короче задеплоил внутри сети без всяких свормов, одним докер-контейнеров и живу счастливо. Расскажите, где я накосячил?
Будущее
Идей-то куча, но после бритвы Оккама остаются одна-две. Частично они залоганы в Projects на самом гитхабе, частично живут в моей голове записной книжке. Из прикольного – можно через DHCP раздавать WPAD-инструкцию, чтобы все девайсы сами прописывали мой proxy-планировщик и использовали его. Но на работе количество девайсов вменяемое, чтобы этим не заморачиваться :)
Ах, да. Монетизации нет и вообще опенсурс. Делалось для себя, но может кому ещё вылечит такую же боль. Приходите ставить звёздочки в гитхаб и подписываться на канал меня. Пулл реквесты также приветствуются – я всё таки ненастоящий сварщик ¯\_(ツ)_/¯
Ссылка на проект: https://github.com/mandarin-ru/proxy-scheduler
Мой гитхаб: https://github.com/ReDetection