---
layout: page
title: Was ist AmneziaWG?
permalink: /blog/amneziawg-de/
keywords: amneziawg,amnezia,wireguard,dpi
description: Was ist AmneziaWG? Und was bedeuten die Paramater eigentlich?
lang: de
feed: true
date: 2024-09-22 20:00:00 +0100
---

[AmneziaWG](https://docs.amnezia.org/documentation/amnezia-wg/) ist eine WireGuard Fork, welcher Anti-Erkennungs-Techniken gegen DPI-Systeme implementiert. Diese Anti-Erkennungs-Techniken werden als "Advanced Security" bezeichnet. AmneziaWG kann rückwärtskompatibel zu vanilla WireGuard eingestellt werden.

![Auf dem Bild sieht man das Amnezia Logo. Dabei handelt es sich um das klassische Anarchie "A" im Kreis. Jedoch ist das Logo sehr farbenfroh - Flächen sind Orange, Lula, Hellblau, Pink und Grau gefüllt.](/assets/img/amnezia_logo.svg)

(aus [https://github.com/amnezia-vpn/amnezia-client](https://github.com/amnezia-vpn/amnezia-client), GPL-3.0, ausgeschnitten von mir)

Es führt neun zusätzliche Paramater (`Jc`, `Jmin`, `Jmax`, `S1`, `S2`, `H1`, `H2`, `H3`, `H4`) ein.

## Vanilla WireGuard

Das WireGuard-Protokoll besteht aus verschiedenen Nachrichten. Einige der wichtigsten Nachrichten sind die "Handshake Initation", die "Handshake Response" und die eigentliche Datenpakete.
Diese WireGuard Nachrichten haben alle einen Header, in welchem ihr Type definiert wird. Dieser wird mithilfe einer ganzen Zahl angegeben.
Um eine WireGuard-Verbindung aufzubauen, wird im Allgemeinen vom Peer, welcher die Verbindung aufbauen will, eine "Handshake Initation" gesendet. Der andere Peer antwortet dann mit einer "Handshake Response".
Diese Pakete lassen sich mithilfe von DPI-Systemen erkennen und dann entsprechend blockieren. Dadurch wird der ganze WireGuard Tunnel verhindert und WireGuard ist dann blockiert.

## Junk-Pakete

AmneziaWG kann vor dem Handshake Junk Pakete senden. Dabei handelt es sich um Pakete, welche zufällige Daten beinhalten und keinen Inhalt vermitteln sollen. Um die Art der Junk-Pakete zu definieren, gibt es drei Parameter: `Jc`, `Jmin` und `Jmax`.

`Jc` legt die Anzahl der Junk-Pakete fest. Ein `Jc` von drei bedeutet beispielsweise, dass vor dem Handshake drei Pakete mit Zufallsdaten gesendet werden sollen. `Jc` darf maximal 128 (inklusive) groß sein.

`Jmin` und `Jmax` legen die Größe der Junk-Pakete in Bytes fest - genauer die Größe des UDP-Payloads (die Größe des UDP-Header und des IP-Headers zählen also bei der Größenangabe nicht). `Jmin` legt dabei die minimale Größe des Payloads und `Jmax` die maximale Größe des Payloads fest. Die Größe des eigentlichen Payloads wird dann zufällig so gewählt, dass sie zwischen `Jmin` (inklusiv) und `Jmax` (inklusiv) liegt. `Jmin` muss kleiner oder gleich `Jmax` sein. Beide Werte dürfen maximal 1280 (inklusiv) Byte groß sein.

Wenn `Jmin` und `Jmax` gleich groß sind, liegt die Größe des Payloads zufällig zwischen `Jmin` und `Jmax + 1`.

### Empfohlene Werte

Je nach Region und Umständen können verschiedene Werte empfohlen werden. Im Allgemeinen sollte `Jc` zwischen 3 (inklusive) und 10 (inklusive) sein. Es wird häufig 3 oder 4 verwendet.
Für `Jmin` und `Jmax` wird 50 und 1000 bzw. 10 und 50 empfohlen.

## Junk im Handshake

Zusätzlich zu den separaten Junk-Paketen werden auch Zufallsdaten vor den eigentlichen WireGuard Daten in der "Handshake Initation" und der "Handshake Response" hinzugefügt. Die Parameter `S1` und `S2` legen fest, wie viel Bytes an Junkdaten vor den eigentlichen WireGuard Daten platziert werden sollen. In der "Handshake Initation" werden `S1` Bytes vor den eigentlichen Daten und in der "Handshake Response" `S2` Bytes Zufallsdaten hinzugefügt. Diese Einstellung muss bei allen Peers gleich sein, damit jeder weiß, wo die eigentlichen sinnvollen Daten anfangen.

### Empfohlene Werte

Für `S1` und `S2` wird ein zufälliger Wert zwischen 15 (inklusive) und 150 (inklusive) empfohlen. Dabei darf `S1 + 56` nicht gleich `S2` entsprechen.

## Benutzerdefinierte Typen

Um zu identifizieren, um was für eine WireGuard Nachricht es sich handelt, wird im WireGuard Header ein Typ in Form einer ganzen Zahl angegeben. So hat die "Handshake Initation" den Typ 1 und die "Handshake Response" den Typ 2. Insgesamt gibt es (aktuell) vier festgelegte Typen. Da diese Typen fest definiert sind, eignen sie sich als Kriterium, um WireGuard Pakete zu erkennen. Daher ist es bei AmneziaWG möglich, die vordefinierten Typen zu überschreiben. Der Typ 1 wird zu `H1`, der Typ 2 wird zu `H2`, der Typ 3 wird zu `H3` und der Typ 4 wird zu `H4`. Die `H`-Werte müssen sich voreinander unterscheiden.

### Empfohlene Werte

Es wird ein zufälliger Wert zwischen 5 und 2^31-1=2147483647 bzw. 2^32-1=4294967295 (siehe Diskussion [hier](https://github.com/amnezia-vpn/amneziawg-go/issues/42#issuecomment-2366785806)) empfohlen.

## Rückwärtskompatibilität

AmneziaWG kann rückwärtskompatibel zu Vanille WireGuard verwendet werden. Dabei wird lediglich das Feature von Junkpaketen vor dem Handshake aktiviert und Features wie Junkdaten im Handshake und benutzerdefinierte Typen deaktiviert.

Dafür können [folgende Parameter](https://zaneschepke.com/wgtunnel-docs/features.html#how-to-convert-an-existing-wireguard-config-to-amnezia) verwendet werden: `S1` von 0, `S2` von 0, `H1` von 1, `H2` von 2, `H3` von 3 und `H4` von 4.

## Konfiguration

Die zusätzlichen Parameter können wie Adress- oder Schlüsselparameter in eine WireGuard Konfigurationsdatei geschrieben werden:
```
[Interface]
PrivateKey = uMnqnbbo+bbnnPVPjjyLqB72JHPvSOew/MqWxPz6PEg=
Address = 192.168.2.4/32

Jc = 3
Jmin = 50
Jmax = 1000
S1 = 20
S2 = 78
H1 = 39131278
H2 = 832138185
H3 = 1436957857
H4 = 1635877746

[Peer]
PublicKey = 8Yr++qyZzEL4zHS7CEgi+9zMm0d09qUA0xeqohNs8F8=
PresharedKey = fbDzRFA/PGH05Uwl9EFcI42F8KABRpSKoqS+Xv2qOl8=
Endpoint = 192.168.1.1:1234
AllowedIPs = fd00::/8
```

## Paketierung

### Linux

Unter Linux werden die [`awg-tools`](https://github.com/amnezia-vpn/amneziawg-tools) sowie die [Kernel](https://github.com/amnezia-vpn/amneziawg-linux-kernel-module) oder die [Go](https://github.com/amnezia-vpn/amneziawg-go)-Implementierung benötigt. Für Debian gibt es ein von den AmneziaWG-Entwicklern bereitgestelltes [Repository](https://launchpad.net/~amnezia) für die Tools und die Kernel-Implementierung. Für Arch Linux sind die [Tools](https://aur.archlinux.org/packages/amneziawg-tools) und die [Go-Implementierung](https://aur.archlinux.org/packages/amneziawg-go) in AUR paketiert.

### Android

Aktuell unterstützt in F-Droid nur [WG Tunnel](https://github.com/zaneschepke/wgtunnel) AmneziaWG.

Die AmneziaWG Entwickler stellen jedoch auch ein [eigene VPN-App](https://github.com/amnezia-vpn/amnezia-client) sowie einen [AmneziaWG Client](https://github.com/amnezia-vpn/amneziawg-android) für Android bereit.
Es wurde eine [Anfrage](https://github.com/amnezia-vpn/amneziawg-android/issues/6) an die AmneziaWG-Entwickler gestellt, den Client in F-Droid oder IzzyOnDroid aufzunehmen - aktuell ohne Rückmeldung von diesen. Des Weiteren scheint der AmneziaWG Client [nicht von den Entwicklern, sondern Google signiert](https://github.com/amnezia-vpn/amneziawg-android/issues/6#issuecomment-2313103667) worden zu sein - falls bei Sicherheitsanwendung problematisch ist.
Auch bei der Amnezia Client-App wurde eine [Anfrage an die Entwickler](https://github.com/amnezia-vpn/amnezia-client/issues/263) sowie an [F-Droid](https://gitlab.com/fdroid/rfp/-/issues/2374) gesendet. Die Amnezia Client-App ist für IzzyOnDroid [leider zu groß](https://github.com/amnezia-vpn/amnezia-client/issues/263#issuecomment-2309026176).

## Offizielle Dokumentation

Eine genaue detaillierte offizielle Dokumentation wird es in vorhersehbarer Zukunft aus Sorge, dies würde Zensoren das Erkennen von AmenziaWG erleichtern [vermutlich nicht geben](https://github.com/amnezia-vpn/amneziawg-go/issues/42#issuecomment-2351742762).

## Aussicht

Es gibt aktuell mehrere Anfragen, AmneziaWG in [OpenWrt](https://github.com/openwrt/packages/pull/23632) ([Tools](https://github.com/openwrt/packages/pull/23633)), [MikroTik's RouterOS](https://forum.mikrotik.com/viewtopic.php?t=206646), [GL.iNet's OpenWrt](https://forum.gl-inet.com/t/feature-request-replace-wireguard-with-amneziawg/44783), [DD-Wrt](https://forum.dd-wrt.com/phpBB2/viewtopic.php?t=337390) und andere Distributationen aufzunehmen.

Des Weiteren könnte [geplant](https://9.demhack.org/en/tasks) sein ein `S3` bzw `S4` für den WireGuard Anti-DoS-Mechanismus einzuführen.

