WireGuard Obfuscator - simple obfuscator for WireGuard. Useful if your ISP/government blocks WireGuard traffic.
WireGuard Obfuscator - simple obfuscator for WireGuard. Useful if your ISP/government blocks WireGuard traffic.
WireGuard Obfuscator is a tool designed to disguise WireGuard traffic as random data or a different protocol, making it much harder for DPI (Deep Packet Inspection) systems to detect and block. This can be extremely useful if your ISP or government attempts to block or throttle WireGuard traffic.
Project Goals:
What it's NOT:
Table of Contents:
Originally built as a quick personal solution, this project has grown into a fully-featured tool with the following capabilities:
…
[main]
source-lport = 13255 target = 10.13.1.100:13255 key = love static-bindings = 1.2.3.4:12883:6670, 5.6.7.8:12083:6679 verbose = 2
[second_server] source-if = 0.0.0.0 source-lport = 13255 target = 10.13.1.100:13255 key = hate verbose = 4
…
AllowedIPs = 0.0.0.0/0
…
ini AllowedIPs = 0.0.0.0/0
You would use:
```ini
AllowedIPs = 0.0.0.0/1, 128.0.0.0/2, 224.0.0.0/3, 208.0.0.0/4, 192.0.0.0/5,
204.0.0.0/6, 200.0.0.0/7, 202.0.0.0/8, 203.128.0.0/9, 203.64.0.0/10,
203.32.0.0/11, 203.16.0.0/12, 203.8.0.0/13, 203.4.0.0/14, 203.2.0.0/15,
203.1.0.0/16, 203.0.128.0/17, 203.0.0.0/18, 203.0.64.0/19, 203.0.96.0/20,
203.0.120.0/21, 203.0.116.0/22, 203.0.114.0/23, 203.0.112.0/24,
203.0.113.128/25, 203.0.113.64/26, 203.0.113.0/27, 203.0.113.48/28,
203.0.113.32/29, 203.0.113.40/30, 203.0.113.46/31, 203.0.113.44/32
…
ini
[Interface]
FwMark = 0xdead
Then, in WireGuard Obfuscator, specify the same mark:
In the config file:
fwmark = 0xdead
Or via command-line:
--fwmark 0xdead
…
[Interface] PrivateKey = ListenPort = 1111
[Peer] PublicKey = Endpoint = 127.0.0.1:2222
**Peer A Obfuscator config** (`1.2.3.4`):
source-lport = 2222 target = 5.6.7.8:4444 static-bindings = 127.0.0.1:1111:3333 key = your_secret_key
**Peer B Obfuscator config** (`5.6.7.8`):
source-lport = 4444 target = 127.0.0.1:6666 static-bindings = 1.2.3.4:3333:5555 key = your_secret_key
**Peer B WireGuard config** (`5.6.7.8`):
[Interface] PrivateKey = ListenPort = 6666
[Peer] PublicKey = Endpoint = 127.0.0.1:5555
In this example the line:
static-bindings = 1.2.3.4:1111:3333
Visually, it looks like this:
┌───────────────────────────┐ ┌───────────────────────────┐ │ Peer A (1.2.3.4) │ │ Peer B (5.6.7.8) │ │ ┌─────────────────┐ | │ ┌─────────────────┐ | │ │ WireGuard │ | │ │ WireGuard │ | │ │ ListenPort=1111 | | │ │ ListenPort=6666 | | │ └─────▲───────────┘ | │ └─────▲───────────┘ | │ │ │ │ │ │ │ ┌─────▼───────────────┐ │ │ ┌─────▼───────────────┐ │ │ │ source-lport=2222 | │ │ │ local port=5555 │ │ │ │ | │ │ │ │ │ │ │ Obfuscator | │ │ │ Obfuscator | │ │ │ static-bind | │ │ │ static-bind | │ │ │ 127.0.0.1:1111:3333 | │ │ │ 1.2.3.4:3333:5555 | │ │ │ | │ │ │ │ │ │ │ local port=3333 │ | │ │ source-lport=4444 | │ │ └─────▼───────────────┘ │ │ └─────▼───────────────┘ │ │ │ │ │ │ │ └────────┼──────────────────┘ └────────┼──────────────────┘ │ │ │ UDP/obfuscated traffic │ ││
…
log-file = /var/log/wg-obfuscator.log log-timestamps = AUTO
When a log file is set, the log goes **only** to the file, and every line gets a timestamp:
2025-08-16 04:05:12.345 [main][I] Starting WireGuard Obfuscator v1.5 2025-08-16 04:05:12.346 [main][I] Listening on port 0.0.0.0:13255 for source 2025-08-16 04:05:19.881 [main][I] New client connected: 192.168.1.10:51820
…
/var/log/wg-obfuscator.log { weekly rotate 8 compress missingok notifempty postrotate systemctl reload wg-obfuscator 2>/dev/null || killall -HUP wg-obfuscator 2>/dev/null || true endscript }
…
sh make sudo make install
This will install the obfuscator as a systemd service.
You can start it with:
```sh
sudo systemctl start wg-obfuscator
The configuration file is located at:/etc/wg-obfuscator.conf
ALT Linux apt-rpm package in SisyphusYou can download ready-to-run binaries with all required DLL libraries.
If you want to build this tool for Windows from the source code, you need MSYS2 and the following packages:
base-develgccgitInstall the required packages, then run:
make
Note: On Windows, the obfuscator is only available as a command-line application. You need to run it from the terminal and manage startup yourself, so it's required to use some additional tools if you want to install it as a system service.
You can download ready-to-run binaries for both x64 and ARM versions of macOS.
To build Obfuscator from the source code just type:
make
…
yaml
version: '3.8'
services:
wg-obfuscator:
image: clustermeerkat/wg-obfuscator:latest
volumes:
- ./.wg-obfuscator.conf:/etc/wg-obfuscator/wg-obfuscator.conf
ports:
- "13255:13255/udp"
container_name: wg-obfuscator-container
restart: unless-stopped
image can be changed to use a specific tag (e.g., clustermeerkat/wg-obfuscator:1.1)..wg-obfuscator.conf in the same directory as docker-compose.yml, or adjust the volume path.13255:13255/udp) must correspond to your obfuscator’s listen port.You can also run the container directly:
docker run -d \
--name wg-obfuscator \
-v $PWD/.wg-obfuscator.conf:/etc/wg-obfuscator/wg-obfuscator.conf \
-p 13255:13255/udp \
clustermeerkat/wg-obfuscator:latest
If you need a full WireGuard server with obfuscation and a web management interface rather than the standalone obfuscator, use [WireGuard Obfuscator Easy](https:/
No open issues yet, or sync has not completed.