WireGuard — VPN нового поколения

Установка, настройка, эксплуатация.
Ответить
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

WireGuard — VPN нового поколения

Сообщение root »

Оглавление
Темы
Что за скрипт wireguard-install.sh?
Установка WireGuard
Дополнительные настройки firewalld
Управление конфигурацией
Вывод QR-кода
Проверка подключения на анонимность
Доступ к локальной сети через WireGuard
Дополнительные материалы
Wake on Lan: Удалённое включение компьютера
OpenVPN: Открытая виртуальная частная сеть
Синхронизация времени
BIND — DNS-сервер
ISCSI — Транспортный протокол для SCSI
QUAGGA — Протоколы динамической маршрутизации
Dnscrypt — Проксирование dns-трафика
Скрипт wireguard-install.sh предназначен для автоматизации процесса разворачивания WireGuard, который можно скачать по ссылке с githubusercontent.com
Пробежимся по набору дистрибутивов и функционалу, которые поддерживаются данным скиптом

Поддерживаемые дистрибутивы:
  • Ubuntu >= 16.04
  • Debian 10
  • Fedora
  • CentOS
  • Arch Linux
Основные функции
  • Установка необходимых пакетов, настройка WireGuard и конфигурирование файрволла и параметров системы (sysctl)
  • Добавление в конфигурацию WireGuard настроек для нового пользователя и генерация QR-кода с настройками для подключения
  • Удаление настроек для конкретного пользователя из конфигурации WireGuard
  • деинсталляция WireGuard
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »

Загрузите инсталлятор WireGuard, дайте скрипnу права на выполнение и запустите его. Все действия необходимо выполнять от имени администратора

Код: Выделить всё

curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
./wireguard-install.sh
При установке необходимо выполнить первичную настройку.
  • Введите свой внешний(белый) ip адрес
  • Укажите интерфейс сети
  • Укажите имя нового интерфейса для WireGuard
  • ipv4 WireGuard сервера
  • ipv6 WireGuard сервера
  • Порт WireGuard сервера
  • Два DNS сервера для клиентов
При установке так же добавиться пользователь. Для его настройки требуется указать набор следующих параметров:
  • Имя клиента
  • ipv4 клиента
  • ipv6 клиента
После ответа на вопросы инсталлятора будет создан конфигурационный файл с настройками для клиента в домашнем каталоге пользователя, так же будет выведен сгенерированный QR-код

В итоге после работы скрипта получаем два файла (wg0.conf и params) с настройками WireGuard в каталоге /etc/wireguard, и в домашнем каталоге конфигурацию для клиентов
# > cat /etc/wireguard/wg0.conf

Код: Выделить всё

[Interface]
Address = 10.55.55.1/24,fd55:55:55::1/64
ListenPort = 50250
PrivateKey = < PRIVATE_KEY >
PostUp = firewall-cmd --add-port 50250/udp && firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.55.55.0/24 masquerade' && firewall-cmd --add-rich-rule='rule family=ipv6 source address=fd55:55:55::0/24 masquerade'
PostDown = firewall-cmd --remove-port 50250/udp && firewall-cmd --remove-rich-rule='rule family=ipv4 source address=10.55.55.0/24 masquerade' && firewall-cmd --remove-rich-rule='rule family=ipv6 source address=fd55:55:55::0/24 masquerade' 

### Client notebook
[Peer]
PublicKey = < PUBLIC_KEY >
PresharedKey = < PRESHARED_KEY >
AllowedIPs = 10.55.55.2/32,fd55:55:55::2/128
О AllowedIPs
Показать
В WireGuard, `AllowedIPs` — это ключевой параметр конфигурации, который определяет, какие IP-адреса могут передаваться через интерфейс WireGuard. Этот параметр используется для настройки маршрутизации и фильтрации трафика. Давайте разберем это с примерами.
Основные принципы `AllowedIPs`
  1. Маршрутизация трафика через туннель:
    • — IP-адреса или сети, указанные в `AllowedIPs`, будут маршрутизироваться через интерфейс WireGuard.
    • — Например, если вы хотите, чтобы весь трафик отправлялся через туннель, вы можете указать `0.0.0.0/0` для IPv4 и `::/0` для IPv6.
  2. Определение разрешенного трафика:
    • — `AllowedIPs` также используется для определения, какой трафик может быть отправлен или принят от конкретного пира. Это своего рода фильтр для трафика.
Примеры конфигурации
Пример 1: Простая настройка VPN

Код: Выделить всё

...
[Peer]
...
AllowedIPs = 10.0.0.2/32
В этом примере `AllowedIPs = 10.0.0.2/32` означает, что только трафик, направленный к IP-адресу 10.0.0.2, будет отправлен через туннель.

Пример 2: Маршрутизация всего трафика через VPN

Код: Выделить всё

...
[Peer]
...
AllowedIPs = 0.0.0.0/0, ::/0
В этом примере `AllowedIPs = 0.0.0.0/0, ::/0` означает, что весь трафик будет маршрутизироваться через туннель.

Пример 3: Подключение к нескольким сетям

Код: Выделить всё

...
[Peer]
...
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24, 172.16.0.0/16
В этом примере `AllowedIPs = 10.0.0.2/32, 192.168.1.0/24, 172.16.0.0/16` позволяет маршрутизировать трафик к IP-адресу 10.0.0.2 и двум сетям 192.168.1.0/24 и 172.16.0.0/16 через туннель.
Дополнительные примечания
  • - Если у вас несколько пиров и вы хотите настроить маршрутизацию для разных сетей через разные пиры, вы можете указать соответствующие сети в `AllowedIPs` для каждого пира.
  • - Настройки `AllowedIPs` могут влиять на безопасность и производительность сети, поэтому их следует тщательно продумывать в зависимости от ваших нужд и топологии сети.
Надеюсь, это поможет вам лучше понять использование `AllowedIPs` в WireGuard! Если у вас есть дополнительные вопросы или нужны конкретные примеры, дайте знать.
# > cat /etc/wireguard/params

Код: Выделить всё

SERVER_PUB_IP=46.175.149.7
SERVER_PUB_NIC=eth0
SERVER_WG_NIC=wg0
SERVER_WG_IPV4=10.55.55.1
SERVER_WG_IPV6=fd55:55:55::1
SERVER_PORT=50250
SERVER_PRIV_KEY=< SERVER_PRIV_KEY >
SERVER_PUB_KEY=< SERVER_PUB_KEY >
CLIENT_DNS_1=208.67.222.222
CLIENT_DNS_2=208.67.220.220
Наличие данного файла проверяется при запуске скрипта и при его наличии считываются переменные. Если файл отсутствует, то начинается процедура установки и настройки WireGuard.
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »


В связи с вводом нового параметра параметра - forward, контролирующего пересылку трафика между сетями, нужно включить его.

Код: Выделить всё

firewall-cmd --add-forward --permanent
firewall-cmd --reload
Для предотвращения обнаружения тоннеля с помощью метода "Двусторонний пинг" рекомендуется отключить возможность отвечать на эхо-запросы с внешнего интерфейса тоннеля

Код: Выделить всё

firewall-cmd --remove-icmp-block={echo-request,echo-reply,timestamp-reply,timestamp-request} --permanent
firewall-cmd --reload
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »


[anchor=4 goto=top]Управление конфигурацией
При последующих попытках запустить скрипт Вы увидите меню из четырёх пунктов и сможете воспользоваться функциями управления пользователями и деинсталляции WireGuard.

Код: Выделить всё

Welcome to WireGuard-install!
The git repository is available at: https://github.com/angristan/wireguard-install

It looks like WireGuard is already installed.

What do you want to do?
   1) Add a new user
   2) Revoke existing user
   3) Uninstall WireGuard
   4) Exit
Select an option [1-4]:
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »


Если будет необходимость вновь преобразовывать конфигурацию в QR-код, то воспользуйтесь командой:

Код: Выделить всё

qrencode -t ansiutf8 -l L < /root/wg0-client-USER.conf
Пример QR-кода настроек клиента WireGuard
Пример QR-кода настроек клиента WireGuard
Если возникает необходимость часто и большое количество конфигураций преобразовывать в QR-кода, то можно воспользоваться следующей функцией:

Код: Выделить всё

qrcode() {
    if [ "$1" == "" ] || [ ! -e $1 ]; then
        echo "Параметр ошибочный или отсутствует"
        echo "Например, qrcode wg0-client/wg0-client.conf"
    else
        conf=$1
        qrencode -t ansiutf8 -l L < $conf
    fi
}
Код этой функции добавляем в ~/.bashrc
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »


Проверку подключения на анонимность можно выполнить он-лайн-сервисами например, по следующим ссылкам:
hidemy.name, thesafety.us, 2ip.ru
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »


Для того, чтобы через VPN была также доступна локальная сеть, внесём ряд изменений в файлы конфигурации сервера и клиента WireGuard.
Отредактируем файл /etc/wireguard/wg0.conf сервера:

Код: Выделить всё

$EDITOR /etc/wireguard/wg0.conf
В директиве AllowedIPs через запятую добавим адрес локальной подсети клиента, например 192.168.1.0/24:

Код: Выделить всё

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.9.0.2/32, 192.168.1.0/24
Перезапустим сервис WireGuard на сервере:

Код: Выделить всё

systemctl restart wg-quick@wg0.service
На клиенте, к локальной сети которого требуется получить доступ, разрешим перенаправление трафика и включим маскарадинг в Firewalld:

Код: Выделить всё

sysctl -w net.ipv4.conf.all.forwarding=1
sysctl -w net.ipv6.conf.all.forwarding=1
firewall-cmd --zone=public --add-masquerade
firewall-cmd --zone public --add-forward
Отредактируем файл конфигурации данного клиента, дописав в AllowedIPs подсеть через запятую (однако если там уже указано 0.0.0.0/0, то ничего более делать не требуется).
Проверим доступность компьютеров из локальной сети со стороны других клиентов WireGuard:

Код: Выделить всё

ping 192.168.1.2
Здесь вместо 192.168.1.2 укажем реально существующий адрес в локальной сети.
Если всё работает корректно, сделаем изменения на клиенте с LAN постоянными:

Код: Выделить всё

bash -c "echo -e \"net.ipv4.conf.all.forwarding=1\nnet.ipv6.conf.all.forwarding=1\" > /etc/sysctl.d/99-wireguard.conf"
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --permanent --zone public --add-forward
Перезагрузим настройки Firewalld:

Код: Выделить всё

firewall-cmd --reload
Ответить