Степанов Евгений
QA Engineer
Настраиваем свой VPN сервер с помощью WireGuard
Установка WireGuard в CentOS 9
dnf -y install wireguard-tools
Установка WireGuard в CentOS Stream release 8 (на VDS)
yum install elrepo-release epel-release
yum install kmod-wireguard wireguard-tools
Установка WireGuard в Debian
sudo apt update
sudo apt install wireguard
Генерация ключей
cd /home/user/
mkdir wireguard-keys
cd wireguard-keys
Создайте закрытый ключ и открытый ключ для WireGuard и измените его разрешения с помощью следующих команд:
wg genkey | tee server-private.key
chmod go= server-private.key
cat server-private.key | wg pubkey | tee server-public.key
wg genkey | tee client-private.key
chmod go= client-private.key
cat client-private.key | wg pubkey | tee client-public.key
wg genkey | tee android-private.key
chmod go= android-private.key
cat android-private.key | wg pubkey | tee android-public.key
Команды одинаковые, для генерации серверного, клиентского и дополнительного ключа для телефона.
Команда sudo chmod go=... удаляет все разрешения для файла для пользователей и групп, кроме пользователя root, чтобы гарантировать, что только пользователь root может получить доступ к закрытому ключу.
Создание конфигурации сервера WireGuard
Создайте новый файл конфигурации с помощью предпочитаемого вами редактора, выполнив следующую команду:
mcedit /etc/wireguard/wg0.conf
Вы можете изменить ListenPort строку, если хотите, чтобы WireGuard был доступен на другом порту:
[Interface]
PrivateKey = тут серверный приват ключ (содержимое файла server-private.key)
Address = 10.10.80.1/24
ListenPort = 51820
SaveConfig = true
Строка SaveConfig гарантирует, что при отключении интерфейса WireGuard любые изменения будут сохранены в файле конфигурации.
Запускаем службу WireGuard
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
systemctl status wg-quick@wg0
В выходных данных показаны ip команды, используемые для создания виртуального wg0 устройства и назначения ему адресов IPv4 и IPv6, которые вы добавили в файл конфигурации. Вы можете использовать эти правила для устранения неполадок в туннеле или с помощью wg самой команды, если хотите попробовать вручную настроить интерфейс VPN.
Посмотреть подключения
wg
Добавление пира на сервере
wg set wg0 peer тут_содержание_клиентского_публичного_ключа allowed-ips 10.10.80.2
#Пример с ключом
wg set wg0 peer HfOwerSdHAoBYkogODhrsvjwOBjxHOVy37XVrsr6wkE= allowed-ips 10.10.80.2
Чтобы пиры появились в конфиге /etc/wireguard/wg0.conf, необходимо сделать
wg-quick down wg0
systemctl restart wg-quick@wg0
Обратите внимание, что allowed-ips часть команды принимает список адресов IPv4 и IPv6, разделенных запятыми.
Вы можете указать отдельные IP-адреса, если хотите ограничить IP-адрес, который одноранговый узел может назначать себе, или диапазон, если ваши одноранговые узлы могут использовать любой IP-адрес в диапазоне VPN.
Также обратите внимание, что никакие два одноранговых узла не могут иметь одинаковые allowed-ips настройки.
Если вы хотите обновить allowed-ips существующий одноранговый узел, вы можете снова запустить ту же команду, но изменить IP-адреса.
Поддерживается несколько IP-адресов. Например, чтобы изменить только что добавленный одноранговый узел WireGuard, чтобы добавить IP-адрес 10.8.0.100 к существующим 10.8.0.2, вы должны выполнить следующее:
sudo wg set wg0 peer PeURxj4Q75RaVhDFkRTpDvBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100
После того, как вы запустили команду для добавления пира, проверьте состояние туннеля на сервере с помощью команды wg
Удаление конфигурации одного узла на сервере
Если вы хотите полностью удалить конфигурацию однорангового узла с сервера WireGuard, вы можете запустить следующую команду, обязательно заменив правильный открытый ключ для однорангового узла, который вы хотите удалить:
sudo wg set wg0 peer PeDFxj4Q75RaVhBKkRTpssBPiPSGb5fQijgJsTa12hg= remove
Как правило, вам потребуется удалить конфигурацию однорангового узла только в том случае, если одноранговый узел больше не существует или если его ключи шифрования скомпрометированы или изменены.
В противном случае лучше оставить конфигурацию на месте, чтобы одноранговый узел мог повторно подключаться к VPN, не требуя, чтобы вы allowed-ipsкаждый раз добавляли его ключ.
Настройка фаервола в CentOS
firewall-cmd --state
firewall-cmd --permanent --add-port=51820/udp
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
firewall-cmd --list-all
Настройка фаервола в Debian
Чтобы настроить переадресацию
mcedit /etc/ufw/sysctl.conf
#разкомментить или добавить строчку
net/ipv4/ip_forward=1
Добавить порт wireguard
ufw allow 51820/udp
ufw status verbose
Включить маскарадинг и разрешить форвардинг пакетов
Включаем правило MASQUERADE, редактированием файла:
mcedit /etc/ufw/before.rules
Перед filter добваляем:
*nat
-A POSTROUTING -s 10.10.80.0/24 -o ens192 -j MASQUERADE
COMMIT
# Don't delete these required lines, otherwise there will be errors
*filter
Разрешаем переадресацию пакетов.
mcedit /etc/default/ufw
#найти параметр и изменить на ACCEPT
DEFAULT_FORWARD_POLICY="ACCEPT"
После добавления этих правил отключите и снова включите UFW, чтобы перезапустить его и загрузить изменения из всех файлов, которые вы изменили:
sudo ufw disable
sudo ufw enable
Вы можете подтвердить, что правила действуют, выполнив команду ufw status.
Конфиг клиента
Если на этапе установки сервера не создали ключи клиентов, то создаем:
wg genkey | tee client-private.key
chmod go= client-private.key
cat client-private.key | wg pubkey | tee client-public.key
# И точно так же для второго клиента, например мобилки.
wg genkey | tee android-private.key
chmod go= android-private.key
cat android-private.key | wg pubkey | tee android-public.key
Создание конфига клиента
[Interface]
PrivateKey = тут приват ключ (содержание файла client-private.key)
Address = 10.10.80.2/24
DNS = 8.8.8.8,8.8.4.4
[Peer]
PublicKey = тут публичный ключ сервера (содержание файла server-public.key)
AllowedIPs = 0.0.0.0/0
Endpoint = 192.168.10.16:51820
Если в AllowedIPs = указать 10.10.80.0/24 то трафик будет разрешен только для этой сети, а если 0.0.0.0/0 то сервер WireGuard будет в качестве шлюза для всего трафика.
Создание конфига для мобилы, через qr code
Установка в CentOS
dnf install epel-release
dnf install qrencode
Установка в Debian
apt install qrencode
Создаем директорию и файл для конфига:
cd /home/user
mkdir wireguard-config
cd wireguard-config
touch client.conf
Вставляем содержимое в файл:
[Interface]
PrivateKey = APcsFeyFKyHicAd4dTinZVGCbQ04rseNsBk6tDrNZVQ=
Address = 10.10.80.3/24
DNS = 8.8.8.8,8.8.4.4
[Peer]
PublicKey = sZ1EWc3arsDD8BPmjRLu/g9ZTTGASdewv4YpA2mnZ7DU=
AllowedIPs = 0.0.0.0/0
Endpoint = 192.168.10.16:51820
Тут всё то же самое, что и в конфиге для клиента, который был чуть выше.
Генерируем QR код по конфигу:
qrencode -t ansiutf8 < client.conf