WireGuard сервер на Debian 12 (Android / Windows клиенты, Full Tunnel)

VPN сервер расположен на VPS с Debian 12.

Android / Windows
        │
        │  UDP 51820
        │
     Интернет
        │
        ▼
WireGuard Server (Debian 12)
10.66.66.1

После подключения весь интернет-трафик клиентов проходит через VPN сервер.

Устройство VPN IP
Сервер 10.66.66.1
Клиент1 10.66.66.2
Клиент2 10.66.66.3

Обновляем систему и устанавливаем пакеты.

sudo apt update
sudo apt install wireguard qrencode iptables

cd /etc/wireguard
umask 077
 
wg genkey | tee server.key | wg pubkey > server.pub

ip r | grep default

Пример:

default via 1.2.3.1 dev eth0

Внешний интерфейс: eth0


cat /etc/wireguard/server.key

Заменить в конфиге ниже SERVER_PRIVATE_KEY на содержимое server.key. А также eth0 на ваш сетевой интерфейс.

vim /etc/wireguard/wg0.conf
[Interface]
Address = 10.66.66.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
 
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system

Проверка:

sysctl net.ipv4.ip_forward

Если у тебя UFW:

sudo apt install -y ufw
sudo ufw allow 51820/udp
sudo ufw enable
sudo ufw status
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Проверка:

sudo wg show

Создаем скрипт:

vim /usr/local/bin/wg-add-client
#!/bin/bash
 
WG_DIR="/etc/wireguard"
WG_CONF="/etc/wireguard/wg0.conf"
SERVER_PUB=$(cat $WG_DIR/server.pub)
SERVER_IP=$(curl -4 -s ifconfig.me)
 
CLIENT_NAME=$1
 
if [ -z "$CLIENT_NAME" ]; then
    echo "Usage: wg-add-client clientname"
    exit
fi
 
CLIENT_IP=$(grep AllowedIPs $WG_CONF | wc -l)
CLIENT_IP=$((CLIENT_IP+2))
 
cd $WG_DIR
 
wg genkey | tee ${CLIENT_NAME}.key | wg pubkey > ${CLIENT_NAME}.pub
 
cat >> $WG_CONF <<EOF
 
[Peer]
PublicKey = $(cat ${CLIENT_NAME}.pub)
AllowedIPs = 10.66.66.${CLIENT_IP}/32
EOF
 
cat > ${CLIENT_NAME}.conf <<EOF
[Interface]
PrivateKey = $(cat ${CLIENT_NAME}.key)
Address = 10.66.66.${CLIENT_IP}/32
DNS = 1.1.1.1
 
[Peer]
PublicKey = ${SERVER_PUB}
Endpoint = ${SERVER_IP}:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF
 
wg syncconf wg0 <(wg-quick strip wg0)
 
echo "Client created: ${CLIENT_NAME}"
echo "Config: $WG_DIR/${CLIENT_NAME}.conf"
 
qrencode -t ansiutf8 < ${CLIENT_NAME}.conf

Сделать исполняемым:

chmod +x /usr/local/bin/wg-add-client

sudo wg-add-client phone

Будет создан файл:

/etc/wireguard/phone.conf

И выведен QR код.


qrencode -t ansiutf8 < client.conf

1 Скачать WireGuard

https://www.wireguard.com/install/

2 Установить

3 Нажать

Add Tunnel → Import from file

4 Выбрать файл клиента

client.conf

5 Нажать Activate


1 Установить приложение

https://play.google.com/store/apps/details?id=com.wireguard.android

2 Нажать

Add tunnel → Scan QR code

3 Отсканировать QR код


На сервере:

sudo wg show

Должно появиться:

latest handshake
transfer

На клиенте:

curl ifconfig.me

Должен отображаться IP VPN сервера.


ip a show wg0

ss -lunp | grep 51820

wg show

Если нет строки:

latest handshake

клиент не подключился.


iptables -L -n -v
iptables -t nat -L -n -v

sysctl net.ipv4.ip_forward

tcpdump -n -i eth0 udp port 51820

sudo systemctl restart wg-quick@wg0

journalctl -u wg-quick@wg0

```