Сегодня в статье приведу пример по установке и настройке VPN сервера WireGuard для операционных систем Ubuntu и Debian. Также данная статья будет справедлива и для всех производных систем данного типа.
WireGuard – это современная высокопроизводительная VPN для Linux,Windows, MacOS. Главной функцией WireGuard является обеспечение безопасного соединения между сторонами через сетевой интерфейс, зашифрованный с помощью аутентификации по открытому ключу. Это означает, что, в отличие от большинства виртуальных частных сетей, WireGuard не применяет топологию, что позволяет создавать различные конфигурации путем изменения конфигураций окружающей сети. Эта модель предлагает большую производительность и гибкость.
Сейчас WireGuard готовится к включению в состав ядра Linux. Если быть точнее, то он появится в ядре версии 5.6, он даже получил похвалу от Линус Торвальдса и в американском сенате.
Специалисты проверили скорость работы WireGuard и выяснили, что он способен обойти большинство протоколов шифрования в том числе широко известный протокол OpenVPN.
Причина, которая объясняет высокую скорость работы WireGuard, это применение быстрого и современного алгоритма шифрования, благодаря которому скорость передачи данных очень высока.
Кроме того, данный протокол очень похож на https, что позволяет обманывать системы анализа трафика DPI, установленные у Вашего провайдера и обходить эти блокировки по сигнатурам.
Установка и настройка при помощи скрипта
Для облегчения установки и настройки можете воспользоваться готовым скриптом. Данный скрипт универсальный для большинства систем.
Первым шагом подготовим нашу систему:
sudo -su
apt update && apt upgrade -y
apt install curl
Далее скачиваем скрипт.
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
Делаем его исполняемым:
chmod +x wireguard-install.sh
Запускаем установку и настройку WireGuard
./wireguard-install.sh
Установка WireGuard на Ubuntu
Установку нашего VPN WireGuard я буду производить на сервере под управлением операционной системы Ubuntu/Debian. И так поехали.
Ubuntu 18.04
Для начала надо добавить официальный репозиторий в систему:
sudo add-apt-repository ppa:wireguard/wireguard
- Обновляем индексы
sudo apt update
- Устанавливаем wireguard
sudo apt install -y wireguard wireguard-dkms iptables resolvconf qrencode
Ubuntu 20.04/22.04
Так как пакет входит в офицмальный репозиторий, то необходимо набрать всего лишь данные команды:
- Обновляем индексы
sudo apt update
- Устанавливаем wireguard
sudo apt install -y wireguard wireguard-dkms iptables resolvconf qrencode
Установка WireGuard на Debian
Для того чтобы установить WireGuard на Debian с начало необходимо авторизоваться под root пользователем:
sudo su
Далее набираем следующее:
echo "deb http://deb.debian.org/debian buster-backports main" >/etc/apt/sources.list.d/backports.list
apt update
apt install -y iptables resolvconf qrencode
apt install -y -t buster-backports wireguard
Для остальных операционных систем можете посмотреть официальную страничку инсталляции.
Также установите заголовки для вашего ядра, если вы еще этого не сделали:
apt-get install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//')
Настройка VPN WireGuard на серверной части
Давайте теперь настроим наш высокопроизводительный VPN на сервере wireguard. Для этого создадим файл конфигурации и необходимые ключи шифрования. Все действия выполняем из под root.
sudo su
(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/wg-server-publickey.key
- Первая команда записывает исходное содержимое конфигурационного файла в /etc/wireguard/wg0.conf. Значение umask в суб-оболочке позволяет создать файл с ограниченными разрешениями, не затрагивая обычную среду.
- Вторая команда генерирует закрытый ключ с помощью команды wg и записывает ее непосредственно в конфигурационный файл с ограниченным доступом. Затем ключ передается обратно команде wg pubkey, чтобы получить связанный с ним открытый ключ, который записывается в /etc/wireguard/wg-sever-publickey.key.
Следующим шагом нам необходимо включить форвардинг пакетов через наш сервер, для этого открываем следующий файл:
sudo nano /etc/sysctl.conf
И уберем знак комментария # со строки:
net.ipv4.ip_forward=1
Применим изменения
sudo sysctl -p
Далее отрываем файл на редактирования и вносим необходимую информацию о нашей VPN сети.
sudo nano /etc/wireguard/wg0.conf
Конфигурационный файл vpn wireguard
Внутри, в разделе [Interface]
, вы должны увидеть свой сгенерированный закрытый ключ. Этот раздел содержит конфигурацию для локальной стороны соединения.
В разделе Interface нужно также определить IP-адрес VPN, который будет использовать этот узел, и порт, который он будет прослушивать для соединений с одноранговыми узлами.
Давайте добавим в него следующие строки ListenPort, SaveConfig и Address:
[Interface]
PrivateKey = приватный_ключ_сервера
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.1/24
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
- ListenPort — указываем свободный порт который будет прослушивать наш сервис wg-quick (VPN WireGuard)
- SaveConfig — имеет значение true, чтобы сервис wg-quick мог автоматически сохранять свою активную конфигурацию в этом файле при завершении работы.
- Address — это наш IP-адрес и маска сети
- PostUP и PostDown — запускают необходимые правило для iptables
Пробуем поднять нашу сеть скриптом wg-quick:
sudo wg-quick up /etc/wireguard/wg0.conf
В системах с systemd вместо этого можно использовать следующую запись:
sudo systemctl start wg-quick@wg0.service
Если systemd ругается, то сперва необходимо включить сервис следующей командой:
sudo systemctl enable wg-quick@wg0.service
Настройка VPN WireGuard на клиентской машине
В качестве клиента у меня будет выступать ноутбук с операционной системой Ubuntu Desktop 18.04 LTS
Все действия выполняем из под пользователя root.
sudo su
add-apt-repository ppa:wireguard/wireguard
apt install wireguard -y
Для Ubuntu 20.04 необходимо повторить тоже самое, что и при установке на серверную часть. (см. Выше)
Далее создаем конфигурационный файл и генерируем ключи:
(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/wg-server-publickey.key
Открываем наш конфигурационный файл и вносим изменения.
sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = приватный_ключ_клиента
ListenPort = 5555
Address = 10.0.0.2/32
Создайте раздел под названием [Peer]
после раздела [Interface]
.
[Peer]
PublicKey = Публичный_ключ_сервера
AllowedIPs = 10.0.0.0/24
Endpoint = IP-адрес_сервера:5555
PersistentKeepalive = 10
- PublicKey — укажите значение открытого ключа сервера. Вы можете найти это значение, набрав на сервере команду: wg
- AllowedIPs — указывает на пропуск трафика через VPN. В данном случае будет проходить через VPN только трафик сети 10.0.0.0/24. Весть остальной трафик пойдет через вашего провайдер. Для заворота всего трафика через VPN указываем значение 0.0.0.0/0
- PersistentKeepalive — время в секундах для постоянной проверки доступности ресурса.
Запускаем сервис на Ubuntu:
sudo systemctl start wg-quick@wg0.service
Запускаем сервис на Debian:
sudo wg-quick up /etc/wireguard/wg0.conf
Peer на стороне сервера
На сервере также необходимо добавить информацию о клиенте. Иначе ваш туннель VPN не откроется. Для этого возвращаемся на сервер и останавливаем службу wireguard:
sudo systemctl stop wg-quick@wg0.service
Далее открываем конфигурационный файл:
sudo nano /etc/wireguard/wg0.conf
И вносим информацию о клиенте.
[Peer]
PublicKey = публичный_ключ_клиента
AllowedIPs = 10.0.0.5/32
PersistentKeepalive = 10
- PublicKey — ключ клиента можно посмотреть на клиентской машине при помощи команды wg.
- AllowedIPs — указывает на IP клиента. Обязательно с маской 32
Запускаем наш сервис:
sudo systemctl start wg-quick@wg0.service
Пробуем пропинговать клиента.
ping 10.0.0.2
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.916 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.545 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.647 ms
Со стороны клиента также должен проходить пинг до сервера.
ping 10.0.0.1
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=2.40 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.646 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.555 ms
Хотя статья получилась большой, но все настраивается очень быстро.
Тонкая настройка параметров WireGuard на примере Proxmox
/usr/lib/sysctl.d/10-pve-ct-inotify-limits.conf
…
fs.inotify.max_queued_events = 8388608
fs.inotify.max_user_instances = 65536
fs.inotify.max_user_watches = 4194304
vm.max_map_count = 262144
net.ipv4.neigh.default.gc_thresh3 = 8192
net.ipv6.neigh.default.gc_thresh3 = 8192
kernel.keys.maxkeys = 2000/usr/lib/sysctl.d/10-pve.conf
…
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-filter-vlan-tagged = 0
net.ipv4.igmp_link_local_mcast_reports = 0
fs.aio-max-nr = 1048576/usr/lib/sysctl.d/50-pid-max.conf
…
kernel.pid_max = 4194304/etc/sysctl.d/99-sysctl.conf
…
net.ipv4.ip_forward = 1/usr/lib/sysctl.d/protect-links.conf
…
fs.protected_fifos = 1
fs.protected_hardlinks = 1
fs.protected_regular = 2
fs.protected_symlinks = 1/usr/lib/sysctl.d/pve-firewall.conf
…
net.ipv4.conf.all.rp_filter = 2/etc/sysctl.d/wg.conf
…
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1/etc/sysctl.conf
…
net.ipv4.ip_forward = 1
[endtxt]
. . . .
- Тест скорости дисков в Linux
- Как запустить команду в фоне в Linux
- Ошибка несоответствие размеров GPT PMBR
- nginx: [warn] protocol options redefined
- Как включить поддержку linux в windows 11