Главная » Виртуальные частные сети » Виртуальная частная сеть WireGuard » Установка и настройка WireGuard в Linux Ubuntu/Mint из репозитория ppa

📑 Установка и настройка WireGuard в Linux Ubuntu/Mint из репозитория ppa

Установка и настройка WireGuard в Linux Ubuntu/Mint из репозитория ppa

Содержание:

WireGuard logo

Установка WireGuard из репозитория ppa

WireGuard имеет собственный репозиторий PPA, который нам нужно добавить, чтобы установить последнюю версию и поддерживать ее в актуальном состоянии.

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update # you can skip this on Ubuntu 18.04
sudo apt-get install wireguard

WireGuard работает как модуль ядра, который устанавливается с помощью DKMS, поэтому каждый раз, когда вы обновляете ядро, модуль ядра WireGuard автоматически компилируется и готов к использованию для вашего нового ядра. Чтобы использовать модуль ядра сразу после установки, вам нужно либо перезагрузить компьютер, либо запустить modprobe, чтобы активировать его:

sudo modprobe Wireguard

Проверить, загружен ли модуль ядра, можно с помощью lsmod | grep wireguard. Если модуль правильно загружен, вы должны увидеть результат, подобный этому:

root@wg-server:~# lsmod | grep wireguard
wireguard 208896 0
ip6_udp_tunnel 16384 1 wireguard
udp_tunnel 16384 1 wireguard
root@wg-server:~#

Теперь вы готовы перейти к следующему шагу.

Генерация ключей WireGuard

WireGuard поставляется с двумя полезными утилитами командной строки: wg и wg-quick. wg — это конфигурационная утилита для получения и настройки конфигурации туннельных интерфейсов WireGuard. wg-quick, с другой стороны, представляет собой простой скрипт для быстрого вызова интерфейса WireGuard.

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

cd /etc/wireguard
sudo umask 077
sudo wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey

Это создаст два файла: открытый и закрытый ключ, которые будут содержать открытый и закрытый ключ соответственно.

Совет от профессионалов: вы можете использовать wireguard-vanity-address для генерации красивого открытого ключа, например, который начинается с определенных символов. Если его открытый ключ начинается с «pho» :), легче определить соединение вашего мобильного телефона в списке пиров. Имейте в виду, что вам понадобится безопасный транспорт, чтобы перенести закрытый ключ на устройство. Как правило, не рекомендуется иметь закрытый ключ на другом устройстве, кроме того, которое будет его использовать.

Вам нужно будет сгенерировать пару ключей для каждого подключенного однорангового узла (устройства). Так, например, если у вас есть ноутбук и мобильный телефон, вам понадобятся 3 пары ключей. Одна пара на сервере, одна на ноутбуке и одна на мобильном телефоне. В зависимости от клиента WireGuard, который вы используете, вы, вероятно, сможете сгенерировать ключи на самом устройстве.

Конфигурация WireGuard

Затем нам нужно создать конфигурацию для устройства wg0, которое будет маршрутизировать наш VPN-трафик. Его не обязательно называть wg0 — вы можете называть устройство как хотите, wg0 — это просто соглашение.

Вам нужно будет выбрать IP-подсеть, которая будет использоваться для вашей сети VPN. В этом примере я использую 10.10.0.1/24. Убедитесь, что вы выбрали подсеть, которая не используется вашей домашней и / или рабочей сетями, иначе вы либо не сможете получить доступ к устройствам в локальной сети, либо настройка не будет работать вообще.

Используя ваш любимый редактор (vim, nano и т. Д.) Создайте /etc/wireguard/wg0.conf со следующим содержимым:

[Interface]
PrivateKey = <your server private key here>
Address = 10.10.0.1/24
Address = fd86:ea04:1111::1/64
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
ListenPort = 51820

Внимание: убедитесь, что вы заменили <your server private key here> на свой фактический закрытый ключ, который вы сгенерировали на предыдущем шаге, 10.10.0.1/24, fd172.21: 12 :: 1/64 на фактические IP-адреса, которые вы намереваетесь использовать (если отличается), и ens3 с именем основного сетевого интерфейса вашего сервера (который вы подключаетесь к Интернету, например, с помощью eth0), если он отличается от ens3. Вы можете посмотреть свои сетевые интерфейсы с помощью команд ifconfig или ip a.

Конфигурация, возможно, не требует пояснений, за исключением опции SaveConfig. В отличие от OpenVPN или других серверов VPN, WireGuard не требует «перезапуска» или «перезагрузки», чтобы клиент мог подключиться — все, что вам нужно сделать, это использовать утилиту командной строки wg, чтобы добавить своего партнера, и вы могут подключиться сразу.

Однако это операция в памяти, и если вы перезапустите сервер, ваши добавленные одноранговые узлы исчезнут. Вот когда появляется опция SaveConfig! Эта опция используется, чтобы указать wg-quick автоматически сохранять вновь добавленных пиров в ваш файл конфигурации. Это также может вас укусить — если вы редактируете файл во время работы интерфейса — вы потеряете свои изменения при перезапуске.

Имейте в виду, что используемый нами файл конфигурации wg-quick является надмножеством (своего рода) файла конфигурации, принятого wg. По этой причине вы не можете использовать этот файл конфигурации напрямую с wg, а только с wg-quick.

Внимание! Обязательно проверить включен ли ip_forwarding в файле /etc/sysctl.conf на сервере, то-есть смотрим раскомментированы ли строки:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

Для этого редактором текста открываем файл /etc/sysctl.conf :

sudo nano /etc/sysctl.conf

и снимаем (если есть) знак «#» в этих строках:

...# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
# Enabling this option disables Stateless Address Autoconfiguration
# based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1
...

После этого нужно включить изменения с помощью sysctl -p:

sudo sysctl -p

Теперь вы можете открыть свой интерфейс wg0:

sudo wg-quick up wg0

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

root@wg-server:~# wg
interface: wg0
public key: wYHnSnbRraJNooN5gjNtH5SLS1tw/0xehAVbU9bgIxA=
private key: (hidden)
listening port: 51820

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

Теперь, когда наш VPN-сервер запущен, мы можем подключить к нему наших клиентов. В этом примере также будет использоваться Ubuntu 18.04 для клиента, но шаги аналогичны для других операционных систем. Некоторые клиенты с графическим интерфейсом также предлагают сгенерировать или импортировать конфигурацию из файла.

Если вы используете дистрибутив Linux, вы можете использовать официальную страницу установки, чтобы найти команды для установки WireGuard. В качестве альтернативы доступны несколько клиентов с графическим интерфейсом, которые вы можете использовать:

macOS: https://itunes.apple.com/us/app/wireguard/id1451685025
Gnome’s Network-Manager: https://github.com/max-moser/network-manager-wireguard
Android: https://play.google.com/store/apps/details?id=com.wireguard.android
iOS: https://itunes.apple.com/us/app/wireguard/id1441195209

Официального клиента Windows пока нет, но есть и другие проприетарные опции, такие как Tunsafe.

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

Добавление пиров WireGuard

Конфигурация клиента аналогична конфигурации сервера с небольшими отличиями. Установка — такая же. Прежде всего, вы должны сгенерировать пару ключей, как мы это делали для сервера. После этого вам нужно настроить сетевой интерфейс, который мы также назовем wg0.

На клиентском устройстве создайте файл /etc/wireguard/wg0.conf со следующим содержимым:

[Interface]
Address = 10.10.0.2/32
Address = fd86:ea04:1111::2/128
SaveConfig = true
PrivateKey = <your client private key here>
DNS = 1.1.1.1

[Peer]
PublicKey = <your server public key here>
Endpoint = <your server public ip>:51820
AllowedIPs = 0.0.0.0/0, ::/0

Обязательно замените закрытый ключ клиента, открытый ключ сервера и IP-адрес сервера соответственно.

AllowedIPs будут использоваться для определения того, какой трафик пересылать через VPN.  Устанавливая для него значение 0.0.0.0/0, :: / 0, вы указываете своему VPN-клиенту направлять весь трафик через ваш VPN-сервер. 0.0.0.0/0 можно заменить на адрес определенной подсети. Тогда VPN-клиент будет направлять трафик только указанной подсети через ваш VPN-сервер. например:

AllowedIPs = 192.168.1.0/24

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

chmod 600 /etc/wireguard/wg0.conf

В качестве следующего шага вы можете добавить открытый ключ клиента на свой сервер. Выполните эту команду на своем сервере:

wg set wg0 peer <client-public-key> allowed-ips 10.10.0.2/32,fd86:ea04:1111::2/128

Обязательно замените фактическим открытым ключом вашего клиента и настройте IP-адреса вашего клиента, если они отличаются. Затем вы можете запустить wg, чтобы подтвердить, что ваш партнер был успешно добавлен. Результат должен выглядеть примерно так:

root@wg-server:~# wg
interface: wg0
public key: wYHnSnbRraJNooN5gjNtH5SLS1tw/0xehAVbU9bgIxA=
private key: (hidden)
listening port: 51820

peer: m5S0sA0NWlbEU6+5oegudniHgwF07GSKcWs2tt3LZEI=
allowed ips: 10.10.0.2/32, fd86:ea04:1111::/128

Теперь вы можете активировать интерфейс wg0 на своем клиентском устройстве с помощью команды wg-quick up wg0. Результат должен выглядеть примерно так:

# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip address add 10.10.0.2/32 dev wg0
[#] ip address add fd86:ea04:1111::2/128 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0

Вы также можете запустить утилиту wg и проверить вывод активных интерфейсов и подключенных узлов.

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

Запуск VPN WireGuard при запуске системы

Поскольку Ubuntu использует systemd, вы можете легко включить WireGuard при загрузке системы:

systemctl enable wg-quick@wg0

Вы должны запустить эту команду как на сервере, так и на клиенте. Если вы используете клиент с графическим интерфейсом, вам, вероятно, не нужно запускать эту команду на клиенте.

Белый список портов брандмауэра

Если вы используете брандмауэр для внесения в белый список IP-адресов и / или портов, которые могут связываться с вашим сервером, вам нужно будет добавить исключение для порта, используемого вашим сервером WireGuard.

Перевод с английского из Источника

При перепечатке просьба вставлять активные ссылки на oslogic.ru
Copyright oslogic.ru © 2021 . All Rights Reserved.