Skip to content

Latest commit

Β 

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AmneziaWG

Docker Pulls Docker Image Version Build

ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ 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 ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ сСрвСра

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°:

  1. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

  2. Π’ сСрвСрный ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ [Peer] с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ адрСсом Π² AllowedIPs:

    [Peer]
    PublicKey = <CLIENT2_PUBLIC_KEY>
    AllowedIPs = 10.10.0.3/32
  3. Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ сСрвСра (ΠΊΠ°ΠΊ Π² шагС 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

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ AmneziaWG

Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 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 рСкомСндуСтся Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° своё ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ configs:

    mkdir configs
  2. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π² ./configs/wg0.conf (имя Ρ„Π°ΠΉΠ»Π° = имя интСрфСйса), ΡƒΠΊΠ°Π·Π°Π² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ AmneziaWG (Jc, Jmin, Jmax, I1, etc).

  3. ЗапуститС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:

    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_ADMIN
  • volumes: ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°ΠΌΠΈ (монтируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния)
  • devices: проброс /dev/net/tun, Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² userspace-Ρ€Π΅ΠΆΠΈΠΌΠ΅
  • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ интСрфСйс доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠŸΡ€ΠΈ нСобходимости раскоммСнтируйтС ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΎΠΏΡ†ΠΈΠΉ network_mode Π² compose.yaml:
    • network_mode: "host": ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСтСвой стСк хоста ΠΈ интСрфСйс Π±ΡƒΠ΄Π΅Ρ‚ доступСн Π² систСмС хоста
    • network_mode: "service:some_service": ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ namespace ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ смоТСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±ΡƒΠ΄Ρ‚ΠΎ это Π΅Π³ΠΎ собствСнный интСрфСйс

Split-tunnel vs full-tunnel

ПовСдСниС зависит ΠΎΡ‚ 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 MASQUERADE

eth0 - исходящий интСрфСйс Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Π² Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠΉ 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 MASQUERADE

Note

Π Π΅ΠΆΠΈΠΌ network_mode: host. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π²Ρ‹ΡˆΠ΅ рассчитана Π½Π° bridge-ΡΠ΅Ρ‚ΡŒ. Если Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с network_mode: host, Π΅ΡΡ‚ΡŒ отличия:

  • Π‘Π»ΠΎΠΊ sysctls Docker ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ - Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ namespaced net.* sysctls ΠΏΡ€ΠΈ host-сСти нСльзя. Π€ΠΎΡ€Π²Π°Ρ€Π΄ΠΈΠ½Π³ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π½Π° самом хостС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² /etc/sysctl.d/); Π½Π° хостС с Docker net.ipv4.ip_forward ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΆΠ΅ = 1.
  • ΠŸΡ€ΠΎΠ±Ρ€ΠΎΡ ports Π½Π΅ Π½ΡƒΠΆΠ΅Π½ - ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ ListenPort прямо Π½Π° хостС.
  • ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ· PostUp/PostDown ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π² firewall хоста, Π° Π½Π΅ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ namespace, ΠΈ ΡΠΌΠ΅ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ хоста (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Docker). Имя egress-интСрфСйса Π² MASQUERADE Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ хостовым (часто Π½Π΅ eth0).
  • /dev/net/tun ΠΈ NET_ADMIN ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹ для userspace-Ρ€Π΅ΠΆΠΈΠΌΠ°.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ ядра (kernel-Ρ€Π΅ΠΆΠΈΠΌ)

Userspace-Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Π½ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ядра Π΄Π°Ρ‘Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория amneziawg-linux-kernel-module для своСго дистрибутива:

  1. УстановитС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π° хост - Ρ‡Π΅Ρ€Π΅Π· 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
  2. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ:

    sudo modprobe amneziawg
  3. ПослС этого ΠΈΠ· compose.yaml ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ devices: /dev/net/tun - Π² kernel-Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠ½ Π½Π΅ трСбуСтся. Если ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² userspace-Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ:

    docker compose down
    docker compose up -d

Π’Π΅Π³ΠΈ ΠΎΠ±Ρ€Π°Π·Π°

  • vernette/amneziawg:latest: послСдний собранный ΠΎΠ±Ρ€Π°Π·
  • vernette/amneziawg:<вСрсия>: привязка ΠΊ Ρ‚Π΅Π³Ρƒ amneziawg-tools

Бсылки

About

πŸ”‘ Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ AmneziaWG (ΠΊΠ»ΠΈΠ΅Π½Ρ‚/сСрвСр)

Resources

Stars

12 stars

Watchers

0 watching

Forks

Contributors

Languages