Поиск по сайту:

Как настроить WireGuard VPN в Ubuntu 22.04


Это руководство существует для этих версий ОС

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 20.04 (Focal Fossa)

На этой странице

  1. Предпосылки
  2. Шаг 1. Установка Wireguard и создание пары ключей
  3. Шаг 2. Выбор адресов IPv4 и IPv6
    1. Выбор диапазона IPv4
    2. Выбор диапазона IPv6

    1. Создание пары ключей Wireguard Peers
    2. Создайте файл конфигурации однорангового узла
    3. Настройте одноранговый узел для маршрутизации всего трафика через туннель.
    4. Настройка DNS-преобразователей одноранговых узлов

    Wireguard — это кроссплатформенная реализация виртуальной частной сети (VPN) с открытым исходным кодом, в которой используется современная криптография. Он поддерживает соединения IPv4 и IPv6. Он быстрее, проще и функциональнее протоколов IPSec и OpenVPN. Он разработан как VPN общего назначения для работы на встроенных интерфейсах и суперкомпьютерах и работает на Linux, Windows, macOS, iOS, Android и различных других платформах.

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

    В этом руководстве рассказывается, как установить Wireguard VPN на сервер Ubuntu 22.04 и подключиться к нему с помощью клиента Ubuntu.

    Предпосылки

    • A server running Ubuntu 22.04 supports both IPv4 and IPv6 connections.

    • A client running Ubuntu 22.04 to connect to the Wireguard server. For our tutorial, we will be using our local machine as our client but you can use a remote server for it.

    • A non-root user with sudo privileges.

    • The uncomplicated Firewall(UFW) is enabled and running.

    • Everything is updated.

      $ sudo apt update && sudo apt upgrade
      

    Шаг 1 — Установите Wireguard и сгенерируйте пару ключей

    Ubuntu 22.04 поставляется с последней версией Wireguard. Установите WireGuard.

    $ sudo apt install wireguard
    

    Следующим шагом является создание пары закрытого и открытого ключей для сервера. Создайте закрытый ключ для сервера с помощью команды wg genkey.

    $ wg genkey | sudo tee /etc/wireguard/private.key
    

    Измените разрешения для защиты закрытого ключа. Команда chmod go= блокирует доступ других пользователей и групп к файлу. Вы получите зашифрованный ключ на свой терминал. Обратите внимание на ключ, потому что он потребуется позже.

    $ sudo chmod go= /etc/wireguard/private.key
    

    Затем сгенерируйте соответствующий открытый ключ, полученный из закрытого ключа. Используйте wg pubkey для создания открытого ключа. Следующая команда состоит из трех частей, где первая часть выводит закрытый ключ, который используется командой wg pubkey для создания открытого ключа, который затем сохраняется в соответствующем файле.

    $ sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
    

    Вы снова получите открытый ключ на терминале. Запишите это.

    Шаг 2. Выбор адресов IPv4 и IPv6.

    Нам нужно определить частные адреса IPv4 и IPv6 для использования с вашим сервером Wireguard и пирами.

    Выбор диапазона IPv4

    Чтобы использовать Wireguard с одноранговыми узлами IPv4, серверу необходим диапазон частных IPv4-адресов для его туннельного интерфейса. Вы можете выбрать любой диапазон IP-адресов из следующих зарезервированных блоков адресов:

      От
    • 10.0.0.0 до 10.255.255.255 (префикс 10/8) От
    • 172.16.0.0 до 172.31.255.255 (префикс 172.16/12) От
    • 192.168.0.0 до 192.168.255.255 (префикс 192.168/16)

    В нашем руководстве мы будем использовать 10.8.0.0/24 в качестве блока IP-адресов из первого диапазона зарезервированных IP-адресов. Этот диапазон допускает до 255 одноранговых соединений. Вы также можете использовать диапазон частных IP-адресов, предоставленный вашей хостинговой компанией.

    Выбор диапазона IPv6

    В соответствии с алгоритмом RFC рекомендуемый способ получения уникального префикса IPv6 — объединить время суток с уникальным значением, таким как идентификатор машины. Затем эти значения хэшируются и усекаются для использования в качестве уникального адреса в зарезервированном частном блоке IP-адресов fd00::/8.

    Первый шаг — собрать 64-битную метку времени с помощью утилиты date.

    $ date +%s%N
    

    Он будет генерировать вывод, аналогичный следующему, который представляет собой количество секунд, прошедших с момента эпохи Unix (00:00 UTC 1 января 1970 г.).

    1659342559092041940
    

    Запишите значение для последующего использования. Затем скопируйте значение machine-id вашего сервера. Это значение уникально для каждой системы.

    $ cat /var/lib/dbus/machine-id
    

    Вы получите аналогичный результат.

    d97e195db6584d63aeedfdc35dc83c7f
    

    Затем объедините отметку времени с идентификатором_машины и хешируйте строку с помощью алгоритма SHA-1.

    printf <timestamp><machine-id> | sha1sum
    

    Замените значения и в приведенной выше команде. Вы получите другое значение хеш-функции.

    $ printf 1659342559092041940d97e195db6584d63aeedfdc35dc83c7f | sha1sum
    d789c02d9d8faef806d40ec15b307d4d9c8ec4bc  -
    

    Выполните следующую команду, чтобы обрезать вывод printf в соответствии с алгоритмом RFC.

    $ printf d789c02d9d8faef806d40ec15b307d4d9c8ec4bc | cut -c 31-
    

    Вы должны получить следующий вывод.

    4d9c8ec4bc
    

    В приведенном выше выводе набор байтов равен 4d 9c 8e c4 bc. Создайте адрес IPv6, добавив к 5 байтам выше префикс fd следующим образом.

    Используя байты, ранее сгенерированные с размером подсети /64, результирующий префикс будет следующим.

    Unique Local IPv6 Address Prefix
    fd4d:9c8e:c4bc::/64
    

    Чтобы выделить IP для сервера, добавьте 1 после последних символов ::. Результирующий адрес будет fd4d:9c8e:c4bc::1/64. Одноранговые узлы используют IP-адрес, добавляя еще одно приращение, такое как fd4d:9c8e:c4bc::2/64.

    Шаг 3 — Настройте Wireguard

    Сгенерируйте конфигурационный файл и откройте его для редактирования.

    $ sudo nano /etc/wireguard/wg0.conf
    

    Вставьте в него следующий код. Замените server_private_key закрытым ключом, сгенерированным на шаге 1. Вы можете изменить порт прослушивания на любой другой.

    [Interface]
    PrivateKey = server_private_key
    Address = 10.8.0.1/24, fd4d:9c8e:c4bc::/64
    ListenPort = 51820
    SaveConfig = true
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Шаг 4 — Настройте сеть Wireguard

    Чтобы направить трафик пиров через сервер Wireguard, вам необходимо настроить IP-переадресацию. Откройте файл /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
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса. Проверьте новые значения с помощью следующей команды.

    $ sudo sysctl -p
    net.ipv4.ip_forward = 1
    net.ipv6.conf.all.forwarding = 1
    vm.swappiness = 0
    

    Теперь ваш сервер Wireguard будет перенаправлять весь входящий трафик с Ethernet-устройства VPN на другие устройства на сервере, а оттуда — в общедоступный Интернет. Это позволяет серверу направлять весь веб-трафик от однорангового узла через IP-адрес сервера и скрывать IP-адрес клиента.

    Следующим шагом является настройка правил брандмауэра для правильной работы переадресации.

    Шаг 5. Настройте брандмауэр Wireguard Servers.

    Чтобы разрешить трафик VPN через брандмауэр серверов, вам необходимо включить маскировку, которая обеспечивает динамическую трансляцию сетевых адресов (NAT) на лету для маршрутизации клиентских подключений.

    Найдите общедоступный сетевой интерфейс вашего сервера Wireguard.

    $ ip route list default
    default via 209.23.8.1 dev eth0 proto static
    

    В соответствии с приведенной выше командой eth0 является общедоступным интерфейсом.

    Откройте файл конфигурации Wireguard, чтобы добавить правила брандмауэра на ваш сервер Wireguard.

    $ sudo nano /etc/wireguard/wg0.conf
    

    Вставьте следующие строки в конец файла после строки SaveConfig=true.

    . . .
    PostUp = ufw route allow in on wg0 out on eth0
    PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    PreDown = ufw route delete allow in on wg0 out on eth0
    PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Строки PostUp запускаются, когда сервер Wireguard запускает VPN-туннель. Первое правило разрешает пересылать трафик IPv4 и IPv6. Второе и третье правило настраивают маскировку трафика IPv4 и IPv6. Строки PreDown запускаются, когда сервер Wireguard останавливает VPN-туннель.

    Последним шагом в настройке брандмауэра является разрешение входящего и исходящего трафика через UDP-порт Wireguard. Используйте простой брандмауэр (UFW), чтобы открыть порт Wireguard.

    Проверьте состояние брандмауэра.

    $ sudo ufw status
    

    Вы должны увидеть что-то вроде следующего.

    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    

    Откройте порт 51820, настроенный на шаге 1. Если вы используете другой порт для Wireguard, откройте этот порт.

    $ sudo ufw allow 51820/udp
    

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

    $ sudo ufw disable
    $ sudo ufw enable
    

    Проверьте статус еще раз для подтверждения.

    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    51820/udp                  ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    51820/udp (v6)             ALLOW       Anywhere (v6)
    

    Ваш сервер Wireguard настроен на обработку трафика VPN, включая пересылку и маскировку для одноранговых узлов.

    Шаг 6 — Запустите сервер WireGuard

    Wireguard можно настроить для работы в качестве службы с помощью скрипта wg-quick. Включите службу Wireguard.

    $ sudo systemctl enable 
    

    Часть имени службы wg0 соответствует файлу /etc/wireguard/wg0.conf. Это означает, что вы можете создать столько туннелей VPN, сколько захотите, используя другой файл конфигурации и службу.

    Запустите службу Wireguard.

    $ sudo systemctl start 
    

    Проверить статус услуги.

    $ sudo systemctl status 
    

    Вы получите аналогичный результат.

    ?  - WireGuard via wg-quick(8) for wg0
         Loaded: loaded (/lib/systemd/system/; enabled; vendor preset: enabled)
         Active: active (exited) since Mon 2022-08-01 11:35:59 UTC; 6s ago
           Docs: man:wg-quick(8)
                 man:wg(8)
                 https://www.wireguard.com/
                 https://www.wireguard.com/quickstart/
                 https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
                 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
        Process: 3935 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
       Main PID: 3935 (code=exited, status=0/SUCCESS)
            CPU: 216ms
    
    Aug 01 11:35:58 wireguard wg-quick[3935]: [#] wg setconf wg0 /dev/fd/63
    Aug 01 11:35:58 wireguard wg-quick[3935]: [#] ip -4 address add 10.8.0.1/24 dev wg0
    Aug 01 11:35:58 wireguard wg-quick[3935]: [#] ip -6 address add fd4d:9c8e:c4bc::/64 dev wg0
    Aug 01 11:35:59 wireguard wg-quick[3935]: [#] ip link set mtu 1420 up dev wg0
    Aug 01 11:35:59 wireguard wg-quick[3935]: [#] ufw route allow in on wg0 out on eth0
    Aug 01 11:35:59 wireguard wg-quick[3978]: Rule added
    Aug 01 11:35:59 wireguard wg-quick[3978]: Rule added (v6)
    Aug 01 11:35:59 wireguard wg-quick[3935]: [#] iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    Aug 01 11:35:59 wireguard wg-quick[3935]: [#] ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    Aug 01 11:35:59 wireguard systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
    

    Шаг 7 — Установка и настройка узла Wireguard

    Установите клиент Wireguard на узле на базе Ubuntu 22.04.

    $ sudo apt update
    $ sudo apt install wireguard
    

    Если вы устанавливаете на локальный рабочий стол Ubuntu, скорее всего, Wireguard предустановлен.

    Создайте пару ключей Wireguard Peers

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

    $ wg genkey | sudo tee /etc/wireguard/private.key
    $ sudo chmod go= /etc/wireguard/private.key
    

    Создайте открытый ключ.

    $ sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
    

    Создайте файл конфигурации однорангового узла

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

    • Закодированный base64 закрытый ключ, сгенерированный на узле.
    • Диапазоны адресов IPv4 и IPv6, определенные на сервере Wireguard.
    • Открытый ключ в кодировке base64 с сервера Wireguard.
    • Общедоступный IP-адрес и номер порта сервера Wireguard. Если ваш сервер и клиент имеют соединение IPv6, вам необходимо использовать адрес IPv6.

    Создайте и откройте файл конфигурации Peer для редактирования.

    $ sudo nano /etc/wireguard/wg0.conf
    

    Вставьте в него следующий код.

    [Interface]
    PrivateKey = peer_private_key
    Address = 10.8.0.2/24
    Address = fd4d:9c8e:c4bc::2/64
    
    [Peer]
    PublicKey = JySX9hMJFyAqZA+mNvJsArKW7yY8I7ROsQKTZZR/RH8=
    AllowedIPs = 10.8.0.0/24, fd4d:9c8e:c4bc::/64
    Endpoint = 209.23.10.202:51820
    PersistentKeepalive = 15
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Первый ключ — это закрытый ключ, сгенерированный на узле. В первой адресной строке используется адрес IPv4 из выбранной ранее подсети. Во второй адресной строке используется адрес IPv6 из выбранной ранее подсети.

    Второй ключ — это открытый ключ, сгенерированный на сервере. AllowedIPs использует диапазоны IPv4 и IPv6, выбранные до этого, указывая одноранговому узлу отправлять трафик через VPN только в том случае, если целевая система имеет IP-адрес в любом из диапазонов. Вы можете опустить адреса IPv6, если используете только соединение IPv4.

    Настройте Peer для маршрутизации всего трафика через туннель

    Найдите IP-адрес, который система использует в качестве шлюза по умолчанию. Выполните следующую команду ip route.

    $ ip route list table main default
    

    Вы получите аналогичный результат.

    default via 69.28.84.1 dev eth0 proto static
    

    Обратите внимание на IP-адрес шлюза и имя устройства. Найдите общедоступный IP-адрес узла.

    $ ip -brief address show eth0
    

    Вы получите аналогичный результат.

    eth0             UP             69.28.84.160/23 2607:f170:14:13::910/64 fe80::200:45ff:fe1c:54a0/64
    

    Откройте файл конфигурации однорангового узла для редактирования.

    $ sudo nano /etc/wireguard/wg0.conf
    

    Вставьте следующие строки перед разделом [Peer].

    PostUp = ip rule add table 200 from 69.28.84.160
    PostUp = ip route add table 200 default via 69.28.84.1
    PreDown = ip rule delete table 200 from 69.28.84.160
    PreDown = ip route delete table 200 default via 69.28.84.1
    
    [Peer]
    . . .
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Команда PostUp создает правило для проверки любых записей маршрутизации в таблице 200, когда IP-адрес совпадает с общедоступным IP-адресом системы. Команда PreDown гарантирует, что трафик, обрабатываемый таблицей 200, использует для маршрутизации шлюз 203.0.113.1 вместо интерфейса Wireguard.

    Настройка DNS-преобразователей одноранговых узлов

    Выполните следующую команду на сервере, заменив eth0 именем вашего устройства Ethernet, если оно отличается.

    $ resolvectl dns eth0
    

    Вы получите аналогичный результат.

    Link 2 (eth0): 209.208.127.65 209.208.25.18 2001:4860:4860::8888 2001:4860:4860::8844
    

    Откройте файл конфигурации пиров.

    $ sudo nano /etc/wireguard/wg0.conf
    

    Добавьте следующий код перед строкой [Peer].

    DNS = 209.208.127.65 2001:4860:4860::8888
    
    [Peer]
    . . .
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Шаг 8. Добавление открытого ключа узла к серверу Wireguard

    Проверьте открытый ключ на узле Wireguard.

    $ sudo cat /etc/wireguard/public.key
    PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
    

    Выполните следующую команду на сервере Wireguard.

    $ sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2
    

    Чтобы обновить разрешенные IP-адреса для существующего однорангового узла, снова запустите приведенную выше команду, изменив IP-адрес.

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

    $ sudo wg
    interface: wg0
     public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
     private key: (hidden)
     listening port: 51820
    
    peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
     allowed ips: 10.8.0.2/32, fd24:609a:6c18::2/128
    

    Шаг 9 — Подключение узла к туннелю

    Установите пакет resolvconf, если вы направляете весь трафик через VPN.

    $ sudo apt install resolvconf
    

    Запустите туннель на узле.

    $ sudo wg-quick up wg0
    

    Вы получите аналогичный результат.

    [#] ip link add wg0 type wireguard
    [#] wg setconf wg0 /dev/fd/63
    [#] ip -4 address add 10.8.0.2/24 dev wg0
    [#] ip -6 address add fd4d:9c8e:c4bc::2/64 dev wg0
    [#] ip link set mtu 1420 up dev wg0
    [#] resolvconf -a tun.wg0 -m 0 -x
    [#] ip rule add table 200 from 69.28.84.160
    [#] ip route add table 200 default via 69.28.84.1
    

    Проверьте состояние туннеля на узле.

    $ sudo wg
    interface: wg0
     public key: nbkscqPcItMsFtv3R/ylrcC9knA+3F0Z/UVCkGx/DFw=
     private key: (hidden)
     listening port: 45392
    
    peer: JySX9hMJFyAqZA+mNvJsArKW7yY8I7ROsQKTZZR/RH8=
     endpoint: 209.23.10.202:51820
     allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64
     latest handshake: 23 seconds ago
     transfer: 92 B received, 212 B sent
     persistent keepalive: every 15 seconds
    

    Это подтверждает соединение между узлом и VPN.

    Убедитесь, что партнер использует VPN.

    $ ip route get 10.0.8.1
    10.0.8.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
       cache
    

    Если вы используете IPv6, используйте вместо этого следующую команду.

    $ ip -6 route get fd24:609a:6c18::1
    fd24:609a:6c18::1 from :: dev wg0 proto kernel src fd24:609a:6c18::2 metric 256 pref medium
    

    Используйте следующую команду для отключения однорангового узла.

    $ sudo wg-quick down wg0
    [#] ip link delete dev wg0
    [#] resolvconf -d tun.wg0 -f
    

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

    $ sudo wg set wg0 peer nbkscqPcItMsFtv3R/ylrcC9knA+3F0Z/UVCkGx/DFw= remove
    

    Заключение

    На этом руководство по установке и настройке Wireguard VPN на сервере Ubuntu 22.04 и подключению его к клиенту завершено. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.