Введение
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 поддерживает собственный репозиторий APT, из которого мы будем устанавливать пакет и обновлять его, когда будет доступна новая версия.
Обновите список пакетов и установите инструменты, необходимые для управления системными репозиториями. Скорее всего, у вас уже есть пакет на вашем компьютере:
sudo apt update
sudo apt install software-properties-common
Добавьте репозиторий WireGuard:
sudo add-apt-repository ppa:wireguard/wireguard
При появлении запроса нажмите Enter
, чтобы продолжить. add-apt-repository
также автоматически обновит список пакетов.
Установите пакет WireGuard:
sudo apt install wireguard
Обновите или установите заголовки ядра с помощью следующей команды:
sudo apt install linux-headers-$(uname -r)
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
Интерфейс может называться как угодно, однако рекомендуется использовать что-то вроде include 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: <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 при запуске, выполните следующую команду:
sudo systemctl enable wg-quick@wg0
Сеть серверов и конфигурация брандмауэра
Для работы NAT необходимо включить переадресацию IP. Откройте /etc/sysctl.conf
и добавьте или раскомментируйте следующую строку:
sudo nano /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
[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
.
Раздел 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 — публичный ключ сервера 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
Вы также можете открыть свой браузер, ввести «what is my ip», и вы должны увидеть IP-адрес вашего сервера Ubuntu.
Чтобы остановить туннелирование, закройте интерфейс wg0
следующей командой:
sudo wg-quick down wg0
Windows-клиент
Если вы установили WireGuard в Windows, нажмите кнопку « Активировать ». Как только одноранговые узлы будут подключены, статус туннеля изменится на Активный.
Вывод
Мы показали вам, как установить WireGuard на компьютер с Ubuntu 18.04 и настроить его в качестве VPN-сервера. Эта настройка позволяет вам просматривать веб-страницы анонимно, сохраняя конфиденциальность ваших данных о трафике.