ΠΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ AmneziaWG.
- Multi-arch:
amd64ΠΈarm64 - ΠΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ, ΡΠ°ΠΊ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ: ΡΠΎΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΊΠΎΠ½ΡΠΈΠ³Π°
ΠΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
.conf ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ configs (Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° /etc/amnezia/amneziawg) ΡΠ΅ΡΠ΅Π· awg-quick.
ΠΠΎΡΠΎΠ²ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΠΎΠ² Ρ ΠΏΠ»Π΅ΠΉΡΡ
ΠΎΠ»Π΄Π΅ΡΠ°ΠΌΠΈ: examples/client.conf ΠΈ examples/server.conf. Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π½ΡΠΆΠ½ΡΠΉ Π² configs/ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ wg0.conf) ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π²ΡΡΠ΅ ΡΠ²ΠΎΠΈ ΠΊΠ»ΡΡΠΈ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½Ρ Π΄Π²Π° ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ°Π±ΠΎΡΡ:
Userspace(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ): ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΄ΡΠ° Π½Π° Ρ ΠΎΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡamneziawg-goΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±ΡΠΎΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°/dev/net/tun.Kernel: Π΅ΡΠ»ΠΈ Π½Π° Ρ ΠΎΡΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΄ΡΠ°amneziawg, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ½. ΠΡΠΎΠ±ΡΠΎΡ/dev/net/tunΠ² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½, Π½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ (ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ) ΡΠ²ΠΎΡ ΠΏΠ°ΡΠ° ΠΊΠ»ΡΡΠ΅ΠΉ. ΠΠΎΠΌΠ°Π½Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½Ρ ΠΏΠ°ΡΡ - Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ Π΅Ρ ΠΏΠΎ ΡΠ°Π·Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΠΎΡΠΎΠ½Ρ:
docker run --rm --entrypoint sh vernette/amneziawg:v1.0.20260223 -c \
'priv=$(awg genkey); printf "PrivateKey = %s\nPublicKey = %s\n" "$priv" "$(echo "$priv" | awg pubkey)"'ΠΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠΈ: ΡΠ²ΠΎΠΉ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ - Π² [Interface], ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΏΠΈΡΠ° - Π² [Peer].
Π‘Π³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ ΠΏΠ°ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ examples/server.conf:
[Interface]
PrivateKey = <SERVER_PRIVATE_KEY> # ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
# ...
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY> # ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (ΠΈΠ· ΡΠ°Π³Π° 2)Π‘Π³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ ΠΏΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ examples/client.conf:
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY> # ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
# ...
[Peer]
PublicKey = <SERVER_PUBLIC_KEY> # ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° (ΠΈΠ· ΡΠ°Π³Π° 1)
Endpoint = your.server.example:51820ΠΡΠΎΠ³:
| ΠΠΎΠ½ΡΠΈΠ³ | [Interface] PrivateKey |
[Peer] PublicKey |
|---|---|---|
server.conf |
ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅ΡΠ° | ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° |
client.conf |
ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° | ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅ΡΠ° |
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°:
-
Π‘Π³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ.
-
Π ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½ΠΎΠ²ΡΠΉ Π±Π»ΠΎΠΊ
[Peer]Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ Π²AllowedIPs:[Peer] PublicKey = <CLIENT2_PUBLIC_KEY> AllowedIPs = 10.10.0.3/32
-
Π ΠΊΠΎΠ½ΡΠΈΠ³ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π²ΠΏΠΈΡΠΈΡΠ΅ Π΅Π³ΠΎ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΈ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° (ΠΊΠ°ΠΊ Π² ΡΠ°Π³Π΅ 2), Π·Π°Π΄Π°Π² ΡΠ²ΠΎΠΉ
Address(10.10.0.3/24).
# ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ
docker run --rm --entrypoint awg vernette/amneziawg:v1.0.20260223 genkey
# ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΈΠ· ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ
echo <PRIVATE_KEY> | docker run --rm -i --entrypoint awg vernette/amneziawg:v1.0.20260223 pubkey
# ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠΈΠΉ ΠΊΠ»ΡΡ (PSK, ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
docker run --rm --entrypoint awg vernette/amneziawg:v1.0.20260223 genpskΠ ΠΊΠΎΠ½ΡΠΈΠ³Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Jc, Jmin, Jmax ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, I1 - junk-Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°: Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΌΡΡΠΎΡ Π² handshake ΠΈ Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. Π‘ΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π°ΠΆΠ΅ ΠΊ ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ WireGuard ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°Π½Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ AmneziaWG Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ ΡΡΠ°ΡΡΠ΅.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠ±ΡΡΡΠΊΠ°ΡΠΈΠΈ (Jc, Jmin, Jmax, S1-S4, H1-H4, I1) ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ awg-genparams - ΡΠ΅ΠΌ ΠΆΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ, ΡΡΠΎ ΠΈ Π² ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ Amnezia. ΠΠ΄ΠΈΠ½ Π·Π°ΠΏΡΡΠΊ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π΄Π²Π° Π±Π»ΠΎΠΊΠ° Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠΌΠΈ S/H: ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ.
docker run --rm --entrypoint awg-genparams vernette/amneziawg:v1.0.20260223Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ Π² [Interface] ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³Π°, ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ - Π² [Interface] ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ. Π‘ΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Π½Π° ΠΎΠ±Π΅ΠΈΡ
ΡΡΠΎΡΠΎΠ½Π°Ρ
ΠΎΠ±ΡΠ·Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ S/H. Jc/Jmin/Jmax (junk-ΠΏΠ°ΠΊΠ΅ΡΡ Ρ
ΡΠ½Π΄ΡΠ΅ΠΉΠΊΠ°) ΠΈ I1 (special junk) - ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΌ Π±Π»ΠΎΠΊΠ΅; I1 ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° ΡΠ²ΠΎΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
-
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
configs:mkdir configs
-
ΠΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ Π²
./configs/wg0.conf(ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° = ΠΈΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°), ΡΠΊΠ°Π·Π°Π² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ AmneziaWG (Jc,Jmin,Jmax,I1, etc). -
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ:
docker compose up -d
ΠΠ°Π·ΠΎΠ²ΡΠΉ compose.yaml Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² userspace-ΡΠ΅ΠΆΠΈΠΌΠ΅:
services:
amneziawg:
image: vernette/amneziawg:v1.0.20260223
container_name: amneziawg-client
restart: always
volumes:
- ./configs:/etc/amnezia/amneziawg:ro
devices:
- /dev/net/tun:/dev/net/tun # ΡΠΎΠ»ΡΠΊΠΎ userspace-ΡΠ΅ΠΆΠΈΠΌ
cap_add:
- NET_ADMINvolumes: ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ ΠΊΠΎΠ½ΡΠΈΠ³Π°ΠΌΠΈ (ΠΌΠΎΠ½ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ)devices: ΠΏΡΠΎΠ±ΡΠΎΡ/dev/net/tun, Π½ΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² userspace-ΡΠ΅ΠΆΠΈΠΌΠ΅- ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ°ΡΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΎΠΏΡΠΈΠΉ
network_modeΠ²compose.yaml:network_mode: "host": ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ΅ΠΊ Ρ ΠΎΡΡΠ° ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Ρ ΠΎΡΡΠ°network_mode: "service:some_service": ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ namespace ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ Π²ΡΠΎΡΠΎΠΉ ΡΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π±ΡΠ΄ΡΠΎ ΡΡΠΎ Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ AllowedIPs Π² [Peer] ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³Π°.
-
Split-tunnel:
AllowedIPsΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΡΠ΅ ΡΠ΅ΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ10.10.0.0/24). Π ΡΡΠ½Π½Π΅Π»Ρ ΠΈΠ΄ΡΡ Π»ΠΈΡΡ ΡΡΠ°ΡΠΈΠΊ ΠΊ ΡΡΠΈΠΌ Π°Π΄ΡΠ΅ΡΠ°ΠΌ, ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ - Π½Π°ΠΏΡΡΠΌΡΡ. ΠΠ°Π·ΠΎΠ²ΡΠΉcompose.yamlΠ²ΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ Π΅ΡΡΡ. -
Full-tunnel:
AllowedIPs = 0.0.0.0/0, ::/0, Π²Π΅ΡΡ ΡΡΠ°ΡΠΈΠΊ Π² ΡΡΠ½Π½Π΅Π»Ρ.awg-quickΠ΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ policy-routing (fwmark, ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ) ΠΈ ΠΏΠΈΡΠ΅Ρnet.ipv4.conf.all.src_valid_mark=1. ΠΡΠΎΡ sysctl Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π·Π°Π΄Π°ΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Docker:services: amneziawg: image: vernette/amneziawg:v1.0.20260223 container_name: amneziawg-client restart: always volumes: - ./configs:/etc/amnezia/amneziawg:ro devices: - /dev/net/tun:/dev/net/tun # ΡΠΎΠ»ΡΠΊΠΎ userspace-ΡΠ΅ΠΆΠΈΠΌ cap_add: - NET_ADMIN sysctls: - net.ipv4.conf.all.src_valid_mark=1 # Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ full-tunnel
Note
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° - Table = off Π² [Interface] ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³Π°. ΠΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ Π°Π²ΡΠΎ-ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ awg-quick. ΠΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π΄Π΅Π»ΠΈΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ΅ΡΠ΅Π· network_mode: "service:..." Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΈ ΡΡΠΎΠΌ full-tunnel ΡΠ°ΠΌ Π½Π΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ - ΠΌΠ°ΡΡΡΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΠ΅ Π²ΡΡΡΠ½ΡΡ (PostUp / ip route).
Warning
Π Π΅ΠΆΠΈΠΌ network_mode: host. ΠΠ»ΠΎΠΊ sysctls Docker ΠΎΡΠΊΠ»ΠΎΠ½ΠΈΡ - namespaced net.* sysctls ΠΏΡΠΈ host-ΡΠ΅ΡΠΈ Π·Π°Π΄Π°Π²Π°ΡΡ Π½Π΅Π»ΡΠ·Ρ (src_valid_mark Π±Π΅ΡΡΡΡΡ Ρ Ρ
ΠΎΡΡΠ°). ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ: host + full-tunnel (0.0.0.0/0) Π±Π΅Π· Table = off ΡΡΠ°Π²ΠΈΡ policy-routing Π½Π° ΡΠ°ΠΌΠΎΠΌ Ρ
ΠΎΡΡΠ΅ ΠΈ Π·Π°Ρ
Π²Π°ΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΡΡΡ - Π²Π΅ΡΡ egress Ρ
ΠΎΡΡΠ° ΡΠΉΠ΄ΡΡ Π² VPN, Π° ΡΠ΄Π°Π»ΡΠ½Π½Π°Ρ SSH-ΡΠ΅ΡΡΠΈΡ (Π½Π΅ ΠΈΠ· LAN) ΠΎΠ±ΠΎΡΠ²ΡΡΡΡ. Π bridge-ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΡ ΡΡΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΎ Π² namespace ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ Ρ
ΠΎΡΡΡ Π½Π΅ Π²ΡΠ΅Π΄ΠΈΡ.
ΠΠ»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ±ΡΠΎΡΠΈΡΡ UDP-ΠΏΠΎΡΡ ΠΈΠ· ListenPort ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΡΠ²Π°ΡΠ΄ΠΈΠ½Π³. NAT ΠΈ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· PostUp/PostDown Π² .conf - ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ WireGuard-ΡΠ΅ΡΠ²Π΅ΡΠ΅ (awg-quick - ΡΠΎΡΠΊ wg-quick). ΠΠ±ΡΠ°Π· ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ iptables ΠΈ ip6tables.
services:
amneziawg:
image: vernette/amneziawg:v1.0.20260223
container_name: amneziawg-server
restart: always
volumes:
- ./configs:/etc/amnezia/amneziawg:ro
ports:
- "51820:51820/udp" # Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ListenPort Π² .conf
devices:
- /dev/net/tun:/dev/net/tun # ΡΠΎΠ»ΡΠΊΠΎ userspace-ΡΠ΅ΠΆΠΈΠΌ
cap_add:
- NET_ADMIN
sysctls:
- net.ipv4.ip_forward=1
- net.ipv6.conf.all.forwarding=1 # ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ΅Π½ IPv6ΠΡΠΈΠΌΠ΅Ρ NAT Π² ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΌ .conf:
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADEeth0 - ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (Π² Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠΉ bridge-ΡΠ΅ΡΠΈ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½). ΠΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° FORWARD Π½Π΅ Π½ΡΠΆΠ½Ρ: Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠ΅ΡΠ΅Π²ΠΎΠΌ namespace ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° FORWARD ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ACCEPT, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ MASQUERADE.
ΠΠ»Ρ IPv6 NAT ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ (Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ΅Π½):
PostUp = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADENote
Π Π΅ΠΆΠΈΠΌ network_mode: host. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²ΡΡΠ΅ ΡΠ°ΡΡΡΠΈΡΠ°Π½Π° Π½Π° bridge-ΡΠ΅ΡΡ.
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ network_mode: host, Π΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠΈΡ:
- ΠΠ»ΠΎΠΊ
sysctlsDocker ΠΎΡΠΊΠ»ΠΎΠ½ΠΈΡ - Π·Π°Π΄Π°Π²Π°ΡΡ namespacednet.*sysctls ΠΏΡΠΈ host-ΡΠ΅ΡΠΈ Π½Π΅Π»ΡΠ·Ρ. Π€ΠΎΡΠ²Π°ΡΠ΄ΠΈΠ½Π³ Π½ΡΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Ρ ΠΎΡΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²/etc/sysctl.d/); Π½Π° Ρ ΠΎΡΡΠ΅ Ρ Dockernet.ipv4.ip_forwardΠΎΠ±ΡΡΠ½ΠΎ ΡΠΆΠ΅= 1. - ΠΡΠΎΠ±ΡΠΎΡ
portsΠ½Π΅ Π½ΡΠΆΠ΅Π½ - ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠ»ΡΡΠ°Π΅ΡListenPortΠΏΡΡΠΌΠΎ Π½Π° Ρ ΠΎΡΡΠ΅. - ΠΡΠ°Π²ΠΈΠ»Π° ΠΈΠ·
PostUp/PostDownΠΏΠΈΡΡΡΡΡ Π² firewall Ρ ΠΎΡΡΠ°, Π° Π½Π΅ Π² ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ namespace, ΠΈ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ Ρ ΠΎΡΡΠ° (Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ΅ΠΏΠΎΡΠΊΠΈ Docker). ΠΠΌΡ egress-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π²MASQUERADEΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Ρ ΠΎΡΡΠΎΠ²ΡΠΌ (ΡΠ°ΡΡΠΎ Π½Π΅eth0). /dev/net/tunΠΈNET_ADMINΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ userspace-ΡΠ΅ΠΆΠΈΠΌΠ°.
Userspace-ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ, Π½ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΄ΡΠ° Π΄Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΌΠ΅Π½ΡΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ amneziawg-linux-kernel-module Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°:
-
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° Ρ ΠΎΡΡ - ΡΠ΅ΡΠ΅Π· DKMS ΠΈΠ· Π³ΠΎΡΠΎΠ²ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° ΠΈΠ»ΠΈ ΡΠ±ΠΎΡΠΊΠΎΠΉ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² (ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² README ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ). ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Debian:
sudo apt install -y software-properties-common python3-launchpadlib gnupg2 linux-headers-$(uname -r) sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 57290828 echo "deb https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu focal main" | sudo tee -a /etc/apt/sources.list echo "deb-src https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install -y amneziawg
-
ΠΠ°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ:
sudo modprobe amneziawg
-
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΈΠ·
compose.yamlΠΌΠΎΠΆΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ Π±Π»ΠΎΠΊdevices: /dev/net/tun- Π² kernel-ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΠ½ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π» Π² userspace-ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ:docker compose down docker compose up -d
vernette/amneziawg:latest: ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π·vernette/amneziawg:<Π²Π΅ΡΡΠΈΡ>: ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΊ ΡΠ΅Π³Ρ amneziawg-tools
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ AmneziaWG
- amneziawg-go - userspace-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
- amneziawg-tools -
awg/awg-quick - amneziawg-linux-kernel-module - ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΄ΡΠ°
