Жесть в OpenWRT, прозрачный https прокси

· На чтение уйдёт 2 минуты · (351 слово)

Довелось повозиться с особенной сборкой OpenWRT под конкретную задачу. Вообще всё шло довольно неплохо, до тех пор, пока не начало идти плохо. Вкратце о том, что надо было сделать: прокси и для http и для https, с возможностью фильтрации трафика, с возможностью отправлять часть запросов через родительский прокси. Всё должно быть шифрованное и секурное по самое "не балуйся" и вообще. Очень краткая выжимка для меня же:

В OpenWRT squid древний, как Стоунхендж мамонта. К сожалению, он не поддерживает TLS1.2, что как известно, очень-очень плохо. Ещё в нём не реализован ssl_bump, в связи с чем было принято решение попробовать собрать squid поновее. Хвала высшим силам, у меня в прошлом уже был опыт кросс-компиляции, включая Canadian cross, так что в итоге кое-что у меня получилось. Но кое-что не получилось. Для начала надо , освежить или приобрести знания. Это очень важный и полезный документ.

Из минусов: 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. Если кто хочет собрать какой-то новый несуществующий пакет, .

Полезное