Установка WireGuard VPN на Ubuntu 20.04
Разберем установку и настройку WireGuard. Это бесплатный и быстрый VPN с открытым исходным кодом.
Подключаемся к нашему серверу через ssh и выполняем следующие команды.
Для начала обновим список пакетов на нашем сервере и установим их командами:
apt update apt upgrade
Теперь можно установить WireGuard:
apt install wireguard
Первое, что необходимо сделать, это сгенерировать пару ключей для сервера:
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Создаем конфиг сервера:
nano /etc/wireguard/wg0.conf
Конфиге прописываем следующие строчки:
[Interface] PrivateKey = <SERVER-PRIVATE-KEY> Address = 10.0.0.1/24 ListenPort = 51830 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
В PrivateKey прописываем содержимое из файла /etc/wireguard/privatekey. Так же в ListenPort можно подставить другое значение, если вы не хотите использовать номер порта по умолчанию. Address - это адрес сервера при соединении по VPN. PostUp и PostDown команды которые будут выполняться при активации и деактивации сетевого интерфейса wg0. Это команды для файрволла включающие форвардинг пакетов.
Так же не забудьте подставить вместо ens3 название вашего сетевого интерфейса, если он отличается.
Узнать названия сетевых интерфейсов можно командой:
ip a
Включаем поддержку IP форвардинга. Для этого открываем файл sysctl.conf.
nano /etc/sysctl.conf
Находим в нем строчку net.ipv4.ip_forward=1 и разкомментируем ее (убираем перед ней символ #).
Перезапускаем сервис, чтобы применить настройки:
sysctl -p
Теперь включаем через systemctl демон WireGuard и запускаем его:
systemctl enable wg-quick@wg0.service systemctl start wg-quick@wg0.service systemctl status wg-quick@wg0.service
Выставляем для приватного ключа и конфига настройки доступа только для чтения:
chmod 600 /etc/wireguard/privatekey chmod 600 /etc/wireguard/wg0.conf
Теперь займемся настройками клиентов. На официальном сайте WireGuard берем клиента для используемой вами операционной системы. Для телефонов на Android и iOS.
Генерируем ключи для клиента:
wg genkey | tee /etc/wireguard/client_privatekey | wg pubkey | tee /etc/wireguard/client_publickey
Открываем конфиг WireGuard
nano /etc/wireguard/wg0.conf
Дописываем ниже следующие строки:
[Peer] PublicKey = <CLIENT-PUBLIC-KEY> AllowedIPs = 10.0.0.2/32
В PublicKey подставляем содержимое созданного файла /etc/wireguard/client_publickey.
Перезагружаем в systemd сервис wireguard:
systemctl restart wg-quick@wg0 systemctl status wg-quick@wg0
Теперь создадим конфиг client.conf для локальной машины клиента. Пропишем в него следующее:
[Interface] PrivateKey = <CLIENT-PRIVATE-KEY> Address = 10.0.0.2/32 DNS = 8.8.8.8 [Peer] PublicKey = <SERVER-PUBLIC-KEY> Endpoint = <SERVER-IP>:51830 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 20
В секции [Interface] в PrivateKey прописываем приватный ключ клиента /etc/wireguard/client_privatekey. В Address приписываем тот же адрес, что записывали в wg0.conf для этого клиента. В DNS можно прописать другие dns сервера (например 1.1.1.1) через запятую.
В секции [Peer] в PublicKey прописываем публичный ключ сервера из /etc/wireguard/publickey. В Endpoint вставим ip вашего сервера и порт для подключения, который вы указали в настройках. AllowedIPs указываем ip адреса с которых разрешено подключатся к серверу. Если оставить все нули, то весь трафик с компьютера будет идти через WireGuard. Опция PersistentKeepalive указывает через сколько секунд посылать пакеты на сервер, служит для поддержания соединения.
Теперь сохраняем этот конфиг на локальном компьютере и открываем его в клиенте WireGuard'а.