Введение
WireGuard — это универсальная виртуальная частная сеть (VPN), в которой используется самое современное шифрование. По сравнению с другими популярными VPN-решениями, такими как IPsec и OpenVPN, WireGuard, как правило, быстрее, проще в настройке и занимает меньше места. Он кроссплатформенный и может работать практически везде, включая Linux, Windows, Android и macOS.
Wireguard — это одноранговая VPN; он не использует модель клиент-сервер. В зависимости от конфигурации одноранговый узел может действовать как традиционный сервер или клиент. Он работает, создавая сетевой интерфейс на каждом одноранговом устройстве, который действует как туннель. Одноранговые узлы аутентифицируют друг друга, обмениваясь и проверяя открытые ключи, имитируя модель SSH. Открытые ключи сопоставляются со списком IP-адресов, разрешенных в туннеле. VPN-трафик инкапсулируется в UDP.
В этой статье объясняется, как установить и настроить WireGuard в Debian 10, который будет действовать как VPN-сервер. Мы также покажем вам, как настроить WireGuard в качестве клиента в Linux, Windows и macOS. Клиентский трафик будет направляться через сервер Debian 10.
Эту конфигурацию можно использовать для защиты от атак «Человек посередине», анонимного просмотра веб-страниц, обхода контента с географическим ограничением или предоставления коллегам, работающим дома, безопасного подключения к корпоративной сети.
Предпосылки
Чтобы следовать этому руководству, вам понадобится машина с установленным Debian 10. Вам также нужен пользователь root или пользователь с привилегиями sudo.
Если вы хотите установить WireGuard VPN на удаленный сервер, продолжайте чтение, в противном случае пропустите первый абзац «Подключение к серверу» и читайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Настройте сервер WireGuard
Мы начнем с установки пакета WireGuard на машину Debian и настройки его для работы в качестве сервера. Мы также настроим систему для маршрутизации клиентского трафика через нее.
Установите WireGuard на Debian 10
WireGuard доступен в репозиториях бэкпортов Debian. Чтобы добавить репозиторий в вашу систему, запустите:
echo 'deb http://ftp.debian.org/debian buster-backports main' | sudo tee /etc/apt/sources.list.d/buster-backports.list
После включения репозитория обновите кэш apt и установите модуль и инструменты WireGuard:
sudo apt update
sudo apt install wireguard
WireGuard работает как модуль ядра.
Настроить WireGuard
Интерфейсы WireGuard можно настраивать и управлять ими с помощью инструментов командной строки wg
и wg-quick
.
Каждое устройство в сети 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
Вы можете назвать интерфейс по своему усмотрению. Однако рекомендуется использовать что-то вроде wg0
или wgvpn0
.
Настройки в разделе интерфейса имеют следующее значение:
- Адрес: разделенный запятыми список IP-адресов v4 или v6 для интерфейса
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: +Vpyku+gjVJuXGR/OXXt6cmBKPdc06Qnm3hpRhMBtxs=
private key: (hidden)
listening port: 51820
Вы также можете проверить статус интерфейса с помощью ip a show wg0
:
ip a show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> 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
Сохраните файл и примените изменение:
sudo sysctl -p
net.ipv4.ip_forward = 1
Если вы используете UFW для управления брандмауэром, вам необходимо открыть UDP-трафик на порту 51820
:
sudo ufw allow 51820/udp
Это все. Одноранговый узел Debian, который будет действовать как сервер, настроен.
Настройте клиент Linux и macOS
Инструкции по установке для всех поддерживаемых платформ доступны на WireGuard. В системах 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
Настройки в разделе интерфейса имеют тот же смысл, что и конфигурация сервера:
- Адрес — разделенный запятыми список IP-адресов v4 или v6 для интерфейса
wg0
. - PrivateKey: Чтобы просмотреть содержимое файла на клиентской машине, выполните:
sudo cat /etc/wireguard/privatekey
Раздел Peer содержит следующие поля:
- 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 — Открытый ключ сервера Debian (файл
/etc/wireguard/publickey
). - Конечная точка — IP-адрес сервера Debian, за которым следует двоеточие и порт WireGuard (51820).
- Разрешенные IP-адреса — 0.0.0.0/0
Когда закончите, нажмите кнопку «Сохранить».
Добавьте клиентский узел к серверу
Последним шагом является добавление открытого ключа и IP-адреса клиента на сервер. Для этого выполните следующую команду на сервере Debian:
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
Теперь вы должны быть подключены к серверу Debian, и трафик с вашего клиентского компьютера должен проходить через него. Проверить соединение можно с помощью:
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
Вы также можете открыть свой браузер, ввести «what is my ip», и вы должны увидеть IP-адрес вашего сервера Debian.
Чтобы остановить туннелирование, опустите интерфейс wg0
:
sudo wg-quick down wg0
Windows-клиенты
Если вы установили WireGuard в Windows, нажмите кнопку «Активировать». Как только одноранговые узлы будут подключены, статус туннеля изменится на Активный.
Вывод
Мы показали вам, как установить WireGuard на Debian 10 и настроить его как VPN-сервер. Эта настройка позволяет вам просматривать веб-страницы анонимно, сохраняя конфиденциальность ваших данных о трафике.