A lightweight, dependency-free native HTTP + SOCKS5 outproxy with a JavaScript-free web statistics page.
Source: https://github.com/freeacetone/outproxy-eagle
This is a from-scratch C++20 rewrite of the original Qt-based 3proxy-eagle.
It no longer wraps an external 3proxy process — the proxy cores are
implemented natively on top of standalone Asio,
and the web UI uses the header-only Crow framework.
The result is a single self-contained binary that links only
libc/libstdc++/pthread.
- HTTP proxy (
CONNECTtunnels + plain absolute-form forwarding) - SOCKS5 proxy (CONNECT, domain/IPv4/IPv6 targets)
- Rule-based routing to parent proxies by domain suffix, exact host, or CIDR — or direct connection via system DNS
- Hostnames are passed to SOCKS5/HTTP parents verbatim (never resolved locally — "fakeresolve")
- Public by design: no authentication
- JS-free web UI: today/total RX-TX traffic, active connection count, a "since your last visit" figure (cookie), and an editable Information box (donation info, config examples, ...)
- Simple logging: plain-text access log with size rotation + periodic counter
persistence (
state.json) that survives restarts
With no config file, the built-in defaults are:
| Listener | Bind |
|---|---|
| SOCKS5 | 0.0.0.0:1080 |
| HTTP | 0.0.0.0:3128 |
| Web UI | 127.0.0.1:8161 |
Routing:
| Pattern | Destination |
|---|---|
*.onion |
Tor (socks5 127.0.0.1:9050) |
*.i2p |
i2pd (http 127.0.0.1:4444) |
* |
direct (system DNS, no parent) |
Requirements: a C++20 compiler, CMake ≥ 3.16, and libasio-dev
(standalone Asio). Crow is vendored in third_party/crow_all.h.
sudo apt install build-essential cmake libasio-dev
cmake -B build
cmake --build build -jThe binary is build/outproxy-eagle.
A prebuilt Debian package for Debian 13 (trixie) is attached to each
release — built
automatically by the build-deb GitHub Action. (Debian 12 ships an Asio too old
for this code; build from source there.)
sudo apt install ./outproxy-eagle_2.0.0_trixie_amd64.deb # enables & starts the service
sudoedit /etc/outproxy-eagle/eagle.conf
sudo systemctl restart outproxy-eagle # apply your configInstalling enables and starts the service automatically (with the shipped default config); upgrading restarts it if it was running. Removal stops and disables it.
The package installs the binary to /usr/bin, a config to
/etc/outproxy-eagle/eagle.conf (a conffile), web assets to
/usr/share/outproxy-eagle/web, and the systemd unit. Both the config and
the web assets are registered as dpkg conffiles, so an upgrade never clobbers
edits you made to them — modified files are kept (a new packaged version, if
any, lands beside them as *.dpkg-dist); untouched files are updated normally.
To build a package
yourself: cmake -B build -DCMAKE_INSTALL_PREFIX=/usr && cmake --build build && (cd build && cpack -G DEB).
The application version is taken from the git tag at build time.
./build/outproxy-eagle # built-in defaults
./build/outproxy-eagle -c eagle.confCopy eagle.conf.example to eagle.conf to customize. See that file for the
full directive reference.
A hardened systemd unit is provided in systemd/outproxy-eagle.service; its
header comment lists the install steps (binary, config, web/ directory).
The web/ directory (configurable via set webdir) is served as-is:
web/index.html— the page template. Placeholders{{TITLE}},{{ACTIVE}},{{DAILY_UP}},{{DAILY_DOWN}},{{TOTAL_UP}},{{TOTAL_DOWN}},{{TRAFFIC_LINE}},{{VERSION}}and{{INFORMATION}}are substituted on render.web/style.css— theme; edit or replace freely.web/information.html— optional; its full HTML is injected as an Information box. Delete it to hide the box.- Any other file in
web/is downloadable directly.
If web/index.html is missing, a built-in template is used.
Serve the web UI behind nginx with TLS for public exposure; bind it to
127.0.0.1(the default).
GPLv3 (c) 2022-2026, acetone.