Запуск VPN на власному сервері: WireGuard + Ubuntu
Створив інструкцію для себе як з повного нуля створити власний VPN сервер по протоколу WireGuard.
Особливості:
- Не зберігає пароль (а тільки хеш) що допомагає уникнути отримання доступу до вашої системи навіть коли. А також виправило помилку після копіювання з чужої інструкції.
- Отримує IP адресу автоматично (достатньо копіювати команди).
- Майже не ріже швидкість. Окремі програмки (як наприклад TunnelBear) зазвичай дорожчі і навіть за гроші досить повільні. Та й до них менше довіри (можуть моніторити трафік і збирати про вас дані).
Для роботи нам знадобиться:
- Придбаний VPS.
- Мені вистачає мінімального (1-2 vCPU).
- Перевірений і недорогий варіант: Hetzner Cloud.
- Програма для роботи з терміналом серверу.
- Наприклад: Bitvise. Там можна через зручний інтерфейс згенерувати SSH Key для безпечного входу на сервер.
- Можна і через Windows Power Shell, але там уже не буде графічного інтерфейсу і зручних кнопочок.
- На Mac чи Linux достатньо використовувати стандартний Термінал.
- Програма-клієнт для підключення до вашого серверу
- Завантажити можна на офіційному сайті:
https://www.wireguard.com/install/
- На деяких старих пристроях може не запуститись (наприклад не спрацювала на моєму старенькому Macbook з OS Catalina). Для таких випадків маю іншу інструкцію - по протоколу OpenVPN
Нюанс. Якщо у вас на сервері Ubuntu вище 22 версії, або якийсь незвичний провайдер обладнання, то дана інструкція може не спрацювати. Я не експерт і платно по цій темі не консультую, тому краще використовуйте ChatGPT якщо щось піде не за планом.
Частина 1 - Налаштування серверу
Оригінальна інструкція тут:
https://github.com/WeeJeWel/wg-easy
Однак я вніс деякі правки і запакував у скрипт.
Майте також на увазі що на Windows (і особливо в Bitvise) копіювання з терміналу відбувається звичайним виділенням, а вставка - просто правою кнопкою миші.
Крок 1: Встановлення необхідних інструментів
Перш за все, встановлюємо докер та Python (знадобиться для генерації паролю):
-
Docker: Для встановлення Docker на Ubuntu виконайте команди:
-
sudo apt update
-
sudo apt install docker.io -y
-
sudo systemctl start docker
-
sudo systemctl enable docker
-
Python: Переконайтеся, що Python 3 встановлений. Якщо ні, встановіть його:
-
bcrypt (для Python): Установіть бібліотеку bcrypt, якщо вона ще не встановлена. Тут у мене видало помилку, але я її проігнорував і все одно спрацювало :)
Крок 2: Створення Bash-скрипту
Створимо Bash-скрипт, який автоматично отримає IP сервера, запросить у вас пароль, згенерує хеш і запустить Docker-контейнер з wg-easy.
-
Створення файлу скрипту:
mkdir vpn
nano vpn/wg-easy.sh
-
Вміст файлу для вставки:
#!/bin/bash
# Запитуємо пароль у користувача
read -sp "Enter new password for web interface: " password
echo
# Генеруємо хеш пароля за допомогою Python
password_hash=$(python3 -c "import bcrypt; print(bcrypt.hashpw(b'$password', bcrypt.gensalt()).decode())")
# Отримуємо IP-адресу сервера автоматично
WG_HOST=$(curl -4 -s ifconfig.me)
# Показуємо готове посилання для відкриття в браузері
echo "Open the following link in your browser to access the admin interface:"
echo "http://$WG_HOST:51821"
# Запускаємо Docker контейнер
docker run -d \
--name=wg-easy \
-e WG_HOST=$WG_HOST \
-e PASSWORD_HASH=$password_hash \
-v ~/.wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy
-
Збережіть зміни і закрийте редактор (Ctrl+O, Enter, Ctrl+X).
Крок 3: Налаштування дозволів і запуск скрипту
-
Зробіть файл скрипту виконуваним:
chmod +x vpn/wg-easy.sh
-
Запустіть скрипт:
./vpn/wg-easy.sh
Скрипт запитає пароль, згенерує хеш пароля, автоматично визначить вашу публічну IP-адресу і запустить Docker-контейнер з wg-easy.
Для створення контейнера в майбутньому достатньо буде зайти на сервер та виконати цю ж саму команду.
Крок 4: Перевірка доступності веб-інтерфейсу
Після успішного запуску веб-інтерфейс wg-easy буде доступний за адресою:
http://IP_ВАШОГО_СЕРВЕРУ:51821
Скрипт автоматично генерує дане посилання. Тож можна його просто скопіювати з терміналу.
Рекомендую також відразу зберегти посилання та пароль в менеджері паролів, щоб потім не перевстановлювати весь сервер, через те, що забули пароль :)
Важливі команди для керування Docker-контейнером
Не потрібні для запуску, однак, можуть знадобитися якщо щось піде не за планом.
-
Перегляд активних контейнерів:
docker ps
-
Перегляд усіх контейнерів (включно зі зупиненими):
docker ps -a
-
Перегляд логів контейнера: Це допоможе, якщо щось піде не так.
docker logs wg-easy
-
Зупинка контейнера:
docker stop wg-easy
-
Запуск контейнера після зупинки:
docker start wg-easy
-
Перезапуск контейнера:
docker restart wg-easy
-
Видалення контейнера: Це потрібно, якщо ви хочете повністю видалити контейнер і запустити його знову.
docker rm -f wg-easy
-
Оновлення образу контейнера (наприклад, для нової версії):
docker pull ghcr.io/wg-easy/wg-easy
Що робити, якщо контейнер не працює?
- Перегляньте логи за допомогою команди
docker logs wg-easy
.
Це допоможе зрозуміти, що пішло не так.
- Перевірте порти (51820 для UDP і 51821 для TCP), щоб переконатися, що вони відкриті у брандмауері:
sudo ufw allow 51820/udp
sudo ufw allow 51821/tcp
sudo ufw reload
Створення конфігурацій для пристроїв
- Відкрийте веб інтерфейс за посиланням яке отримали від скрипта.
Встановлення та налаштування клієнта
VPN-клієнт - це спеціальна програма, яка
- підключається до серверу,
- автоматично застосовує конфігурації на пристрої
- та запускає VPN кнопкою
Крок 1 - Завантажте застосунок та встановіть його.
Крок 2 - Створіть конфігурації
- Перейдіть за посиланням із кроку 4 та введіть пароль

- Створіть новий "клієнт". Достатньо навіть одного на всі пристрої

- Для ПК завантажте файл конфігурації, для телефону згенеруйте за збережіть QR-код

Крок 3 - Запустіть застосунок та імпортуйте конфігурацію

Крок 4 - Все. Можна запускати :)
