
WireGuard — это современная технология VPN (виртуальной частной сети), использующая передовые технологии криптографии. По сравнению с другими популярными VPN-решениями, такими как IPsec и OpenVPN , WireGuard быстрее, проще в настройке и занимает меньше места. Он кроссплатформенный и может работать практически везде, включая Linux, Windows, Android и macOS.
Wireguard — это одноранговый VPN-сервис, не использующий модель клиент-сервер. В зависимости от конфигурации, одноранговый узел может действовать как традиционный сервер или клиент. Он работает, создавая сетевой интерфейс на каждом одноранговом устройстве, который действует как туннель. Одноранговые устройства аутентифицируют друг друга, обмениваясь и проверяя открытые ключи, имитируя модель SSH. Открытые ключи сопоставляются со списком IP-адресов, разрешённых в туннеле. VPN-трафик инкапсулируется в UDP.
В этой статье мы рассмотрим, как настроить WireGuard VPN в Ubuntu 20.04, который будет работать как VPN-сервер. Мы также покажем, как настроить WireGuard в качестве клиента. Трафик клиента будет направляться через сервер Ubuntu 20.04.
Эту настройку можно использовать в качестве защиты от атак типа «Человек посередине», анонимного просмотра веб-страниц, обхода геоограниченного контента или предоставления возможности вашим коллегам, работающим из дома, безопасно подключаться к корпоративной сети.
Предпосылки
Чтобы следовать этому руководству, вам понадобится сервер Ubuntu 20.04 с правами root или sudo .
Настройка сервера WireGuard
Начнём с установки WireGuard на машину с Ubuntu и настройки его в качестве сервера. Также мы настроим систему для маршрутизации клиентского трафика через него.
Установка WireGuard в Ubuntu 20.04
WireGuard доступен в стандартных репозиториях Ubuntu. Чтобы установить его, выполните следующие команды:
sudo apt updatesudo apt install wireguard
Это установит модуль и инструменты WireGuard.
WireGuard работает как модуль ядра.
Настройка WireGuard
Инструменты командной строки wg и wg-quick позволяют настраивать и управлять интерфейсами WireGuard.
Каждое устройство в сети WireGuard VPN должно иметь закрытый и открытый ключи. Выполните следующую команду, чтобы сгенерировать пару ключей:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Файлы будут созданы в каталоге /etc/wireguard . Вы можете просмотреть содержимое файлов с помощью cat или less . Закрытый ключ никогда не следует передавать третьим лицам и всегда хранить в безопасности.
Wireguard также поддерживает предварительный ключ, который добавляет дополнительный уровень симметричной криптографии. Этот ключ необязателен и должен быть уникальным для каждой пары узлов.
Следующим шагом является настройка туннельного устройства, которое будет маршрутизировать VPN-трафик.
Устройство можно настроить либо из командной строки с помощью команд ip и wg , либо создав файл конфигурации с помощью текстового редактора.
Создайте новый файл с именем wg0.conf и добавьте в него следующее содержимое:
sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[Interface] Address = 10.0.0.1/24 SaveConfig = true ListenPort = 51820 PrivateKey = SERVER_PRIVATE_KEY PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
Интерфейс можно назвать как угодно, однако рекомендуется использовать что-то вроде wg0 или wgvpn0 . Настройки в разделе интерфейса имеют следующие значения:
-
Адрес — список IP-адресов версии 4 или 6, разделённых запятыми, для интерфейса
wg0. Используйте IP-адреса из диапазона, зарезервированного для частных сетей (10.0.0.0/8, 172.16.0.0/12 или 192.168.0.0/16). -
ListenPort — порт прослушивания.
-
PrivateKey — закрытый ключ, сгенерированный командой
wg genkey. (Чтобы просмотреть содержимое файла, введите:sudo cat /etc/wireguard/privatekey) -
SaveConfig — если установлено значение true, текущее состояние интерфейса сохраняется в файле конфигурации при завершении работы.
-
PostUp — команда или скрипт, выполняемый перед активацией интерфейса. В этом примере мы используем iptables для включения маскарадинга. Это позволяет трафику покидать сервер, предоставляя VPN-клиентам доступ в Интернет.
Обязательно замените
ens3после-A POSTROUTINGна имя вашего публичного сетевого интерфейса. Вы можете легко найти интерфейс с помощью:ip -o -4 route show to default | awk '{print $5}' -
PostDown — команда или скрипт, выполняемый перед отключением интерфейса. Правила iptables будут удалены после отключения интерфейса.
Файлы wg0.conf и privatekey не должны быть доступны для чтения обычным пользователям. Используйте chmod , чтобы установить права доступа 600 :
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
После этого поднимите интерфейс wg0 , используя атрибуты, указанные в файле конфигурации:
sudo wg-quick up wg0
Команда выведет результат, аналогичный следующему:
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.0.0.1/24 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Чтобы проверить состояние и конфигурацию интерфейса, введите:
sudo wg show wg0
interface: wg0 public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg= private key: (hidden) listening port: 51820
Вы также можете запустить ip a show wg0 для проверки состояния интерфейса:
ip a show wg0
4: wg0: mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 10.0.0.1/24 scope global wg0 valid_lft forever preferred_lft forever
WireGuard также можно управлять с помощью Systemd.
Чтобы включить интерфейс WireGuard во время загрузки, выполните следующую команду:
sudo systemctl enable wg-quick@wg0
Конфигурация серверной сети и брандмауэра
Для работы NAT необходимо включить переадресацию IP-адресов. Откройте файл /etc/sysctl.conf и добавьте или раскомментируйте следующую строку:
sudo nano /etc/sysctl.conf
/etc/sysctl.conf
net.ipv4.ip_forward = 1
Сохраните файл и примените изменения:
sudo sysctl -p
net.ipv4.ip_forward = 1
Если вы используете UFW для управления брандмауэром, вам необходимо открыть UDP-трафик на порту 51820 :
sudo ufw allow 51820/udp
Вот и всё. Узел Ubuntu, который будет выполнять функции сервера, настроен.
Настройка клиентов Linux и macOS
Инструкции по установке для всех поддерживаемых платформ доступны по адресу https://wireguard.com/install/ . В системах Linux пакет можно установить с помощью менеджера пакетов дистрибутива, а в macOS — с помощью brew .
После установки выполните следующие действия для настройки клиентского устройства.
Процесс настройки клиента для Linux и macOS практически такой же, как и для сервера. Сначала сгенерируйте открытый и закрытый ключи:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Создайте файл wg0.conf и добавьте в него следующее содержимое:
sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[Interface] PrivateKey = CLIENT_PRIVATE_KEY Address = 10.0.0.2/24 [Peer] PublicKey = SERVER_PUBLIC_KEY Endpoint = SERVER_IP_ADDRESS:51820 AllowedIPs = 0.0.0.0/0
Настройки в разделе интерфейса имеют то же значение, что и при настройке сервера:
- Адрес — список IP-адресов v4 или v6, разделенных запятыми, для интерфейса
wg0. - PrivateKey — чтобы просмотреть содержимое файла на клиентской машине, выполните:
sudo cat /etc/wireguard/privatekey
Раздел «Пэры» содержит следующие поля:
- PublicKey — открытый ключ узла, к которому вы хотите подключиться. (Содержимое файла
/etc/wireguard/publickeyсервера). - Конечная точка — IP-адрес или имя хоста однорангового узла, к которому вы хотите подключиться, за которым следует двоеточие, а затем номер порта, на котором удаленный одноранговый узел прослушивает данные.
- AllowedIPs — список IP-адресов v4 или v6, разделённых запятыми, с которых разрешён входящий трафик для однорангового узла и на которые направляется исходящий трафик этого однорангового узла. Мы используем 0.0.0.0/0, поскольку маршрутизируем трафик и хотим, чтобы одноранговый сервер отправлял пакеты с любого исходного IP-адреса.
Если вам необходимо настроить дополнительных клиентов, просто повторите те же шаги, используя другой частный IP-адрес.
Настройка клиентов Windows
Загрузите и установите пакет Windows msi с сайта WireGuard .
После установки откройте приложение WireGuard и нажмите «Добавить туннель» -> «Добавить пустой туннель…», как показано на изображении ниже:

Пара открытых ключей автоматически создается и отображается на экране.

Введите имя туннеля и отредактируйте конфигурацию следующим образом:
[Interface] PrivateKey = CLIENT_PRIVATE_KEY Address = 10.0.0.2/24 [Peer] PublicKey = SERVER_PUBLIC_KEY Endpoint = SERVER_IP_ADDRESS:51820 AllowedIPs = 0.0.0.0/0
В разделе интерфейса добавьте новую строку для определения адреса клиентского туннеля.
В разделе «Пэры» добавьте следующие поля:
- PublicKey — открытый ключ сервера Ubuntu (файл
/etc/wireguard/publickey). - Конечная точка — IP-адрес сервера Ubuntu, за которым следует двоеточие и порт WireGuard (51820).
- Разрешенные IP-адреса — 0.0.0.0/0
После этого нажмите кнопку «Сохранить».
Добавить клиентский узел к серверу
Последний шаг — добавить открытый ключ и IP-адрес клиента на сервер. Для этого выполните следующую команду на сервере Ubuntu:
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
Обязательно замените CLIENT_PUBLIC_KEY на открытый ключ, сгенерированный на клиентском компьютере ( sudo cat /etc/wireguard/publickey ), и скорректируйте IP-адрес клиента, если он отличается. Пользователи Windows могут скопировать открытый ключ из приложения WireGuard.
После этого вернитесь на клиентскую машину и откройте интерфейс туннелирования.
Клиенты Linux и macOS
Выполните следующую команду, чтобы открыть интерфейс:
sudo wg-quick up wg0
Теперь вы должны быть подключены к серверу Ubuntu, и трафик с вашего клиентского компьютера должен проходить через него. Вы можете проверить подключение с помощью:
sudo wg
interface: wg0 public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo= private key: (hidden) listening port: 53527 fwmark: 0xca6c peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg= endpoint: XXX.XXX.XXX.XXX:51820 allowed ips: 0.0.0.0/0 latest handshake: 53 seconds ago transfer: 3.23 KiB received, 3.50 KiB sent
Вы также можете открыть браузер, ввести «какой у меня IP-адрес», и вы увидите IP-адрес вашего сервера Ubuntu.
Чтобы остановить туннелирование, отключите интерфейс wg0 :
sudo wg-quick down wg0
Клиенты Windows
Если вы установили WireGuard в Windows, нажмите кнопку «Активировать». После подключения пиров статус туннеля изменится на «Активен»:

Заключение
Мы показали вам, как установить WireGuard на компьютер с Ubuntu 20.04 и настроить его в качестве VPN-сервера. Такая настройка позволяет вам анонимно пользоваться интернетом, сохраняя конфиденциальность данных о вашем трафике.
Если у вас возникли какие-либо проблемы, не стесняйтесь оставлять комментарии.
Безопасность VPN в Ubuntu Не используете Ubuntu 20.04?
Выберите другую ОС: центос 8 дебиан 10 убунту 18.04
Связанные руководства
- Как настроить WireGuard VPN в Ubuntu 18.04
- Как настроить OpenVPN-сервер в Ubuntu 18.04
- Как установить и настроить Fail2ban в Ubuntu 20.04
- Как настроить SSH-ключи в Ubuntu 20.04
- Как настроить WireGuard VPN на CentOS 8
- Как настроить брандмауэр с UFW в Ubuntu 20.04
- Как настроить WireGuard VPN в Debian 10