Настройка 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 и скопируйте конфиг из буфера обмена.
Обсуждение