Что такое wireguard и зачем он нужен - статей много, здесь ничего этого не будет. Только шаги и команды.
Client ---> VPN server ---> Internet
Сервер
Выбираем физический или виртуальный сервер и подключаемся к консоли.
Обновляемся
sudo apt update && sudo apt upgrade -y
Устанавливаем сам wireguard
sudo apt install wireguard -y
Активируем пересылку трафика, для этого редактируем файл
sudo nano /etc/sysctl.conf
Находим в файле параметр net.ipv4.ip_forward, раскомментируем его и устнавливааем значение =1
Проверяем
cat /proc/sys/net/ipv4/ip_forward
Должна вернутся 1
Перезагружаемся
sudo reboot
Подключаемся после перезагрузки
Сгенерируем пару ключей для сервера
wg genkey | tee server-pri.key | wg pubkey > server-pub.key
И для клиента
wg genkey | tee client-pri.key | wg pubkey > client-pub.key
В резултате получим черыре файла:
- server-pri.key - приватный ключ сервера
- server-pub.key - публичный ключ сервера
- client-pri.key - приватный ключ клиента
- client-pub.key - публичный ключ клиента
Приватные ключи должны хранится в надежном месте, публичные - собственно можно публиковать в открытом доступе кому угодно.
Создаем конфигурацию сервера
sudo nano /etc/wireguard/wg0.conf
Вставляем в него следующее содержимое
[Interface]
# Server Address = 10.10.10.1/24 #адрес нашего виртуального интерфейса ListenPort = 51820 # порт, на котором будет работать wireguard
PrivateKey = # сюда вставляем содержимое файла server-pri.key, сгенерированного на предыдущем шаге
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens1 -j MASQUERADE
#здесь указан физический интерфейс сервера ens1, нобходимо скорректировать под свой сверер
[Peer]
# Client PublicKey = # сюда вставляем содержимое файла client-pub.key, сгенерированного на предыдущем шаге
AllowedIPs = 10.10.10.2/32
Запускаем сервис wireguard
sudo systemctl start wg-quick@wg0
И устанавливаем автозапуск
sudo systemctl enable wg-quick@wg0
Клиент
Создаем конфигурацию клиента
nano client.conf
Вставляем содержимое
[Interface]
PrivateKey = # сюда вставляем содержимое файла client-pri.key Address = 10.10.10.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = # сюда вставляем содержимое файла server-pub.key AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = xx.xx.xx.xx:51820 # xx.xx.xx.xx внешний адрес нашего сервера
Можем либо файлом перенести эту конфигурацию на клиента, либо через QR-код с помощью qrencode
sudo apt install qrencode -y
Генерируем QR-код либо в отдельный файл
cat client.conf | qrencode -o client.png
Либо отображаем QR-код сразу в консоли
qrencode -t ansiutf8 < client.conf
Активируем клиента и наслаждаемся.
90% ошибок при настройке - невнимательность. Если что-то не работает - проверяем первым делом ключи и IP-адреса.
В мобильном клиенте wireguard для iOS, есть удобная опция автоподключение, где можно указать когда активировать VPN. Например, только при использовании мобильной сети или WiFi, все кроме определенных сетей.