Настройка сервера WireGuard

Мы начнем с установки WireGuard на машину Ubuntu и настроим ее для работы в качестве сервера. Также настроим систему для маршрутизации клиентского трафика через нее.

Установите WireGuard на Ubuntu 20.04

WireGuard доступен из репозиториев Ubuntu по умолчанию. Чтобы установить его, выполните следующие команды:

$ sudo apt update
$ sudo apt install wireguard

Это установит модуль и инструменты WireGuard.

WireGuard работает как модуль ядра.

Настройка WireGuard

Инструменты командной строки wg и wg-quick позволяют настраивать интерфейсы WireGuard и управлять ими.

Каждое устройство в сети 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
[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

Интерфейс можно назвать как угодно, однако рекомендуется использовать что-то вроде include wg0 или wgvpn0. Настройки в разделе интерфейса имеют следующее значение:

  • Address - разделенный запятыми список 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: 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 также можно управлять с помощью Systemd.

Чтобы запустить интерфейс 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.

После установки выполните следующие действия, чтобы настроить клиентское устройство.

Процесс настройки клиента 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

Настройки в разделе интерфейса имеют то же значение, что и при настройке сервера:

  • Address - разделенный запятыми список IP-адресов v4 или v6 для интерфейса wg0.

  • PrivateKey - чтобы увидеть содержимое файла на клиентском компьютере, запустите: sudo cat /etc/wireguard/privatekey

Одноранговый раздел содержит следующие поля:

  • PublicKey - открытый ключ партнера, к которому вы хотите подключиться. (Содержимое файла сервера /etc/wireguard/publickey).

  • Endpoint - IP или имя хоста однорангового узла, к которому вы хотите подключиться, за которым следует двоеточие, а затем номер порта, на котором удаленный одноранговый узел прослушивает.

  • AllowedIPs - разделенный запятыми список IP-адресов v4 или v6, с которых разрешен входящий трафик для однорангового узла и на которые направляется исходящий трафик для этого однорангового узла. Мы используем 0.0.0.0/0, потому что мы маршрутизируем трафик и хотим, чтобы одноранговый сервер отправлял пакеты с любым исходным IP.

Если вам нужно настроить дополнительных клиентов, просто повторите те же шаги, используя другой частный IP-адрес.

Настройка клиентов Windows

Загрузите и установите пакет Windows msi с веб-сайта WireGuard.

После установки откройте приложение WireGuard и нажмите «Добавить туннель» -> «Добавить пустой туннель…», как показано на изображении ниже:

1

Пара открытых ключей создается автоматически и отображается на экране.

2

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

[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).

  • Endpoint - IP-адрес сервера Ubuntu с двоеточием и порт WireGuard (51820).

  • AllowedIPs - 0.0.0.0/0

После этого нажмите кнопку «Сохранить».

Добавить однорангового клиента к серверу

Добавить однорангового клиента к серверу

Последний шаг - добавить на сервер открытый ключ и IP-адрес клиента. Для этого запустите на сервере Ubuntu следующую команду:

$ 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

Теперь вы должны быть подключены к серверу Ubuntu, и трафик с вашей клиентской машины должен проходить через него. Проверить соединение можно с помощью:

$ 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-адрес своего сервера Ubuntu.

Чтобы остановить туннелирование, выключите интерфейс wg0:

$ sudo wg-quick down wg0

Клиенты Windows

Если вы установили WireGuard в Windows, нажмите кнопку «Активировать». Как только одноранговые узлы подключены, статус туннеля изменится на Активный:

3

Вывод

Мы показали вам, как установить WireGuard на машину с Ubuntu 20.04 и настроить его как VPN-сервер. Эта настройка позволяет вам просматривать веб-страницы анонимно, сохраняя конфиденциальность ваших данных о трафике.