Как настроить 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 включает в себя два инструмента командной строки с именем 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 в действие, используя атрибуты, указанные в файле конфигурации:

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 во время загрузки, выполните следующую команду:

sudo systemctl enable [email protected]

 

Сеть сервера

Чтобы 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

 

Сохраните файл и примените изменения:

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

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

После установки откройте приложение WireGuard и нажмите “Add Tunnel” -> “Add empty tunnel…”, как показано на рисунке ниже:

 

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

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

 

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

[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

 

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

В разделе peer добавьте следующие поля:

  • PublicKey – открытый ключ сервера CentOS (файл /etc/wireguard/publickey).
  • Конечная точка – IP-адрес сервера CentOS, за которым следует двоеточие, и порт WireGuard (51820).
  • AllowedIPs – 0.0.0.0/0

После этого нажмите кнопку «Save».

 

Добавьте клиентский узел на сервер

Последний шаг – добавить открытый ключ и 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

 

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

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

sudo wg-quick down wg0

 

Клиенты Windows

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

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

 

Вывод

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

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

Sidebar