Как установить и настроить WireGuard на Debian / Ubuntu

Введение

WireGuard это современный, быстрый и безопасный протокол VPN-туннелирования, который можно использовать для создания зашифрованных туннелей между машинами для создания частных сетей. Он стремится быть более простым, компактным и производительным, чем старые VPN-протоколы, такие как IPsec и OpenVPN.

В этом руководстве мы рассмотрим полный процесс настройки WireGuard на серверах Debian или Ubuntu Linux. Это позволит вам создавать зашифрованные соединения между серверами, направлять трафик через VPN-туннели и, по сути, создавать виртуальную частную сеть.

Мы рассмотрим:

  • Установка WireGuard
  • Генерация ключей и конфигурация
  • Создание интерфейсов и пиров
  • Маршрутизация трафика через VPN-туннель
  • Постоянная IP-адресация
  • Включение переадресации IP-адресов
  • NAT для разрешения подключений от удаленных пиров
  • Интеграция Systemd и запуск при загрузке

К концу работы у вас должна быть полностью функционирующая установка WireGuard на Debian или Ubuntu, которая может безопасно туннелировать трафик между серверами.

Предварительные условия

Прежде чем мы приступим к работе, необходимо выполнить несколько предварительных условий:

  • Debian 10 или выше, или Ubuntu 18.04 или выше на всех машинах
  • Root-доступ (привилегии sudo) на всех машинах
  • Базовое понимание сетевых технологий Linux (IP-адреса, подсети, маршрутизация и т.д.)

Настройка будет проводиться на двух или более машинах, которые могут взаимодействовать по сети. Для тестирования можно использовать локальные виртуальные машины, серверы или облачные машины.

Инструкции подойдут для настройки WireGuard между любыми конечными точками — это не обязательно должны быть только серверы Debian/Ubuntu. Клиенты WireGuard доступны для всех основных платформ.

Установка WireGuard

Первым шагом будет установка пакета WireGuard на все машины, которые будут участвовать в VPN-туннеле.

На Debian

$ sudo apt update
$ sudo apt install wireguard

На Ubuntu

$ sudo apt update 
$ sudo apt install wireguard

Это позволит установить модуль WireGuard и такие инструменты пользовательского пространства, как wg и wg-quick.

Генерация ключей и конфигурация

Теперь нам нужно сгенерировать пары открытых и закрытых ключей, которые будут использоваться WireGuard для создания зашифрованных туннелей. Каждой машине, участвующей в VPN, потребуется свой собственный закрытый ключ и соответствующий открытый ключ.

Сгенерируйте закрытый ключ с помощью:

$ wg genkey > privatekey

Это создаст новый закрытый ключ и сохранит его в privatekey.

Далее сгенерируйте открытый ключ:

$ wg pubkey < privatekey > publickey

Сделайте это для каждого сервера, который будет входить в VPN. Убедитесь, что файл с закрытым ключом надежно хранится на каждой машине. Открытый ключ можно свободно распространять.

Далее нам нужно создать конфигурационный файл, в котором будут указаны интерфейс, пиры/конечные точки и ключи.

Создайте файл с именем wg0.conf:

$ sudo nano /etc/wireguard/wg0.conf

Добавьте следующее содержимое, заменив PublicKey и PrivateKey на свои собственные для каждого сервера:

[Interface] 
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = SERVER1_PRIVATE_KEY
[Peer]
PublicKey = SERVER2_PUBLIC_KEY 
AllowedIPs = 10.0.0.2/32

Таким образом, для двух серверов вы можете иметь:

Сервер 1:

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820  
PrivateKey = SERVER1_PRIVATE_KEY
[Peer]
PublicKey = SERVER2_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32

Сервер 2:

[Interface]  
Address = 10.0.0.2/24
ListenPort = 51820
PrivateKey = SERVER2_PRIVATE_KEY
[Peer]
PublicKey = SERVER1_PUBLIC_KEY
AllowedIPs = 10.0.0.1/32

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

Параметры ListenPort и PrivateKey необходимы в параметре [Interface] разделе. Затем добавьте [Peer] раздел для каждого сервера, к которому вы хотите подключиться, используя его PublicKey.

Вы можете добавить больше пиров, добавив дополнительные [Peer] секции. Не забудьте также добавить IP-адрес пира в AllowedIPs.

Сохраните файл конфигурации и включите переадресацию IP-адресов (объяснение ниже).

Создание интерфейсов и пиров

Теперь, когда конфигурация готова, мы можем создать интерфейс и установить одноранговые соединения:

$ sudo wg-quick up wg0

Это настроит интерфейс wg0, используя данные из wg0.conf.

Выполните ту же команду wg-quick на каждом сервере, чтобы запустить их VPN-интерфейсы. Пиры подключатся, используя открытые ключи, и начнут туннелировать трафик.

Вы можете проверить состояние интерфейса с помощью:

$ sudo wg show

Это покажет такие детали, как открытый ключ, порт прослушивания и пиры для интерфейса.

На этом этапе ваш VPN-туннель WireGuard активен! Теперь трафик между пиринговыми серверами будет проходить по туннелям в зашифрованном виде.

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

Маршрутизация трафика через VPN-туннель

При включенной IP-переадресации трафик может быть отправлен между пирами WireGuard и направлен через зашифрованный VPN-туннель.

Чтобы включить переадресацию на Debian/Ubuntu:

$ sudo sysctl -w net.ipv4.ip_forward=1

Сделать это постоянным при перезагрузке:

$ sudo nano /etc/sysctl.conf

Откомментируйте строку:

net.ipv4.ip_forward=1

Сохраните файл и перезагрузитесь или выполните sudo sysctl -p, чтобы загрузить новые настройки.

Теперь трафик может быть направлен между VPN-адресами. Однако соединение оборвется, как только вы перезапустите сервер, поскольку конфигурация wg-quick не является постоянной.

Для автоматического включения VPN при загрузке нам нужно интегрировать WireGuard с systemd.

Интеграция Systemd и запуск при загрузке

Чтобы WireGuard запускался при загрузке и сохранялся при перезагрузке, нам нужно настроить службу systemd.

Создайте новый файл службы systemd:

$ sudo nano /etc/systemd/system/[email protected]

Вставьте следующее:

[Unit]
Description=WireGuard VPN tunnel for %i
After=network-online.target nss-lookup.target
Wants=network-online.target nss-lookup.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/wg-quick up %i
ExecStop=/usr/bin/wg-quick down %i
[Install]
WantedBy=multi-user.target

Это позволит запускать и останавливать VPN-туннель с помощью wg-quick.

Теперь включите службу:

$ sudo systemctl enable wg-quick@wg0

Это создаст службу systemd, которая запускает wg-quick при загрузке.

Перезагрузите ваши серверы, и WireGuard должен появиться автоматически! Проверьте это с помощью wg show.

Постоянная IP-адресация

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

Чтобы назначить постоянные статические IP, используемые только для VPN-соединений, добавьте опцию PersistentKeepalive в секции пиров:

[Peer]
PublicKey = PEER_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32  
Endpoint = PEER_PUBLIC_IP:51820
PersistentKeepalive = 25

Это позволит пинговать пир каждые 25 секунд, чтобы поддерживать актуальность последнего IP-адреса.

Вы также можете явно задать IP конечной точки, как описано выше, если публичный IP никогда не меняется.

NAT для разрешения подключений от удаленных пиров

В большинстве случаев вы захотите разрешить подключения к вашему VPN-серверу от удаленных пользователей/клиентов через Интернет.

Это означает открытие и перенаправление порта прослушивания WireGuard (UDP 51820 по умолчанию).

Если вы находитесь за брандмауэром NAT, добавьте эти правила переадресации портов:

# Forward port 51820 inbound to the WireGuard server
$ iptables -A INPUT -p udp --dport 51820 -j ACCEPT
$ iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
# Forward traffic from WireGuard server back out to internet
$ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

Также необходимо настроить правила переадресации портов на маршрутизаторе для отправки входящего трафика UDP 51820 на сервер WireGuard.

Теперь удаленные пользователи смогут подключаться к публичному IP-адресу вашего сервера через порт 51820 в Интернете.

Конфигурация клиента

Для подключения клиентов, например мобильных устройств, просто установите приложение WireGuard и используйте открытый IP-адрес сервера и открытый ключ в конфигурации клиента.

Вот пример конфигурации мобильного клиента:

[Interface]  
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.3
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_PUBLIC_IP:51820
AllowedIPs = 0.0.0.0/0

При подключении весь трафик клиента будет направляться через VPN-туннель.

Это полная настройка WireGuard на Debian и Ubuntu!

Резюме

Ваши серверы Debian или Ubuntu теперь должны иметь зашифрованные туннели WireGuard между собой. Трафик будет направляться через туннели, защищённые современной криптографией.

WireGuard быстр, прост и экономичен по сравнению с такими альтернативами, как IPsec или OpenVPN. Это идеальный VPN для безопасного соединения инфраструктуры через Интернет.

Существует множество дополнительных опций для настройки и расширения вашей системы WireGuard — за более подробной информацией обращайтесь к документации проекта.

Надеюсь, это руководство было полезным для настройки WireGuard на ваших системах Debian или Ubuntu! Дайте мне знать, если у вас возникнут другие вопросы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *