Установка и настройка Wireguard VPN

10 июля, 2022 13:37
Admin
10 июля, 2022 18:41

WireGuard - бесплатное open source решение для настройки безопасной виртуальной частной сети (VPN). Поскольку WireGuard реализован в пространстве ядра, он обладает высокой скоростью работы и достаточно прост в настройке. Кроме того, он доступен на всех современных платформах Linux, Windows, macOS, BSD, iOS, Android, а в качестве защиты данных используется асимметричное шифрование с открытым и закрытым ключом.

Установка и настройка WireGuard на стороне сервера

Обновим apt-репозиторий и установим WireGuard:

# обновим индекс
$ sudo apt update -y

# установим wireguard
$ sudo apt install -y wireguard

Перейдем в папку wireguard:

$ cd /etc/wireguard/

Далее необходимо сгенерировать открытый и закрытый ключ с помощью команды wg:

$ wg genkey | tee /etc/wireguard/private.key | wg pubkey | tee /etc/wireguard/public.key

Здесь команда wg genkey генерирует секретный ключ и передает его команде tee, которая сохраняет ключ в файл private.key и передаёт его на вход команде wg pubkey, которая на основе полученного секретного ключа, генерирует публичный ключ и передаёт его команде tee, которая сохраняет полученный ключ в файл public.key и распечатывает его в терминале.

Затем создаем файл конфигурации /etc/wireguard/wg0.conf и добавляем в него следующее содержимое:

[Interface]
# Приватный ключ из файла private.key
PrivateKey = <private_key>

# Адрес VPN-сервера в частной сети
Address = 10.0.0.1/24

# Порт, который будет слушать VPN-сервер
ListenPort = 53840

# Команда, которая будет выполнена при старте VPN сервера
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Команда, которая будет выполнена при выключении VPN сервера
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

В данном конфиге необходимо только указать <private_key> из файла с приватным ключом.

Далее нам необходимо включить маршрутизацию, чтобы была возможность пересылать пакеты между интерфейсами. Для этого в файле /etc/sysctl.conf необходимо раскомментировать или добавить если нет следующую строку:

net.ipv4.ip_forward = 1

Затем необходимо применить новые настройки:

$ sysctl -p

Теперь добавим службу в автозагрузку:

$ systemctl enable wg-quick@wg0.service

Это позволит автоматически запускаться серверу wireguard после перезагрузки или выключения сервера linux. Запускаем наш VPN сервер:

$ systemctl start wg-quick@wg0.service

Теперь сервер должен быть запущен. Мы можем проверить его статус одной из следующих команд:

# проверить статус службы
$ systemctl status wg-quick@wg0.service

# показать статус сервера wg
$ wg show

Наш VPN сервер запущен. Далее нам необходимо настроить конфигурацию для подключения клиентов.

Настройка сервера WireGuard для подключения клиентов

Чтобы мы могли подключить нашего первого клиента к только что созданному VPN, потребуется сгенерировать ключи для клиента, по аналогии с тем, как мы выполняли генерацию ключей для сервера:

# сгенерируем приватный ключ
$ wg genkey | tee /etc/wireguard/petrov_private.key

# сгенерируем публичный ключ
$ cat /etc/wireguard/petrov_private.key | wg pubkey | tee /etc/wireguard/petrov_public.key

После этого, содержимое нашей директории /etc/wireguard/ будет иметь следующий вид:

├── private.key
├── public.key
├── petrov_private.key
├── petrov_public.key
├── wg0.conf

Теперь нам необходимо отредактировать наш конфигурационный файл /etc/wireguard/wg0.conf и дополнить его следующим содержимым:

[Peer]
# Публичный ключ клиента
PublicKey = <petrov_public>

# IP-адрес в частной сети, который будет присвоен клиенту
AllowedIPs = 10.0.0.2/32

После этого нам надо перезагрузить наш VPN сервер:

# перезапускаем службу
$ systemctl restart wg-quick@wg0

# проверяем статус службы
$ systemctl status wg-quick@wg0

Если все хорошо, то теперь мы можем переходить к настройке машины нашего клиента.

Настройка клиента WireGuard на Ubuntu

Для начала на нашей клиентской машине необходимо также установить wireguard если его нет:

$ sudo apt install wireguard

После установки нам необходимо создать конфигурационный файл в папке /etc/wireguard/wg0.conf со следующим содержимым:

[Interface]
# Приватный ключ клиента. В нашем случае petrov_private.key
PrivateKey = <petrov_private>

# IP-адрес клиента, который настроен на wg сервере
Address = 10.0.0.2/32

# DNS, который будет использовать при подключении
DNS = 8.8.8.8

[Peer]
# Публичный ключ сервера
PublicKey = <server-public_key>

# IP адрес и порт удалённого сервера
Endpoint = <server-ip>:53840

# Если указаны все нули — весь трафик клиента будет проходить через wg сервер
AllowedIPs = 0.0.0.0/0

# Интервал проверки соединения между клиентом и сервером (секунды)
PersistentKeepalive = 20

После создания конфигурационного файла мы можем запустить наш VPN с помощью утилиты wg-quick:

# запуск vpn сервера
$ sudo wg-quick up wg0

# остановка vpn сервера
$ sudo wg-quick down wg0

здесь wg0 это имя нашего конфигурационного файла.

В случае возникновения ошибки /usr/bin/wg-quick: resolvconf: command not found вероятно потребуется сделать символическую ссылку ln -s /usr/bin/resolvectl /usr/local/bin/resolvconf

Если все настройки указаны верно, то наш клиент должен быть успешно подключен к нашему VPN серверу через который будет проходить весь трафик. А также у нас должен будет измениться наш публичный ip адрес, на ip адрес нашего сервера.

Настройка клиента WireGuard на Windows

Для настройки wireguard на windows сначала потребуется скачать установочный файл с официального сайта wireguard.com и установить.

Затем нам потребуется создать конфигурационный файл по аналогии с файлом, который мы настраивали для Ubuntu. Его название не имеет значение, поэтому мы можем просто создать файл, к примеру wgvpn.conf со следующим содержимым:

[Interface]
# Приватный ключ клиента. В нашем случае petrov_private.key
PrivateKey = <petrov_private>

# IP-адрес клиента, который настроен на wg сервере
Address = 10.0.0.2/32

# DNS, который будет использовать при подключении
DNS = 8.8.8.8

[Peer]
# Публичный ключ сервера
PublicKey = <server-public_key>

# IP адрес и порт удалённого сервера
Endpoint = <server-ip>:53840

# Если указаны все нули — весь трафик клиента будет проходить через wg сервер
AllowedIPs = 0.0.0.0/0

# Интервал проверки соединения между клиентом и сервером (секунды)
PersistentKeepalive = 20

После этого мы можем импортировать наш файл в wireguard (рис.1)

Рис.1 wireguard-windows

Далее нам остается только нажать кнопку Подключить и если мы верно указали все настройки, то VPN должен начать работать (рис.2).

Рис.2 wireguard-connect

Чтобы проверить, что наш трафик идет через VPN мы можем проверить наш публичный ip адрес через который мы выходит в интернет, он должен соответствовать ip адресу нашего сервера.