🇬🇧 English · 🇷🇺 Русская версия
Turn a global website into a local one. A single-binary reverse proxy (Go, zero dependencies) that serves a remote site from your machine — minting a TLS certificate per hostname on the fly, rewriting it to look native, and optionally chaining everything through BurpSuite. With multi-host mode even cross-host SSO/OAuth flows stay local.
Built for offensive-security work and local web testing.
browser ──TLS──▶ glocal (localhost) ──▶ [BurpSuite] ──▶ real site(s)
▲ mints a cert per SNI ▲ optional intercept
│ from its own CA
- Reverse-proxy any site —
-target https://example.com, browse it athttps://localhost:8443. - On-the-fly TLS — own CA, a leaf certificate minted and cached per SNI hostname.
- Multi-host —
-domain+-local-baseproxy several upstream hosts so SSO/OAuth flows never leave localhost. - Bidirectional rewriting — body, redirects, cookies and
Origin/Refererrewritten both ways. - BurpSuite integration —
-burproutes all upstream traffic through Burp. - Header control, HSTS/CSP/CORS, JS injection, full request/response dumps.
- WebSocket & streaming pass through transparently.
Download the archive for your platform (Linux amd64/arm64, macOS, Windows)
from the Releases
page, extract it, and put the binary on your PATH:
tar -xzf glocal_vX.Y.Z_linux_amd64.tar.gz
sudo install -m 0755 glocal_vX.Y.Z_linux_amd64/glocal /usr/local/bin/glocalRequires Go 1.25.11+.
git clone https://github.com/Mikkkin/reverse-proxy-vibehacking
cd reverse-proxy-vibehacking
go build -o glocal ./srcCross-compile:
GOOS=linux GOARCH=amd64 go build -o glocal-linux-amd64 ./src # AMD64
GOOS=linux GOARCH=arm64 go build -o glocal-linux-arm64 ./src # ARM# 1. Create the CA and trust it once (needed for local HTTPS).
glocal ca install
# 2. Serve example.com locally over HTTPS on port 8443, fully localised.
glocal -target https://example.com -port 8443 -rewrite
# 3. Open https://localhost:8443 in your browser.Plain HTTP target, no TLS:
glocal -target http://neverssl.com -http -port 8080 # browse http://localhost:8080A site's flow often spans several hosts — e.g. an app on job.example.com that
logs in through an identity provider on auth.example.com. List every host so the
whole flow stays local instead of bouncing you onto the real provider:
glocal -target https://job.example.com/login \
-domain auth.example.com \
-local-base 127.0.0.1.sslip.io \
-port 8443 -rewrite
# open https://127.0.0.1.sslip.io:8443/login| Flag | Meaning |
|---|---|
-target |
The main upstream. Mapped to -local-base. |
-domain <host> |
Additional upstream to proxy (repeatable). Mapped to <host-with-dashes>.<local-base>. |
-local-base <host> |
Shared local suffix. Must resolve to 127.0.0.1, including subdomains. |
Use a wildcard-DNS base like 127.0.0.1.sslip.io (anything.127.0.0.1.sslip.io → 127.0.0.1) so subdomains work with no /etc/hosts editing. A bare IP is rejected.
Every host in the flow must be listed with -domain; an unmapped host is fetched
directly and escapes the local copy.
glocal ca install detects your OS and installs the CA (asks for sudo/admin):
security add-trusted-cert on macOS, update-ca-certificates/update-ca-trust
on Linux. Other helpers:
glocal ca path # print the CA certificate path
glocal ca print # print the CA certificate (PEM)
glocal ca generate # create the CA without installing itFirefox / Chrome on Linux keep their own NSS trust store — import the CA via the browser's certificate settings if a site still warns.
-burp routes the upstream leg (glocal → real sites) through Burp:
# Burp listening on 127.0.0.1:8080, then:
glocal -target https://example.com -burp -rewriteIt auto-forces HTTP/1.1 and -insecure (Burp re-signs upstream TLS). Keep
verification on by passing Burp's CA, or change the port:
glocal -target https://example.com -burp -upstream-ca ~/burp-ca.pem
glocal -target https://example.com -burp -burp-addr 127.0.0.1:8081Check it: the banner shows upstream : via proxy http://127.0.0.1:8080, and the
requests appear in Burp's Proxy → HTTP history.
Run glocal help for the full reference.
| Group | Flags |
|---|---|
| Target & listener | -target -listen -port -tls -http -local-host |
| Multi-host | -domain -local-base |
| TLS / certs | -cert-dir -cert -key |
| Burp / upstream | -burp -burp-addr -upstream-proxy -upstream-ca -insecure/-k -http2 |
| Localisation | -rewrite -strip-csp -keep-hsts -inject -cors |
| Headers | -header -response-header -host -user-agent |
| Behaviour / logs | -timeout -verbose/-V -silent -log-file -dump |
| CA subcommands | glocal ca generate|install|path|print |
- Certificate warning →
glocal ca installand restart the browser. 502 upstream request failed→ the upstream (or Burp, with-burp) is unreachable.- Bounced to the real site during login → add the other host with
-domain(see Multi-host mode). -local-base ... is a bare IP→ use127.0.0.1.sslip.ioorlocalhost.- Page half-broken after
-rewrite→ try without it, or add-strip-csp. Brotli bodies pass through unmodified.
MIT.
Превращает глобальный сайт в локальный. Реверс-прокси в одном бинарнике (Go, без зависимостей): отдаёт удалённый сайт с твоей машины, выпускает TLS- сертификат под каждый хост на лету, переписывает его «под локальный» и при желании гонит весь трафик через BurpSuite. С multi-host режимом даже межхостовый SSO/OAuth остаётся локальным.
Сделан для offensive-security и локального веб-тестирования.
браузер ──TLS──▶ glocal (localhost) ──▶ [BurpSuite] ──▶ реальные сайты
▲ cert под каждый SNI ▲ опциональный перехват
│ из своего CA
- Реверс-прокси любого сайта —
-target https://example.com, открываешь наhttps://localhost:8443. - TLS на лету — свой CA, leaf-сертификат минтится и кэшируется под каждый SNI.
- Multi-host —
-domain+-local-baseпроксируют несколько хостов, чтобы SSO/OAuth не уходил с localhost. - Двустороннее переписывание — тело, редиректы, cookie и
Origin/Refererправятся в обе стороны. - Интеграция с Burp —
-burpгонит весь upstream-трафик через Burp. - Контроль заголовков, HSTS/CSP/CORS, инъекция JS, дамп запросов/ответов.
- WebSocket и стриминг проходят насквозь.
Скачай архив под свою платформу (Linux amd64/arm64, macOS, Windows) со
страницы Releases,
распакуй и положи бинарь в PATH:
tar -xzf glocal_vX.Y.Z_linux_amd64.tar.gz
sudo install -m 0755 glocal_vX.Y.Z_linux_amd64/glocal /usr/local/bin/glocalНужен Go 1.25.11+.
git clone https://github.com/Mikkkin/reverse-proxy-vibehacking
cd reverse-proxy-vibehacking
go build -o glocal ./srcКросс-компиляция:
GOOS=linux GOARCH=amd64 go build -o glocal-linux-amd64 ./src # AMD64
GOOS=linux GOARCH=arm64 go build -o glocal-linux-arm64 ./src # ARM# 1. Создать CA и один раз ему довериться (нужно для локального HTTPS).
glocal ca install
# 2. Отдавать example.com локально по HTTPS на 8443, с полной локализацией.
glocal -target https://example.com -port 8443 -rewrite
# 3. Открыть https://localhost:8443 в браузере.Цель по обычному HTTP, без TLS:
glocal -target http://neverssl.com -http -port 8080 # открываешь http://localhost:8080Поток сайта часто размазан по нескольким хостам — например, приложение на
job.example.com, которое логинится через провайдера на auth.example.com.
Перечисли все хосты, чтобы поток остался локальным, а не выкидывал на реального
провайдера:
glocal -target https://job.example.com/login \
-domain auth.example.com \
-local-base 127.0.0.1.sslip.io \
-port 8443 -rewrite
# открой https://127.0.0.1.sslip.io:8443/login| Флаг | Смысл |
|---|---|
-target |
Главный апстрим. Маппится на -local-base. |
-domain <host> |
Дополнительный апстрим (повторяемый). Маппится на <хост-через-дефисы>.<local-base>. |
-local-base <host> |
Общий локальный суффикс. Должен резолвиться в 127.0.0.1, включая поддомены. |
Используй wildcard-DNS базу вроде 127.0.0.1.sslip.io (что-угодно.127.0.0.1.sslip.io → 127.0.0.1) — поддомены работают без правки /etc/hosts. Голый IP отклоняется.
Каждый хост потока надо указать через -domain; незамапленный хост браузер дёргает
напрямую — и он утекает из локальной копии.
glocal ca install определяет ОС и ставит CA (спросит sudo/админ):
security add-trusted-cert на macOS, update-ca-certificates/update-ca-trust
на Linux. Прочие команды:
glocal ca path # путь к сертификату CA
glocal ca print # сертификат CA (PEM)
glocal ca generate # создать CA без установкиFirefox / Chrome на Linux держат своё NSS-хранилище — импортируй CA через настройки сертификатов браузера, если сайт всё ещё ругается.
-burp пропускает upstream-плечо (glocal → реальные сайты) через Burp:
# Burp на 127.0.0.1:8080, затем:
glocal -target https://example.com -burp -rewriteАвтоматически форсит HTTP/1.1 и -insecure (Burp пере-подписывает upstream-TLS).
Чтобы оставить проверку — передай CA от Burp, либо смени порт:
glocal -target https://example.com -burp -upstream-ca ~/burp-ca.pem
glocal -target https://example.com -burp -burp-addr 127.0.0.1:8081Проверка: в баннере — upstream : via proxy http://127.0.0.1:8080, а запросы
появляются в Burp Proxy → HTTP history.
Полный справочник — glocal help.
| Группа | Флаги |
|---|---|
| Цель и слушатель | -target -listen -port -tls -http -local-host |
| Multi-host | -domain -local-base |
| TLS / сертификаты | -cert-dir -cert -key |
| Burp / апстрим | -burp -burp-addr -upstream-proxy -upstream-ca -insecure/-k -http2 |
| Локализация | -rewrite -strip-csp -keep-hsts -inject -cors |
| Заголовки | -header -response-header -host -user-agent |
| Поведение / логи | -timeout -verbose/-V -silent -log-file -dump |
| Подкоманды CA | glocal ca generate|install|path|print |
- Предупреждение о сертификате →
glocal ca installи перезапусти браузер. 502 upstream request failed→ апстрим (или Burp при-burp) недоступен.- После входа выкидывает на реальный сайт → добавь другой хост через
-domain(см. Multi-host режим). -local-base ... is a bare IP→ используй127.0.0.1.sslip.ioилиlocalhost.- Страница частично сломана после
-rewrite→ попробуй без него или добавь-strip-csp. Тела в brotli проходят без изменений.
MIT.