[[ Настройка WireGuard на Ubuntu Server 22.04 ]]

Ubuntu

Настройка WireGuard на Ubuntu Server 22.04

Ubuntu 22.04.2 LTS
wireguard 1.0.20210914-1ubuntu2

WireGuard - это VPN клиент/сервер использующий одноименный протокол.



Установка

sudo apt-get install wireguard



Настройка

Ключи для сервера

Создание приватного (закрытого) и публичного (открытого) ключей сервера.

wg genkey | sudo tee /etc/wireguard/wg0-server-private.key | wg pubkey | sudo tee /etc/wireguard/wg0-server-public.key

Посмотреть ключи

$ sudo cat /etc/wireguard/wg0-server-private.key
IDFgbdQu1sRB0ApWRGLLZzSLXYWSURq03K7srigzXXQ=
 
$ sudo cat /etc/wireguard/wg0-server-public.key
q4xdvOJfFnEGP04WXcrpOt0WbpBkveAKVuoTc/2LShk=

Создание конфигурационного файла сервера.

По имени файла определяется имя сетевого интерфейса и systemd сервиса.
Т.е. можно создавать несколько VPN серверов на одной машине.

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = IDFgbdQu1sRB0ApWRGLLZzSLXYWSURq03K7srigzXXQ=
Address = 10.2.0.1/24
ListenPort = 51820
SaveConfig = false

  • PrivateKey - приватный ключ из файла wg0-server-private.key
  • Address - адрес сервера и маска сети VPN, которые будут назначены интерфейсу wg0.
    Рекомендуется выбирать из диапазона приватных сетей RFC1918.
    Так же, желательно что бы адреса не пересекалась с другими интерфейсами, например, текущей локальной сетью или с сетью Docker (если он установлен).
  • ListenPort - номер порта для подключения
  • SaveConfig - опция позволяет сохранять текущее состояние настроек в файл во время остановки сервиса.
    Например, добавили нового клиента командой wg после запуска.

Установить права на файлы

sudo chmod 600 /etc/wireguard/wg0-*



Ключи для клиента

Создание ключей пользователя.
Вообще, ключи можно создавать где угодно, например, в Windows клиенте при добавлении туннеля они автоматически создаются и предлагаются к использованию.

wg genkey | sudo tee /etc/wireguard/wg0-client-private.key | wg pubkey | sudo tee /etc/wireguard/wg0-client-public.key

Посмотреть ключи

$ sudo cat /etc/wireguard/wg0-client-private.key
uLeNvxkqdsgpgsgz5F+x9ctOVbiaiFI8bgzQaOHa1n4=
 
$ sudo cat /etc/wireguard/wg0-client-public.key
e7A6l8lvkNV7y8Dt0/9N5AZMb0lZYEluwt8qOq3zMkU=

Добавит ключ пользователя в конфиг сервер

/etc/wireguard/wg0.conf

...

[Peer]
PublicKey = e7A6l8lvkNV7y8Dt0/9N5AZMb0lZYEluwt8qOq3zMkU=
AllowedIPs =  10.2.0.7/32

  • PublicKey - публичный ключ из файла wg0-client-public.key
  • AllowedIPs - список, через запятую, разрешенных адресов для клиента в формате ip/mask.
    В данном примере фиксируем конкретный адрес за клиентом.

Добавить клиента можно через команду wg, когда сервер уже запущен, но будет ли он сохранен зависит от параметра SaveConfig

wg set wg0 peer "e7A6l8lvkNV7y8Dt0/9N5AZMb0lZYEluwt8qOq3zMkU=" allowed-ips 10.0.2.7/32



Firewall

Правила и метод настройки firewall весьма специфичны и могут отличатся, поэтому расценивать это как общий пример.
Для правильной работы VPN, понадобиться настроить iptables или ufw.

Разрешить прохождение трафика между интерфейсами

/etc/sysctl.conf

net.ipv4.ip_forward = 1

Применить изменения

sudo sysctl -p

Разрешить подключение к серверу по протоколу на порт 51820 по протоколу UPD

sudo iptables -A INPUT -i eth0 -p udp -m udp --dport 51820 -j ACCEPT

sudo ufw allow 51821/udp

В конфиге сервера, можно указать команды PreUp, PostUp, PreDown и разместить настройку непосредственно там

/etc/wireguard/wg0.conf

[Interface]
...
PreUp = sysctl -w net.ipv4.ip_forward=1

PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE    <----- NAT
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

PostUp = ufw route allow in on wg0 out on eth0
PreDown = ufw route delete allow in on wg0 out on eth0



Запуск сервера

systemctl status wg-quick@wg0
systemctl start wg-quick@wg0

Вкл. автозагрузку

systemctl enable wg-quick@wg0

Посмотреть информацию

wg show



Клиент для Linux

Установка

sudo apt-get install wireguard

Создание конфигурационного файла

/etc/wireguard/wg0-client.conf

[Interface]
PrivateKey = uLeNvxkqdsgpgsgz5F+x9ctOVbiaiFI8bgzQaOHa1n4=
Address = 10.2.0.7/32
#DNS = 10.2.0.1


[Peer]
PublicKey = q4xdvOJfFnEGP04WXcrpOt0WbpBkveAKVuoTc/2LShk=
Endpoint = wg.example.com:51820
AllowedIPs = 10.2.0.0/24
PersistentKeepalive = 15

  • Interface.PrivateKey - приватный ключ клиента wg0-client-private.key
  • Interface.Address - адрес и маска, который запрашивает клиент, эти параметры будут назначены интерфейсу wg0-client.
  • Interface.DNS - адрес DNS сервер, например, из внутренней сети VPN. Опционально.
  • Peer.PublicKey - публичный ключ из файла wg0-server-public.key
  • Peer.Endpoint - адрес VPN сервера
  • Peer.AllowedIPs - список, через запятую, адресов и сетей в формате ip/mask, которые будет добавлены в таблицу маршрутизации через VPN.
    Если указать 0.0.0.0/0, то весь трафик будет идти через сеть VPN.

Запуск клиента

systemctl start wg-quick@wg0-client



Клиент для Windows

Возьмите пример конфига для Linux клиента, сохраните его в файл и выполните Импорт туннелей из файла Ctrl+O.

Или нажмите Добавить пустой туннель Ctrl+N и скопируйте конфиг из буфера обмена.











Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
140 +15 = 
 
howto/ubuntu/ubuntu22.04_wireguard.txt · Последнее изменение: 2024/03/01 20:04 — lexa
Gentoo Linux Gentoo Linux Driven by DokuWiki