скопировано отсюда. Перевод гугла
Вступление
WireGuard — это облегченная виртуальная частная сеть (VPN), поддерживающая соединения IPv4 и IPv6. VPN позволяет вам проходить через ненадежные сети, как если бы вы были в частной сети. Это дает вам свободу безопасного и надежного доступа в Интернет со смартфона или ноутбука при подключении к ненадежной сети, такой как Wi-Fi в отеле или кафе.
Шифрование WireGuard основано на открытых и закрытых ключах, позволяющих одноранговым узлам устанавливать зашифрованный туннель между собой. Каждая версия WireGuard использует определенный набор криптографических шифров, чтобы обеспечить простоту, безопасность и совместимость с одноранговыми узлами.
Для сравнения, другое программное обеспечение VPN, такое как OpenVPN и IPSec, использует безопасность транспортного уровня (TLS) и сертификаты для аутентификации и установления зашифрованных туннелей между системами. Различные версии TLS включают поддержку сотен различных криптографических наборов и алгоритмов, и хотя это обеспечивает большую гибкость для поддержки различных клиентов, это также делает настройку VPN, использующей TLS, более трудоемкой, сложной и подверженной ошибкам.
В этом руководстве вы настроите WireGuard на сервере Ubuntu 22.04, а затем настроите другой компьютер для подключения к нему в качестве однорангового узла, используя соединения IPv4 и IPv6 (обычно называемое соединением с двойным стеком ). Вы также узнаете, как направлять интернет-трафик партнера через сервер WireGuard в конфигурации шлюза в дополнение к использованию VPN для зашифрованного однорангового туннеля.
Для целей этого руководства мы настроим другую систему Ubuntu 22.04 в качестве партнера (также называемого клиентом) для сервера WireGuard. В последующих руководствах этой серии объясняется, как установить и запустить WireGuard в системах и устройствах Windows, macOS, Android и iOS.
Шаг 1 — Установка WireGuard и создание пары ключей
Первым шагом в этом руководстве является установка WireGuard на ваш сервер. Для начала обновите индекс пакетов вашего сервера WireGuard и установите WireGuard, используя следующие команды. Вам может быть предложено ввести пароль пользователя sudo, если вы используете его впервые sudo
в этом сеансе:
sudo apt update sudo apt install wireguard
Теперь, когда у вас установлен WireGuard, следующим шагом будет создание пары закрытого и открытого ключей для сервера. Вы будете использовать встроенные команды wg genkey
и wg pubkey
для создания ключей, а затем добавите закрытый ключ в файл конфигурации WireGuard.
Вам также потребуется изменить права доступа к ключу, который вы только что создали с помощью chmod
команды, так как по умолчанию файл доступен для чтения любому пользователю на вашем сервере.
Создайте закрытый ключ для WireGuard и измените его разрешения с помощью следующих команд:
wg genkey | sudo tee /etc/wireguard/private.key
sudo chmod go= /etc/wireguard/private.key
Команда sudo chmod go=...
удаляет все разрешения на файл для пользователей и групп, кроме пользователя root, чтобы гарантировать, что только он может получить доступ к закрытому ключу.
Вы должны получить одну строку base64
закодированного вывода, которая является закрытым ключом. Копия выходных данных также сохраняется в /etc/wireguard/private.key
файле для дальнейшего использования tee
частью команды. Внимательно запишите полученный закрытый ключ, так как вам нужно будет добавить его в файл конфигурации WireGuard позже в этом разделе.
Следующим шагом является создание соответствующего открытого ключа, который является производным от закрытого ключа. Используйте следующую команду для создания файла открытого ключа:
sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
Эта команда состоит из трех отдельных команд, объединенных в цепочку с помощью |
оператора (pipe):
sudo cat /etc/wireguard/private.key
: эта команда считывает файл закрытого ключа и выводит его в стандартный поток вывода.wg pubkey
: вторая команда принимает вывод первой команды в качестве стандартного ввода и обрабатывает его для создания открытого ключа.sudo tee /etc/wireguard/public.key
: последняя команда берет вывод команды генерации открытого ключа и перенаправляет его в файл с именем/etc/wireguard/public.key
.
Когда вы запустите команду, вы снова получите одну строку base64
закодированного вывода, которая является открытым ключом для вашего сервера WireGuard. Скопируйте его куда-нибудь для справки, так как вам нужно будет распространять открытый ключ любому пиру, который подключается к серверу.
Шаг 2 — Выбор адресов IPv4 и IPv6
В предыдущем разделе вы установили WireGuard и сгенерировали пару ключей, которая будет использоваться для шифрования входящего и исходящего трафика сервера. В этом разделе вы создадите файл конфигурации для сервера и настроите WireGuard для автоматического запуска при перезагрузке сервера. Вы также определите частные адреса IPv4 и IPv6 для использования с вашим сервером WireGuard и пирами.
Если вы планируете использовать адреса IPv4 и IPv6, следуйте обоим этим разделам. В противном случае следуйте инструкциям в соответствующем разделе для нужд вашей сети VPN.
Шаг 2 (a) — Выбор диапазона IPv4
Если вы используете сервер WireGuard с одноранговыми узлами IPv4, серверу потребуется ряд частных адресов IPv4 для использования клиентами и туннельным интерфейсом. Вы можете выбрать любой диапазон IP-адресов из следующих зарезервированных блоков адресов (если вы хотите узнать больше о том, как распределяются эти блоки, посетите спецификацию RFC 1918 ):
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-адресов. Не стесняйтесь выбирать диапазон адресов, который работает с конфигурацией вашей сети, если этот примерный диапазон не совместим с вашими сетями.
Сервер WireGuard будет использовать один IP-адрес из диапазона для своего IPv4-адреса частного туннеля. Мы будем использовать 10.8.0.1/24
здесь, но можно использовать любой адрес в диапазоне от 10.8.0.1
до 10.8.0.255
. Запишите выбранный вами IP-адрес, если вы используете что-то отличное от 10.8.0.1/24
. Вы добавите этот IPv4-адрес в файл конфигурации, который вы определили на шаге 3 — Создание конфигурации сервера WireGuard .
Шаг 2(b) — Выбор диапазона IPv6
Если вы используете WireGuard с IPv6, вам потребуется сгенерировать уникальный локальный префикс индивидуального адреса IPv6 на основе алгоритма, описанного в RFC 4193 . Адреса, которые вы используете с WireGuard, будут связаны с интерфейсом виртуального туннеля. Вам нужно будет выполнить несколько шагов, чтобы сгенерировать случайный уникальный префикс IPv6 в зарезервированном fd00::/8
блоке частных IPv6-адресов.
Согласно RFC, рекомендуемый способ получения уникального префикса IPv6 — объединить время суток с уникальным идентификационным значением из системы, таким как серийный номер или идентификатор устройства. Затем эти значения хешируются и усекаются, в результате чего получается набор битов, которые можно использовать в качестве уникального адреса в зарезервированном частном fd00::/8
блоке IP-адресов.
Чтобы начать генерировать диапазон IPv6 для вашего сервера WireGuard, соберите 64-битную метку времени с помощью date
утилиты с помощью следующей команды:
date +%s%N
Вы получите число, подобное следующему, которое представляет собой количество секунд ( %s
в date
команде) и наносекунд ( %N
) с 1970-01-01 00:00:00 UTC вместе взятых:
Output1650301699497770167
Запишите значение где-нибудь для использования позже в этом разделе. Затем скопируйте machine-id
значение для вашего сервера из /var/lib/dbus/machine-id
файла. Этот идентификатор уникален для вашей системы и не должен изменяться, пока существует сервер.
cat /var/lib/dbus/machine-id
Вы получите следующий вывод:
/var/lib/dbus/machine-id610cef4946ed46da8f71dba9d66c67fb
Теперь вам нужно объединить временную метку с machine-id
и хешировать полученное значение с помощью алгоритма SHA-1. Команда будет использовать следующий формат:
printf <timestamp><machine-id> | sha1sum
Запустите команду, подставив метку времени и значения идентификатора машины:
printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum
Вы получите хэш-значение, подобное следующему:
Output442adea1488d96388dae9ab816045b24609a6c18 -
Обратите внимание, что выходные sha1sum
данные команды представлены в шестнадцатеричном формате, поэтому в выходных данных используются два символа для представления одного байта данных. Например , 4f
и 26
в примере выходные данные — это первые два байта хешированных данных.
Алгоритм в RFC требует только младших значащих (завершающих) 40 бит или 5 байтов хэшированного вывода. Используйте cut
команду для печати последних 5 шестнадцатеричных закодированных байтов из хэша:
printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-
Аргумент -c
указывает cut
команде выбрать только указанный набор символов. Аргумент 31-
указывает cut
на печать всех символов с позиции 31 до конца строки ввода.
Вы должны получить вывод, подобный следующему:
Output24609a6c18
В этом примере выходных данных набор байтов: .24 60 9a 6c 18
Теперь вы можете создать свой уникальный сетевой префикс IPv6, добавив к префиксу 5 байтов, которые вы сгенерировали fd
, разделяя каждые 2 байта :
двоеточием для удобства чтения. /64
Поскольку каждая подсеть в вашем уникальном префиксе может содержать в общей сложности 18 446 744 073 709 551 616 возможных IPv6-адресов, для простоты вы можете ограничить подсеть стандартным размером .
Используя байты, ранее сгенерированные с /64
размером подсети, результирующий префикс будет следующим:
Unique Local IPv6 Address Prefixfd24:609a:6c18::/64
Этот fd24:609a:6c18::/64
диапазон вы будете использовать для назначения отдельных IP-адресов вашим туннельным интерфейсам WireGuard на сервере и одноранговых узлах. Чтобы выделить IP для сервера, добавьте 1
после последних ::
символов. Полученный адрес будет . Одноранговые узлы могут использовать любой IP-адрес в диапазоне, но обычно вы увеличиваете значение на единицу каждый раз, когда добавляете одноранговый узел, например . Запишите IP-адрес и продолжите настройку сервера WireGuard в следующем разделе этого руководства.fd24:609a:6c18::1/64
fd24:609a:6c18::2/64
Шаг 3 — Создание конфигурации сервера WireGuard
Перед созданием конфигурации вашего сервера WireGuard вам потребуется следующая информация:
- Убедитесь, что у вас есть доступ к закрытому ключу из шага 1 — установка WireGuard и создание пары ключей .
- Если вы используете WireGuard с IPv4, вам потребуется IP-адрес, который вы выбрали для сервера на шаге 2 (a) — Выбор диапазона IPv4 , в данном примере это
10.8.0.1/24
. - Если вы используете WireGuard с IPv6, вам понадобится IP-адрес сервера, созданный на шаге 2 (b) — Выбор диапазона IPv6 . В данном примере это IP
fd24:609a:6c18::1/64
.
Получив необходимый закрытый ключ и IP-адрес(а), создайте новый файл конфигурации с помощью nano
или предпочитаемого вами редактора, выполнив следующую команду:
sudo nano /etc/wireguard/wg0.conf
Добавьте в файл следующие строки, подставив свой закрытый ключ вместо выделенного base64_encoded_private_key_goes_here
значения и IP-адрес(а) в Address
строке. Вы также можете изменить ListenPort
строку, если хотите, чтобы WireGuard был доступен на другом порту:
/etc/wireguard/wg0.conf[Interface] PrivateKey = base64_encoded_private_key_goes_here Address = 10.8.0.1/24, fd24:609a:6c18::1/64 ListenPort = 51820 SaveConfig = true
Строка SaveConfig
гарантирует, что при отключении интерфейса WireGuard любые изменения будут сохранены в файле конфигурации.
Сохраните и закройте /etc/wireguard/wg0.conf
файл. Если вы используете nano
, вы можете сделать это с помощью CTRL+X
, затем Y
и ENTER
для подтверждения. Теперь у вас есть первоначальная конфигурация сервера, которую вы можете использовать в зависимости от того, как вы планируете использовать свой VPN-сервер WireGuard.
Шаг 4 — Настройка сетевой конфигурации сервера WireGuard
Если вы используете WireGuard для подключения однорангового узла к серверу WireGuard для доступа к службам только на сервере , вам не нужно заполнять этот раздел. Если вы хотите направить интернет-трафик вашего узла WireGuard Peer через сервер WireGuard, вам необходимо настроить IP-переадресацию, следуя этому разделу руководства.
Чтобы настроить переадресацию, откройте /etc/sysctl.conf
файл с помощью nano
или предпочитаемого вами редактора:
sudo nano /etc/sysctl.conf
Если вы используете IPv4 с WireGuard, добавьте следующую строку внизу файла:/etc/sysctl.conf
net.ipv4.ip_forward=1
Если вы используете IPv6 с WireGuard, добавьте эту строку внизу файла:/etc/sysctl.conf
net.ipv6.conf.all.forwarding=1
Если вы используете и IPv4, и IPv6, убедитесь, что вы включили обе строки. Сохраните и закройте файл, когда закончите.
Чтобы прочитать файл и загрузить новые значения для текущего сеанса терминала, запустите:
sudo sysctl -p
Outputnet.ipv6.conf.all.forwarding = 1 net.ipv4.ip_forward = 1
Теперь ваш WireGuard Server сможет перенаправлять входящий трафик с виртуального VPN-устройства Ethernet на другие устройства на сервере, а оттуда — в общедоступный Интернет. Использование этой конфигурации позволит вам направлять весь веб-трафик от вашего узла WireGuard через IP-адрес вашего сервера, а общедоступный IP-адрес вашего клиента будет эффективно скрыт.
Однако, прежде чем трафик сможет правильно маршрутизироваться через ваш сервер, вам необходимо настроить некоторые правила брандмауэра. Эти правила обеспечат правильное прохождение трафика к вашему серверу WireGuard и другим узлам и от них.
Шаг 5 — Настройка брандмауэра сервера WireGuard
В этом разделе вы отредактируете конфигурацию WireGuard Server, чтобы добавить правила брандмауэра, которые обеспечат правильную маршрутизацию входящего и исходящего трафика с сервера и клиентов. Как и в предыдущем разделе, пропустите этот шаг, если вы используете WireGuard VPN только для межмашинного соединения для доступа к ресурсам, ограниченным вашей VPN.
Чтобы разрешить трафик WireGuard VPN через брандмауэр сервера, вам необходимо включить маскировку, которая представляет собой концепцию iptables, обеспечивающую динамическую трансляцию сетевых адресов (NAT) на лету для правильной маршрутизации клиентских подключений.
Сначала найдите публичный сетевой интерфейс вашего WireGuard Server с помощью подкоманды ip route
:
ip route list default
Публичный интерфейс — это строка в выводе этой команды, следующая за словом «dev». Например, этот результат показывает интерфейс с именем eth0
, который выделен ниже:
Outputdefault via 203.0.113.1 dev eth0 proto static
Запишите имя вашего устройства, так как вы добавите его в iptables
правила на следующем шаге.
Чтобы добавить правила брандмауэра на ваш сервер WireGuard, снова откройте /etc/wireguard/wg0.conf
файл с помощью nano
или в предпочитаемом вами редакторе.
sudo nano /etc/wireguard/wg0.conf
Внизу файла после SaveConfig = true
строки вставьте следующие строки:
/etc/wireguard/wg0.conf. . .
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
Линии PostUp
будут запущены, когда сервер WireGuard запустит виртуальный VPN-туннель. В приведенном здесь примере он добавит три правила ufw
и :iptables
ufw route allow in on wg0 out on eth0
– Это правило позволит перенаправлять трафик IPv4 и IPv6, поступающий черезwg0
интерфейс VPN, наeth0
сетевой интерфейс на сервере. Он работает в сочетании со значениямиnet.ipv4.ip_forward
иnet.ipv6.conf.all.forwarding
sysctl, которые вы настроили в предыдущем разделе.iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
– Это правило настраивает маскировку и перезаписывает трафик IPv4, поступающий черезwg0
интерфейс VPN, чтобы он выглядел так, как будто он исходит непосредственно с общедоступного IPv4-адреса сервера WireGuard.ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
– Это правило настраивает маскировку и перезаписывает трафик IPv6, поступающий черезwg0
интерфейс VPN, чтобы он выглядел так, как будто он исходит непосредственно с общедоступного IPv6-адреса сервера WireGuard.
Правила PreDown
запускаются, когда сервер WireGuard останавливает виртуальный VPN-туннель. Эти правила являются обратными PostUp
правилам и отменяют правила переадресации и маскировки для интерфейса VPN, когда VPN останавливается.
В обоих случаях отредактируйте конфигурацию, включив или исключив правила IPv4 и IPv6, подходящие для вашей VPN. Например, если вы используете только IPv4, то вы можете исключить строки с ip6tables
командами.
И наоборот, если вы используете только IPv6, отредактируйте конфигурацию, чтобы включить только ip6tables
команды. Линии ufw
должны существовать для любой комбинации сетей IPv4 и IPv6. Сохраните и закройте файл, когда закончите.
Последней частью настройки брандмауэра на вашем сервере WireGuard является разрешение входящего и исходящего трафика через порт WireGuard UDP. Если вы не изменили порт в /etc/wireguard/wg0.conf
файле сервера, вы откроете порт 51820
. Если вы выбрали другой порт при редактировании конфигурации, обязательно замените его в следующей команде UFW.
Если вы забыли открыть порт SSH, следуя предварительному руководству, добавьте его сюда:
sudo ufw allow 51820/udp sudo ufw allow OpenSSH
Примечание . Если вы используете другой брандмауэр или настроили конфигурацию UFW, вам может потребоваться добавить дополнительные правила брандмауэра. Например, если вы решите туннелировать весь свой сетевой трафик через VPN-подключение, вам необходимо убедиться, что 53
трафик портов разрешен для запросов DNS, а такие порты, как 80
и 443
для трафика HTTP и HTTPS, соответственно. Если есть другие протоколы, которые вы используете через VPN, вам также нужно будет добавить правила для них.
После добавления этих правил отключите и снова включите UFW, чтобы перезапустить его и загрузить изменения из всех файлов, которые вы изменили:
sudo ufw disable sudo ufw enable
Вы можете подтвердить, что правила действуют, выполнив ufw status
команду. Запустите его, и вы должны получить вывод, подобный следующему:
sudo ufw status
OutputStatus: active To Action From -- ------ ---- 51280/udp ALLOW Anywhere 22/tcp ALLOW Anywhere 51280/udp (v6) ALLOW Anywhere (v6) 22/tcp (v6) ALLOW Anywhere (v6)
Теперь ваш сервер WireGuard настроен на правильную обработку трафика VPN, включая переадресацию и маскировку для одноранговых узлов. При наличии правил брандмауэра вы можете запустить саму службу WireGuard для прослушивания одноранговых соединений.
Шаг 6 — Запуск сервера WireGuard
WireGuard можно настроить для работы в качестве systemd
службы с помощью встроенного wg-quick
скрипта. Хотя вы можете вручную использовать wg
команду для создания туннеля каждый раз, когда хотите использовать VPN, это ручной процесс, который становится повторяющимся и подверженным ошибкам. Вместо этого вы можете использовать systemctl
для управления туннелем с помощью wg-quick
скрипта.
Использование systemd
службы означает, что вы можете настроить WireGuard для запуска при загрузке, чтобы вы могли подключаться к VPN в любое время, пока сервер работает. Для этого включите wg-quick
службу для определенного wg0
вами туннеля, добавив ее в systemctl
:
sudo systemctl enable wg-quick@wg0.service
Обратите внимание, что команда указывает имя устройства туннеля wg0
как часть имени службы. Это имя соответствует файлу конфигурации. Такой подход к именованию означает, что вы можете создать столько отдельных VPN-туннелей, сколько захотите, используя свой сервер./etc/wireguard/wg0.conf
Например, у вас может быть туннельное устройство с именем prod
и файлом конфигурации /etc/wireguard/prod.conf
. Каждая конфигурация туннеля может содержать различные настройки IPv4, IPv6 и клиентского брандмауэра. Таким образом, вы можете поддерживать несколько различных одноранговых соединений, каждое из которых имеет свои уникальные IP-адреса и правила маршрутизации.
Теперь запустите службу:
sudo systemctl start wg-quick@wg0.service
Дважды проверьте, активна ли служба WireGuard, с помощью следующей команды. Вы должны увидеть active (running)
в выводе:
sudo systemctl status wg-quick@wg0.service
Output● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0 Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s 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: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 98834 (code=exited, status=0/SUCCESS) CPU: 193ms Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3 Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6) Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
В выходных данных показаны ip
команды, используемые для создания виртуального wg0
устройства и назначения ему адресов IPv4 и IPv6, которые вы добавили в файл конфигурации. Вы можете использовать эти правила для устранения неполадок в туннеле или с помощью самой wg
команды, если хотите попробовать вручную настроить интерфейс VPN.
Когда сервер настроен и запущен, следующим шагом будет настройка клиентского компьютера в качестве узла WireGuard и подключение к серверу WireGuard.
Шаг 7 — Настройка узла WireGuard
Настройка узла WireGuard аналогична настройке сервера WireGuard. После установки клиентского программного обеспечения вы создадите пару открытого и закрытого ключей, определите IP-адрес или адреса для однорангового узла, определите файл конфигурации для однорангового узла, а затем запустите туннель с помощью wg-quick
сценария.
Вы можете добавить в VPN столько пиров, сколько захотите, сгенерировав пару ключей и настроив их, выполнив следующие шаги. Если вы добавляете несколько одноранговых узлов в VPN, обязательно отслеживайте их частные IP-адреса, чтобы предотвратить коллизии.
Чтобы настроить одноранговый узел WireGuard, убедитесь, что у вас установлен пакет WireGuard, используя следующие apt
команды. При одноранговом запуске WireGuard:
sudo apt update sudo apt install wireguard
Создание пары ключей узла WireGuard
Затем вам нужно сгенерировать пару ключей на узле, используя те же шаги, что и на сервере. С вашего локального компьютера или удаленного сервера, который будет служить одноранговым узлом, продолжите и создайте закрытый ключ для однорангового узла, используя следующие команды:
wg genkey | sudo tee /etc/wireguard/private.key sudo chmod go= /etc/wireguard/private.key
Вы снова получите одну строку base64
закодированного вывода, которая является закрытым ключом. Копия вывода также сохраняется в файле /etc/wireguard/private.key
. Внимательно запишите полученный закрытый ключ, так как вам нужно будет добавить его в файл конфигурации WireGuard позже в этом разделе.
Затем используйте следующую команду для создания файла открытого ключа:
sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
Вы снова получите одну строку base64
закодированного вывода, которая является открытым ключом для вашего узла WireGuard. Скопируйте его куда-нибудь для справки, так как вам нужно будет передать открытый ключ на сервер WireGuard, чтобы установить зашифрованное соединение.
Создание файла конфигурации узла WireGuard
Теперь, когда у вас есть пара ключей, вы можете создать файл конфигурации для однорангового узла, который содержит всю информацию, необходимую для установления соединения с сервером WireGuard.
Вам понадобится несколько фрагментов информации для файла конфигурации:
- Закодированный
base64
закрытый ключ, созданный вами на узле. - Диапазоны адресов IPv4 и IPv6, которые вы определили на сервере WireGuard.
- Закодированный
base64
открытый ключ с сервера WireGuard. - Общедоступный IP-адрес и номер порта сервера WireGuard. Обычно это будет адрес IPv4, но если ваш сервер имеет адрес IPv6, а ваш клиентский компьютер имеет подключение к Интернету по протоколу IPv6, вы можете использовать его вместо IPv4.
Имея всю эту информацию под рукой, откройте новый /etc/wireguard/wg0.conf
файл на машине WireGuard Peer, используя nano
или предпочитаемый вами редактор:
sudo nano /etc/wireguard/wg0.conf
Добавьте в файл следующие строки, подставляя различные данные в выделенные разделы по мере необходимости:
/etc/wireguard/wg0.conf[Interface] PrivateKey = base64_encoded_peer_private_key_goes_here Address = 10.8.0.2/24 Address = fd24:609a:6c18::2/64 [Peer] PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64 Endpoint = 203.0.113.1:51820
Обратите внимание, что в первой Address
строке используется адрес IPv4 из 10.8.0.0/24
выбранной ранее подсети. Этот IP-адрес может быть любым в подсети, если он отличается от IP-адреса сервера. Увеличение адресов на 1 каждый раз, когда вы добавляете одноранговый узел, обычно является самым простым способом выделения IP-адресов.
Аналогично, обратите внимание, как вторая Address
строка использует IPv6-адрес из подсети, которую вы создали ранее, и увеличивает адрес сервера на единицу. Опять же, любой IP-адрес в диапазоне действителен, если вы решите использовать другой адрес.
Другая примечательная часть файла — последняя AllowedIPs
строка. Эти два диапазона IPv4 и IPv6 предписывают одноранговому узлу отправлять трафик через VPN только в том случае, если целевая система имеет IP-адрес в любом из диапазонов. Используя эту AllowedIPs
директиву, вы можете ограничить VPN на одноранговом узле, чтобы подключаться только к другим одноранговым узлам и службам в VPN, или вы можете настроить параметр для туннелирования всего трафика через VPN и использовать сервер WireGuard в качестве шлюза.
Если вы используете только IPv4, опустите конечный fd24:609a:6c18::/64
диапазон (включая ,
запятую). И наоборот, если вы используете только IPv6, включите только fd24:609a:6c18::/64
префикс и исключите 10.8.0.0/24
диапазон IPv4.
В обоих случаях, если вы хотите отправлять весь трафик вашего партнера через VPN и использовать сервер WireGuard в качестве шлюза для всего трафика, вы можете использовать 0.0.0.0/0
, который представляет все адресное пространство IPv4 и ::/0
все адресное пространство IPv6.
(Необязательно) Настройка узла для маршрутизации всего трафика через туннель
Если вы решили маршрутизировать весь трафик однорангового узла через туннель с помощью маршрутов 0.0.0.0/0
или ::/0
, а одноранговый узел является удаленной системой, вам необходимо выполнить шаги, описанные в этом разделе. Если ваш пир является локальной системой, то лучше пропустить этот раздел.
Для удаленных пиров, к которым вы обращаетесь через SSH или какой-либо другой протокол с использованием общедоступного IP-адреса, вам нужно будет добавить некоторые дополнительные правила в wg0.conf
файл пира. Эти правила обеспечат возможность подключения к системе из-за пределов туннеля, когда он подключен. В противном случае, когда туннель установлен, весь трафик, который обычно обрабатывается на общедоступном сетевом интерфейсе, не будет правильно маршрутизироваться в обход wg0
туннельного интерфейса, что приведет к недоступности удаленной системы.
Во-первых, вам нужно определить IP-адрес, который система использует в качестве шлюза по умолчанию. Выполните следующую ip route
команду:
ip route list table main default
Вы получите следующий вывод:
Outputdefault via 203.0.113.1 dev eth0 proto static
Обратите внимание на выделенный IP-адрес шлюза 203.0.113.1
для последующего использования и устройство eth0
. Имя вашего устройства может быть другим. Если это так, замените его в eth0
следующих командах.
Затем найдите общедоступный IP-адрес системы, изучив устройство с помощью ip address show
команды:
ip -brief address show eth0
Вы получите следующий вывод:
Output eth0 UP 203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64
В этом примере выделенный 203.0.113.5
IP-адрес (без завершающего /20
) — это общедоступный адрес, назначенный eth0
устройству, которое необходимо добавить в конфигурацию WireGuard.
Теперь откройте файл узла WireGuard /etc/wireguard/wg0.conf
с помощью nano
редактора или в предпочитаемом вами редакторе.
sudo nano /etc/wireguard/wg0.conf
Перед [Peer]
строкой добавьте следующие 4 строки:
PostUp = ip rule add table 200 from 203.0.113.5 PostUp = ip route add table 200 default via 203.0.113.1 PreDown = ip rule delete table 200 from 203.0.113.5 PreDown = ip route delete table 200 default via 203.0.113.1 [Peer] . . .
Эти строки создадут пользовательское правило маршрутизации и добавят собственный маршрут, чтобы гарантировать, что общедоступный трафик в систему использует шлюз по умолчанию.
PostUp = ip rule add table 200 from 203.0.113.5
– Эта команда создает правило, которое проверяет наличие любых записей маршрутизации в нумерованной таблице,200
когда IP-адрес совпадает с общедоступным203.0.113.5
адресом системы.PostUp = ip route add table 200 default via 203.0.113.1
– Эта команда гарантирует, что любой трафик, обрабатываемый200
таблицей, будет использовать203.0.113.1
для маршрутизации шлюз, а не интерфейс WireGuard.
Строки PreDown
удаляют пользовательское правило и маршрут при отключении туннеля.
Примечание. 200
При построении этих правил номер таблицы является произвольным. Вы можете использовать значение от 2 до 252 или использовать собственное имя, добавив метку к /etc/iproute2/rt_tables
файлу, а затем ссылаясь на имя вместо числового значения.
Если вы направляете весь одноранговый трафик через VPN, убедитесь, что вы правильно настроили правила sysctl
и iptables
правила на сервере WireGuard на шаге 4 — Настройка сетевой конфигурации сервера WireGuard и на шаге 5 — Настройка брандмауэра сервера WireGuard .
(Необязательно) Настройка DNS-преобразователей WireGuard Peer
Если вы используете WireGuard Server в качестве VPN-шлюза для всего трафика вашего однорангового узла, вам нужно будет добавить строку в [Interface]
раздел, указывающий преобразователи DNS. Если вы не добавите этот параметр, ваши DNS-запросы могут быть не защищены VPN или они могут быть раскрыты вашему интернет-провайдеру или другим третьим лицам.
Если вы используете WireGuard только для доступа к ресурсам в сети VPN или в одноранговой конфигурации, вы можете пропустить этот раздел.
Чтобы добавить резолверы DNS в конфигурацию вашего партнера, сначала определите, какие DNS-серверы использует ваш WireGuard Server. Выполните следующую команду на сервере WireGuard , заменив имя вашего устройства Ethernet, eth0
если оно отличается от этого примера:
resolvectl dns eth0
Вы должны получить вывод, подобный следующему:
Output Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888
Выводимые IP-адреса — это DNS-преобразователи, используемые сервером. Вы можете использовать любой или все из них или только IPv4 или IPv6 в зависимости от ваших потребностей. Запишите преобразователи, которые вы будете использовать.
Затем вам нужно будет добавить выбранные преобразователи в файл конфигурации узла WireGuard Peer. Вернитесь к WireGuard Peer , откройте /etc/wireguard/wg0.conf
файл с помощью nano
или предпочитаемого вами редактора:
sudo nano /etc/wireguard/wg0.conf
Перед [Peer]
строкой добавьте следующее:
DNS = 67.207.67.2 2001:4860:4860::8844 [Peer] . . .
Опять же, в зависимости от ваших предпочтений или требований к IPv4 и IPv6, вы можете редактировать список в соответствии со своими потребностями.
Подключившись к VPN на следующем шаге, вы можете проверить, отправляете ли вы DNS-запросы через VPN, используя такой сайт, как DNSутечка test.com .
Вы также можете проверить, что ваш одноранговый узел использует настроенные преобразователи с помощью resolvectl dns
команды, аналогичной той, которую вы запустили на сервере. Вы должны получить вывод, подобный следующему, показывающий преобразователи DNS, которые вы настроили для туннеля VPN:
OutputGlobal: 67.207.67.2 67.207.67.3 . . .
Со всеми этими настройками преобразователя DNS вы теперь готовы добавить открытый ключ узла к серверу, а затем запустить туннель WireGuard на узле.
Шаг 8 — Добавление открытого ключа узла на сервер WireGuard
Перед подключением пира к серверу важно добавить открытый ключ пира на сервер WireGuard. Этот шаг гарантирует, что вы сможете подключаться и маршрутизировать трафик через VPN. Без выполнения этого шага сервер WireGuard не позволит одноранговому узлу отправлять или получать какой-либо трафик через туннель.
Убедитесь, что у вас есть копия base64
закодированного открытого ключа для узла WireGuard, выполнив:
sudo cat /etc/wireguard/public.key
Output PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
Теперь войдите на сервер WireGuard и выполните следующую команду:
sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2
Обратите внимание, что allowed-ips
часть команды принимает список адресов IPv4 и IPv6, разделенных запятыми. Вы можете указать отдельные IP-адреса, если хотите ограничить IP-адрес, который одноранговый узел может назначать себе, или диапазон, как в примере, если ваши одноранговые узлы могут использовать любой IP-адрес в диапазоне VPN. Также обратите внимание, что никакие два одноранговых узла не могут иметь одинаковые allowed-ips
настройки.
Если вы хотите обновить allowed-ips
существующий одноранговый узел, вы можете снова запустить ту же команду, но изменить IP-адреса. Поддерживается несколько IP-адресов. Например, чтобы изменить только что добавленный одноранговый узел WireGuard, чтобы добавить IP -адрес 10.8.0.100
к существующим 10.8.0.2
и fd24:609a:6c18::2
IP-адресам, вы должны выполнить следующее:
sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2
После того, как вы запустили команду для добавления пира, проверьте состояние туннеля на сервере с помощью wg
команды:
sudo wg
Outputinterface: wg0 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= private key: (hidden) listening port: 51820 peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128
Обратите внимание, как в peer
строке показан открытый ключ узла WireGuard, а также IP-адреса или диапазоны адресов, которые ему разрешено использовать для присвоения себе IP-адреса.
Теперь, когда вы определили параметры соединения узла на сервере, следующим шагом будет запуск туннеля на узле.
Шаг 9 — Подключение узла WireGuard к туннелю
Теперь, когда ваш сервер и одноранговый узел настроены на поддержку вашего выбора IPv4, IPv6, переадресации пакетов и разрешения DNS, пришло время подключить одноранговый узел к VPN-туннелю.
Поскольку вы можете захотеть, чтобы VPN была включена только для определенных случаев использования, мы будем использовать wg-quick
команду для установки соединения вручную. Если вы хотите автоматизировать запуск туннеля, как вы это делали на сервере, выполните шаги, описанные в разделе « Шаг 6 — Запуск сервера WireGuard », вместо использования wq-quick
команды.
Если вы направляете весь трафик через VPN и настроили переадресацию DNS, вам необходимо установить resolvconf
утилиту на узел WireGuard перед запуском туннеля. Запустите следующую команду, чтобы настроить это:
sudo apt install resolvconf
Чтобы запустить туннель, выполните на узле WireGuard следующее:
sudo wg-quick up wg0
Вы получите следующий вывод:
Output[#] 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 fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x
Обратите внимание на выделенные адреса IPv4 и IPv6, которые вы назначили узлу.
Если вы установите для AllowedIPs
однорангового узла значение 0.0.0.0/0
и ::/0
(или используйте диапазоны, отличные от тех, которые вы выбрали для VPN), то ваши выходные данные будут выглядеть следующим образом:
Output[#] 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 fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x [#] wg set wg0 fwmark 51820 [#] 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 [#] ip6tables-restore -n [#] 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 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n
В этом примере обратите внимание на выделенные маршруты, добавленные командой, которые соответствуют AllowedIPs
конфигурации однорангового узла.
Проверить состояние туннеля на пире можно с помощью wg
команды:
sudo wg
Outputinterface: wg0 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= private key: (hidden) listening port: 49338 fwmark: 0xca6c peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= endpoint: 203.0.113.1:51820 allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64 latest handshake: 1 second ago transfer: 6.50 KiB received, 15.41 KiB sent
Вы также можете снова проверить статус на сервере, и вы получите аналогичный результат.
Убедитесь, что ваш одноранговый узел использует VPN, используя команды ip route
и ip -6 route
. Если вы используете VPN в качестве шлюза для всего вашего интернет-трафика, проверьте, какой интерфейс будет использоваться для трафика, предназначенного для распознавателей CloudFlare 1.1.1.1
и 2606:4700:4700::1111
DNS.
Если вы используете WireGuard только для доступа к ресурсам в VPN, замените действительный адрес IPv4 или IPv6, например, сам шлюз, в эти команды. Например 10.8.0.1
или fd24:609a:6c18::1
.
ip route get 1.1.1.1
Output 1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000 cache
Обратите внимание, что wg0
устройство используется и адрес IPv4 10.8.0.2
, который вы назначили узлу. Аналогичным образом, если вы используете IPv6, выполните следующее:
ip -6 route get 2606:4700:4700::1111
Output2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium
Снова обратите внимание на wg0
интерфейс и адрес IPv6 fd24:609a:6c18::2
, который вы назначили узлу.
Если у вашего партнера установлен браузер, вы также можете посетить ipleak.net и ipv6-test.com , чтобы убедиться, что ваш партнер направляет свой трафик через VPN.
Когда вы будете готовы отключиться от VPN на узле, используйте wg-quick
команду:
sudo wg-quick down wg0
Вы получите следующий вывод, указывающий, что VPN-туннель закрыт:
Output[#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f
Если вы установите для AllowedIPs
однорангового узла значение 0.0.0.0/0
и ::/0
(или используйте диапазоны, отличные от тех, которые вы выбрали для VPN), то ваши выходные данные будут выглядеть следующим образом:
Output[#] ip rule delete table 200 from 203.0.113.5 [#] ip route delete table 200 default via 203.0.113.1 [#] ip -4 rule delete table 51820 [#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip -6 rule delete table 51820 [#] ip -6 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f [#] iptables-restore -n [#] ip6tables-restore -n
Чтобы повторно подключиться к VPN, снова запустите wg-quick up wg0
команду на узле. Если вы хотите полностью удалить конфигурацию однорангового узла с сервера WireGuard, вы можете запустить следующую команду, обязательно заменив правильный открытый ключ для однорангового узла, который вы хотите удалить:
sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove
Как правило, вам потребуется удалить конфигурацию однорангового узла только в том случае, если одноранговый узел больше не существует или если его ключи шифрования скомпрометированы или изменены. В противном случае лучше оставить конфигурацию на месте, чтобы одноранговый узел мог повторно подключ