
WireGuard — это современная технология VPN (виртуальной частной сети) с передовой криптографией. По сравнению с другими аналогичными решениями, такими как IPsec и OpenVPN , WireGuard быстрее, проще в настройке и производительнее. Он кроссплатформенный и может работать практически на любой платформе, включая Linux, Windows, Android и macOS. WireGuard — это одноранговый VPN-сервис, не использующий модель клиент-сервер. В зависимости от конфигурации, одноранговый узел может выступать в роли традиционного сервера или клиента.
WireGuard работает, создавая сетевой интерфейс на каждом одноранговом устройстве, который действует как туннель. Одноранговые устройства аутентифицируют друг друга, обмениваясь и проверяя открытые ключи, имитируя модель SSH. Открытые ключи сопоставляются со списком IP-адресов, разрешённых в туннеле. VPN-трафик инкапсулируется в UDP.
В этом руководстве мы настроим WireGuard на компьютере с Ubuntu 18.04, который будет работать как VPN-сервер. Мы также покажем, как настроить WireGuard в качестве клиента. Трафик клиента будет направляться через сервер Ubuntu 18.04.
Эту настройку можно использовать в качестве защиты от атак типа «Человек посередине», анонимного просмотра веб-страниц, обхода геоограниченного контента или предоставления возможности вашим коллегам безопасно подключаться к корпоративной сети при удаленной работе.
Предпосылки
Вам понадобится сервер Ubuntu 18.04, к которому вы можете получить доступ как пользователь root или как учетная запись с привилегиями sudo .
Настройка сервера WireGuard
В этом разделе мы установим WireGuard на машину с Ubuntu и настроим его в качестве сервера. Мы также настроим систему для маршрутизации клиентского трафика через него.
Установка WireGuard в Ubuntu 18.04
WireGuard входит в стандартные репозитории Ubuntu. Чтобы установить его, выполните следующие команды:
sudo apt updatesudo apt install wireguard
WireGuard работает как модуль ядра, скомпилированный как модуль DKMS. В случае успешного завершения вы увидите следующий вывод:
wireguard: Running module version sanity check. - Original module - No original module exists within this kernel - Installation - Installing to /lib/modules/4.15.0-88-generic/updates/dkms/ depmod... DKMS: install completed.
При обновлении ядра модуль WireGuard будет скомпилирован для нового ядра.
Настройка WireGuard
WireGuard поставляется с двумя инструментами командной строки: wg и wg-quick , которые позволяют настраивать и управлять интерфейсами WireGuard.
Выполните следующую команду для генерации открытого и закрытого ключей:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Файлы будут созданы в каталоге /etc/wireguard . Вы можете просмотреть их с помощью cat или less . Закрытый ключ не следует передавать никому.
Теперь, когда ключи сгенерированы, нам нужно настроить туннельное устройство, которое будет маршрутизировать трафик 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-адресов v4 или v6, разделённых запятыми, для интерфейса
wg0. Используйте IP-адреса из диапазона, зарезервированного для частных сетей (10.0.0.0/8, 172.16.0.0/12 или 192.168.0.0/16). -
ListenPort — порт, на котором WireGuard будет принимать входящие соединения.
-
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
Запустите wg show wg0 чтобы проверить состояние и конфигурацию интерфейса:
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 во время загрузки, выполните следующую команду:
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 . После установки WireGuard выполните следующие действия для настройки клиентского устройства.
Процесс настройки клиента для 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-адрес клиента на сервер:
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
На клиентах Linux выполните следующую команду, чтобы открыть интерфейс:
sudo wg-quick up wg0
Теперь вы должны быть подключены к серверу Ubuntu, и трафик с вашего клиентского компьютера должен проходить через него. Вы можете проверить подключение с помощью:
sudo wg
interface: wg0 public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg= private key: (hidden) listening port: 48052 fwmark: 0xca6c peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg= endpoint: XXX.XXX.XXX.XXX:51820 allowed ips: 0.0.0.0/0 latest handshake: 1 minute, 22 seconds ago transfer: 58.43 KiB received, 70.82 KiB sent
Вы также можете открыть браузер, ввести «какой у меня IP-адрес», и вы увидите IP-адрес вашего сервера Ubuntu.
Чтобы остановить туннелирование, отключите интерфейс wg0 :
sudo wg-quick down wg0
Клиенты Windows
Если вы установили WireGuard в Windows, нажмите кнопку «Активировать». После подключения пиров статус туннеля изменится на «Активен»:

Заключение
Мы показали вам, как установить WireGuard на компьютер с Ubuntu 18.04 и настроить его в качестве VPN-сервера. Такая настройка позволяет вам анонимно пользоваться интернетом, сохраняя конфиденциальность данных о вашем трафике.
Если у вас возникли какие-либо проблемы, не стесняйтесь оставлять комментарии.
Безопасность VPN в Ubuntu Не используете Ubuntu 18.04?
Выберите другую ОС: центос 8 дебиан 10 убунту 20.04
Связанные руководства
- Как настроить WireGuard VPN в Ubuntu 20.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