Как настроить WireGuard VPN на CentOS 8

WireGuard — это простой и современный VPN (виртуальная частная сеть) с современной криптографией. Это быстрее, проще в настройке и более производительно, чем другие аналогичные решения, такие как IPsec и OpenVPN .

WireGuard является кроссплатформенным и может работать практически где угодно, включая Linux, Windows, Android и macOS. Wireguard — это одноранговая VPN; он не основан на модели клиент-сервер. В зависимости от конфигурации одноранговый узел может действовать как традиционный сервер или клиент.

WireGuard работает, создавая сетевой интерфейс на каждом одноранговом устройстве, которое работает как туннель. Одноранговые узлы аутентифицируют друг друга, обмениваясь и проверяя открытые ключи, имитируя модель SSH. Открытые ключи сопоставляются со списком IP-адресов, разрешенных в туннеле. Трафик VPN инкапсулируется в UDP.

В этом руководстве описывается, как настроить WireGuard на машине с CentOS 8, которая будет действовать как VPN-сервер. Мы также покажем вам, как настроить WireGuard в качестве клиента. Клиентский трафик будет маршрутизироваться через сервер CentOS 8. Эту настройку можно использовать в качестве защиты от атак «Человек посередине», анонимного просмотра веб-страниц, обхода контента с ограничением по географическому признаку или предоставления вашим коллегам, которые работают из дома, безопасного подключения к сети компании.

Подготовка

Вам понадобится сервер CentOS 8, к которому вы можете получить доступ как root или учетную запись с привилегиями sudo .

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

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

Установка WireGuard на CentOS 8

Инструменты и модуль ядра WireGuard доступны для установки из репозиториев Epel и Elrepo. Чтобы добавить репозитории в вашу систему, выполните следующую команду:

sudo dnf install epel-release elrepo-release 

После этого установите пакеты WireGuard:

sudo dnf install kmod-wireguard wireguard-tools

Вас могут попросить импортировать ключи GPG репозиториев. При появлении запроса введите y .

Настройка WireGuard

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

Мы будем хранить конфигурацию VPN-сервера и в каталоге /etc/wireguard . В CentOS этот каталог не создается во время установки. Выполните следующую команду, чтобы создать каталог :

sudo mkdir /etc/wireguard

Создайте открытый и закрытый ключи в каталоге /etc/wireguard .

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

Вы можете просматривать файлы с помощью cat или less . Закрытый ключ ни в коем случае нельзя передавать кому-либо.

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

Устройство можно настроить либо из командной строки с помощью ip и wg либо путем создания файла конфигурации с помощью текстового редактора.

Создайте новый файл с именем wg0.conf и добавьте следующее содержимое:

sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp     = firewall-cmd --zone=public --add-port 51820/udp && firewall-cmd --zone=public --add-masquerade
PostDown   = firewall-cmd --zone=public --remove-port 51820/udp && firewall-cmd --zone=public --remove-masquerade

Интерфейс можно назвать как угодно, однако рекомендуется использовать что-то вроде 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 — команда или скрипт, который выполняется перед запуском интерфейса. В этом примере мы используем firewall-cmd для открытия порта WireGuard и включения маскарадинга. Это позволит трафику покинуть сервер, предоставив клиентам VPN доступ в Интернет.

  • PostDown — команда или скрипт, который выполняется перед выключением интерфейса. Правила брандмауэра будут удалены после отключения интерфейса.

wg0.conf и privatekey не должны быть доступны для чтения обычным пользователям. Используйте chmod чтобы установить разрешения на 600 :

sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

После этого wg0 интерфейс 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: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
  private key: (hidden)
  listening port: 51820

Вы также можете использовать команду ip для проверки состояния интерфейса:

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

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

sudo systemctl enable wg-quick@wg0

Серверная сеть

Чтобы NAT работал, нам нужно включить переадресацию IP. Создайте новый файл /etc/sysctl.d/99-custom.conf и добавьте следующую строку:

sudo nano /etc/sysctl.d/99-custom.conf
/etc/sysctl.d/99-custom.conf
net.ipv4.ip_forward=1

Сохраните файл и примените изменения с помощью sysctl :

sudo sysctl -p /etc/sysctl.d/99-custom.conf
net.ipv4.ip_forward = 1

Вот и все. Пир CentOS, который будет действовать как сервер, настроен.

Настройка клиентов 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
/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

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

  • 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 — публичный ключ сервера CentOS (файл /etc/wireguard/publickey ).
  • Конечная точка — IP-адрес сервера CentOS с двоеточием и порт 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

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

sudo wg
interface: wg0
  public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
  private key: (hidden)
  listening port: 60351
  fwmark: 0xca6c

peer: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 41 seconds ago
  transfer: 213.25 KiB received, 106.68 KiB sent

Вы также можете открыть свой браузер, ввести «what is my ip», и вы должны увидеть IP-адрес вашего сервера CentOS.

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

sudo wg-quick down wg0

Клиенты Windows

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

Выводы

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

Если вы столкнулись с какой-либо проблемой, не стесняйтесь оставлять комментарий.

Оставьте комментарий