Довелось повозиться с особенной сборкой OpenWRT под конкретную задачу. Вообще всё шло довольно неплохо, до тех пор, пока не начало идти плохо. Вкратце о том, что надо было сделать: прокси и для http и для https, с возможностью фильтрации трафика, с возможностью отправлять часть запросов через родительский прокси. Всё должно быть шифрованное и секурное по самое "не балуйся" и вообще. Очень краткая выжимка для меня же:
В OpenWRT squid древний, как Стоунхендж мамонта. К сожалению, он не поддерживает TLS1.2, что как известно, очень-очень плохо. Ещё в нём не реализован ssl_bump, в связи с чем было принято решение попробовать собрать squid поновее. Хвала высшим силам, у меня в прошлом уже был опыт кросс-компиляции, включая Canadian cross, так что в итоге кое-что у меня получилось. Но кое-что не получилось. Для начала надо прочитать краткое пособие от OpenWRT, освежить или приобрести знания. Это очень важный и полезный документ.
Из минусов: squid 3.1 огромный просто. И с зависимостью от libstdc++. И нихрена в нём ssl_bump нормально не работает с вышестоящим прокси, нашёл у сквидоделов, что надо версию 3.3 и выше.
Ещё из минусов: патчи для старого squid никуда не годятся. С другой стороны, нужен только один патч (точнее, даже фрагмент патча). Я его переобозвал:
[msi] ❯ cat 007_baron_cf_gen.patch diff -U2 -r squid-3.1.23/src/Makefile.in squid-baron/src/Makefile.in --- squid-3.1.23/src/Makefile.in 2013-01-09 06:15:53.000000000 +0400 +++ squid-baron/src/Makefile.in 2015-07-13 00:18:36.110256087 +0300 @@ -4818,5 +4818,5 @@ # cf_gen builds the configuration files. cf_gen$(EXEEXT): $(cf_gen_SOURCES) $(cf_gen_DEPENDENCIES) - $(HOSTCXX) -o $@ $(srcdir)/cf_gen.cc -I$(srcdir) -I$(top_builddir)/include/ -I$(top_builddir)/src + g++ -o $@ $(srcdir)/cf_gen.cc -I$(srcdir) -I$(top_builddir)/include/ -I$(top_builddir)/src # squid.conf.default is built by cf_gen when making cf_parser.cci
Почему так? Чёрт его знает, по идее HOSTCXX и должен быть g++. Но в общем, после моего хака — работает как надо.
Ещё оказалось, что в код закрался кусочек с warning'ом. А warning'и приравняны к ошибкам. В общем, пришлось удалить строчку с неиспользуемой переменной.
Ещё оказалось, что сборка не идёт нормально, ipk-файл у меня не создаётся, пришлось сделать make DESTDIR=/tmp/squid3 install и взять файлы оттуда.
Для прозрачного SSL прокси приходится использовать примерно такую конструкцию:
https_port 3129 transparent cert=/etc/squid/server.crt key=/etc/squid/server.key
P.S. Если кто хочет собрать какой-то новый несуществующий пакет, стоит почитать этот пост на форуме.