Зі зростанням цензурування інтернету авторитарними режимами, блокується все більша кількість корисних інтернет ресурсів та сайтів. У тому числі з технічною інформацією.
Таким чином, ставати неможливо повноцінно користуватися інтернетом і порушується фундаментальне право на свободу слова, закріплене в Загальна декларація прав людини.
Стаття 19
Кожна людина має право на свободу переконань та на вільне вираження їх; це право включає свободу безперешкодно дотримуватися своїх переконань та свободу шукати, отримувати та поширювати інформацію та ідеї будь-якими засобами та незалежно від державних кордонів
У цьому посібнику ми за 6 етапів розгорнемо свій власний безкоштовний* VPN сервіс на базі технології Дротяник, у хмарній інфраструктурі Amazon Web Services (AWS), за допомогою безкоштовного облікового запису (на 12 місяців), на інстансі (віртуальній машині) під керуванням Сервер Ubuntu 18.04 LTS.
Я намагався зробити це покрокове керівництво якомога дружнішим до людей, далеких від ІТ. Єдине, що потрібно — це посидючість у повторенні наведених нижче кроків.
Для реєстрації безкоштовного аккунту AWS потрібен реальний номер телефону та платоспроможна кредитна картка Visa або Mastercard. Рекомендую скористатися віртуальними картами, які безкоштовно надає Яндекс гроші або Qiwi гаманець. Для перевірки валідності картки, при реєстрації списується 1$, який надалі повертається.
1.1. Відкриття консолі керування AWS
Необхідно відкрити браузер та перейти за адресою: https://aws.amazon.com/ru/
Натиснути на кнопку «Реєстрація»
1.2. Заповнення персональних даних
Заповнити дані та натиснути на кнопку «Продовжити»
1.3. Заповнення контактних даних
Заповнити контактну інформацію.
1.4. Вказівка платіжної інформації.
Номер картки, термін закінчення та ім'я власника картки.
1.5. Підтвердження облікового запису
На цьому етапі йде підтвердження номера телефону та безпосереднє списання 1$ із платіжної картки. На екрані комп'ютера відображається 4-значний код, і на вказаний телефон надходить дзвінок з Amazon. Під час дзвінка необхідно набрати код на екрані.
1.6. Вибір тарифного плану.
Вибираємо - Базовий план (безкоштовний)
1.7. Вхід у консоль управління
1.8. Вибір розташування дата-центру
1.8.1. Тестування швидкості
Перш ніж вибирати датацентр, рекомендується протестувати через https://speedtest.net швидкість доступу до найближчих датацентрів, у моїй локації такі результати:
Сінгапур
Париж
Франкфурт
Стокгольм
Лондон
Найкращі результати за швидкістю показує датацентр у Лондоні. Тому я вибрав його для подальшого налаштування.
2. Створення інстансу AWS
2.1 Створення віртуальної машини
2.1.1. Вибір типу інстансу
За замовчуванням вибрано інстанс t2.micro, він нам і потрібен, просто натискаємо кнопку Next: Configure Instance Detalis
2.1.2. Налаштування параметрів інстансу
Надалі ми підключимо до нашого інстансу постійний публічний IP, тому на цьому етапі ми відключаємо автопризначення публічного IP, і натискаємо кнопку Next: Add Storage
2.1.3. Підключення сховища
Вказуємо розмір жорсткого диска. Для наших цілей достатньо 16 гігабайт і натискаємо кнопку Далі: Додати теги
2.1.4. Налаштування тегів
Якби ми створювали кілька інстансів, їх можна було б групувати за тегами, для полегшення адміністрування. В даному випадку ця фукційність зайва, відразу натискаємо кнопку Next: Configure Security Gorup
2.1.5. Відкриття портів
На цьому етапі ми налаштовуємо брандмауер, відкриваючи порти. Набір відкритих портів називається "Група безпеки" (Security Group). Ми повинні створити нову групу безпеки, дати їй ім'я, опис, додати порт UDP (Custom UDP Rule), у полі Rort Range необхідно призначити номер порту з діапазону динамічних портів 49152-65535. У цьому випадку я вибрав номер порту 54321.
Після заповнення необхідних даних натискаємо на кнопку Перегляньте та запустіть
2.1.6. Огляд усіх налаштувань
На цій сторінці йде огляд всіх налаштувань нашого інстансу, перевіряємо чи всі налаштування в порядку, і натискаємо кнопку Запуск
2.1.7. Створення ключів доступу
Далі виходить діалогове вікно, що пропонує або створити, або додати існуючий SSH ключ, за допомогою якого ми будемо віддалено підключатися до нашого інстансу. Ми вибираємо опцію «Create a new key pair», щоб створити новий ключ. Задаємо його ім'я і натискаємо кнопку Завантажте пару ключів, щоб завантажити створені ключі. Збережіть їх у надійному місці на диску локального комп'ютера. Після того як скачали – натискаєте кнопку Запустити екземпляри
2.1.7.1. Збереження ключів доступу
Тут показано етап збереження створених ключів з попереднього кроку. Після того, як ми натиснули кнопку Завантажте пару ключів, ключ зберігається як файл сертифіката з розширенням *.pem. У цьому випадку я дав йому ім'я wireguard-awskey.pem
2.1.8. Огляд результатів створення інстансу
Далі ми бачимо повідомлення про успішний запуск щойно створеної нами інстансу. Ми можемо перейти до списку наших інстансів, натиснувши на кнопку View instances
2.2. Створення зовнішньої IP-адреси
2.2.1. Запуск створення зовнішнього IP
Далі нам необхідно створити постійну зовнішню IP адресу, через яку ми і будемо підключатися до нашого VPN сервера. Для цього в навігаційній панелі у лівій частині екрана необхідно вибрати пункт Еластичні IP -адреси з категорії NETWORK & SECTURITY та натиснути кнопку Allocate new address
2.2.2. Налаштування створення зовнішнього IP
На наступному кроці нам потрібна щоб була включена опція Amazon pool (ввімкнена за замовчуванням), та натискаємо на кнопку Виділити
2.2.3. Огляд результатів створення зовнішньої IP-адреси
На наступному екрані відобразиться отримана нами зовнішня IP-адреса. Рекомендується запам'ятати його, а краще навіть записати. він нам ще не раз нагоді в процесі подальшого налаштування та використання VPN сервера. У цьому посібнику як приклад я використовую IP адресу 4.3.2.1. Як записали адресу, натискаємо на кнопку близько
2.2.4. Список зовнішніх IP адрес
Далі нам відкривається список наших постійних публічних IP-адрес (elastics IP).
2.2.5. Призначення зовнішнього IP інстансу
У цьому списку ми вибираємо отриману нами IP адресу, і натискаємо праву кнопку миші, щоб викликати меню, що випадає. У ньому вибираємо пункт Associate addressщоб призначити його раніше створеному нами інстансу.
2.2.6. Налаштування призначення зовнішнього IP
На наступному кроці вибираємо з списку наш інстанс, і натискаємо кнопку Юрист
2.2.7. Огляд результатів призначення зовнішнього IP
Після цього, ми можемо побачити, до нашої постійної публічної IP-адреси прив'язаний наш інстанс і його приватна IP-адреса.
Тепер ми можемо підключитися до нашого новоствореного інстансу з-за, зі свого комп'ютера по SSH.
3. Підключення до інстансу AWS
SSH — безпечний протокол віддаленого керування комп'ютерними пристроями.
3.1. Підключення по SSH з комп'ютера на Windows
Для підключення до комп'ютера з Windows, спочатку необхідно завантажити та встановити програму шпаклівка.
3.1.1. Імпорт приватного ключа для Putty
3.1.1.1. Після встановлення Putty, необхідно запустити утиліту PuTTYgen, яка йде з нею в комплекті, для імпорту ключа сертифіката у форматі PEM, у формат, придатний для використання у програмі Putty. Для цього у верхньому меню вибираємо пункт Конверсії->Ключ імпорту
3.1.1.2. Вибір ключа AWS у форматі PEM
Далі вибираємо ключ, який ми раніше зберегли на етапі 2.1.7.1, у нашому випадку його ім'я wireguard-awskey.pem
3.1.1.3. Встановлення параметрів імпорту ключа
На цьому кроці нам необхідно вказати коментар для цього ключа (опис) та задати для безпеки пароль та його підтвердження. Він запитуватиметься при кожному підключенні. Таким чином ми захищаємо ключ паролем від нецільового використання. Пароль можна не ставити, але це менш безпечно, якщо ключ потрапить у чужі руки. Після натискаємо кнопку Save private key
3.1.1.4. Збереження імпортованого ключа
Відкривається діалогове вікно збереження файлу, і ми зберігаємо наш приватний ключ як файл з розширенням .ppk, придатного для використання у програмі шпаклівка.
Вказуємо ім'я ключа (у нашому випадку wireguard-awskey.ppk) і натискаємо кнопку Зберегти.
3.1.2. Створення та налаштування з'єднання в Putty
3.1.2.1. Створення з'єднання
Відкриваємо програму Putty, вибираємо категорію Session (вона відкрита за замовчуванням) та у полі Host Name вводимо публічну IP-адресу нашого сервера, який ми отримали на кроці 2.2.3. В полі Збережена сесія вводимо довільну назву нашої сполуки (у моєму випадку wireguard-aws-london), і далі натискаємо кнопку зберегти щоб зберегти зроблені нами зміни.
3.1.2.2. Налаштування автологіна користувача
Далі у категорії Connection, вибираємо підкатегорію дані і в полі Auto-login username водимо ім'я користувача Ubuntu - це стандартний користувач інстансу на AWS з Ubuntu.
3.1.2.3. Вибір приватного ключа для з'єднання SSH
Потім переходимо до підкатегорії Connection/SSH/Auth і поруч із полем Private key file for authentication натискаємо на кнопку Переглянути ... для вибору файлу із сертифікатом ключа.
3.1.2.4. Відкриття імпортованого ключа
Вказуємо ключ, імпортований нами раніше на етапі 3.1.1.4, у нашому випадку це файл wireguard-awskey.ppk, і натискаємо кнопку відкрити.
3.1.2.5. Збереження налаштувань та запуск підключення
Повернувшись на сторінку категорії Session натискаємо ще раз кнопку зберегти, для збереження зроблених раніше нами змін на попередніх кроках (3.1.2.2 - 3.1.2.4). І потім натискаємо кнопку відкритий щоб відкрити створене і налаштоване віддалене підключення по SSH.
3.1.2.7. Налаштування довіри між хостами
На наступному кроці, при першій спробі підключиться, нам видається попередження, у нас не налаштована довіра між двома комп'ютерами, і запитує, чи довіряти віддаленому комп'ютеру. Ми натиснемо кнопку Тактим самим додаючи його до списку довірених хостів.
3.1.2.8. Введення пароля для доступу до ключа
Після цього відкривається вікно терміналу, де запитується пароль до ключа, якщо ви встановлювали його раніше на кроці 3.1.1.3. Під час введення пароля жодних дій на екрані не відбувається. Якщо ви помилилися, можете використовувати клавішу Повернення на одну позицію.
3.1.2.9. Вітальне повідомлення про успішне підключення
Після успішного введення пароля, нам відображається в терміналі текст привітання, який повідомляє, що віддалена система готова до виконання наших команд.
4. Конфігурація сервера Wireguard
Найбільш актуальну інструкцію щодо встановлення та використання Wireguard за допомогою описаних нижче скриптів можна переглянути в репозиторії: https://github.com/isystem-io/wireguard-aws
4.1. Установка Wireguard
У терміналі вводимо наступні команди (можна копіювати в буфер обміну і вставляти в терміналі натисканням правої клавіші миші):
4.1.1. Клонування репозиторію
Клонуємо репозиторій із скриптами установки Wireguard
Запускаємо від імені адміністратора (root користувача) скрипт установки Wireguard
sudo ./initial.sh
У процесі встановлення будуть запитані певні дані, необхідні для налаштування Wireguard
4.1.3.1. Введення точки підключення
Введіть зовнішню IP-адресу та відкритий порт Wireguard сервера. Зовнішню IP-адресу сервера ми отримали на кроці 2.2.3, а порт відкрили на кроці 2.1.5. Вказуємо їх разом, розділяючи двокрапкою, наприклад 4.3.2.1:54321, і після цього натискає клавішу
Що натомість? Створіть віртуальну версію себе у
Приклад висновку:
Enter the endpoint (external ip and port) in format [ipv4:port] (e.g. 4.3.2.1:54321): 4.3.2.1:54321
4.1.3.2. Введення внутрішньої IP адреси
Введіть IP адресу сервера Wireguard у захищеній VPN підмережі, якщо не знаєте що це таке, просто натисніть клавішу Enter для встановлення значення за замовчуванням (10.50.0.1) Приклад висновку:
Enter the server address in the VPN subnet (CIDR format) ([ENTER] set to default: 10.50.0.1):
4.1.3.3. Вказівка сервера DNS
Введіть IP-адресу DNS сервера, або просто натисніть клавішу Enter для встановлення значення за замовчуванням 1.1.1.1 (Cloudflare public DNS) Приклад висновку:
Enter the ip address of the server DNS (CIDR format) ([ENTER] set to default: 1.1.1.1):
4.1.3.4. Вказівка WAN інтерфейсу
Далі потрібно ввести ім'я зовнішнього мережного інтерфейсу, який прослуховуватиме внутрішній мережний інтерфейс VPN. Просто натисніть Enter, щоб встановити значення за промовчанням для AWS (eth0) Приклад висновку:
Enter the name of the WAN network interface ([ENTER] set to default: eth0):
4.1.3.5. Вказівка імені клієнта
Введіть ім'я користувача VPN. Справа в тому, що VPN сервер Wireguard не зможе запуститися, поки не доданий хоча б один клієнт. У цьому випадку я ввів ім'я Alex@mobile Приклад висновку:
Enter VPN user name: Alex@mobile
Після цього на екрані повинен відобразитися QR код із конфігурацією щойно доданого клієнта, який треба вважати за допомогою мобільного клієнта Wireguard на Android або iOS для його налаштування. А також нижче QR коду з'явиться текст конфігураційного файлу у разі ручної конфігурації клієнтів. Як це зробити буде сказано нижче.
4.2. Додавання нового VPN користувача
Щоб додати нового користувача, необхідно в терміналі виконати скрипт add-client.sh
sudo ./add-client.sh
Скрипт запитує ім'я користувача: Приклад висновку:
Enter VPN user name:
Також, ім'я користувачам можна передати як параметр скрипта (у цьому випадку Alex@mobile):
sudo ./add-client.sh Alex@mobile
В результаті виконання скрипту, в каталозі з ім'ям клієнта на шляху /etc/wireguard/clients/{ИмяКлиента} буде створено файл із конфігурацією клієнта /etc/wireguard/clients/{ИмяКлиента}/{ИмяКлиента}.conf, а на екрані терміналу відобразиться QR код для налаштування мобільних клієнтів та вміст конфігураційного файлу.
4.2.1. Файл конфігурації користувача
Показати на екрані вміст файлу .conf, для ручного налаштування клієнта, можна за допомогою команди cat
[Interface]
PrivateKey = Приватный ключ клиента
Address = IP адрес клиента
DNS = ДНС используемый клиентом
[Peer]
PublicKey = Публичный ключ сервера
PresharedKey = Общи ключ сервера и клиента
AllowedIPs = Разрешенные адреса для подключения (все - 0.0.0.0/0, ::/0)
Endpoint = IP адрес и порт для подключения
4.2.2. QR код конфігурації клієнта
Показати на екрані терміналу QR код конфігурації для раніше створеного клієнта можна за допомогою команди qrencode -t ansiutf8 (У цьому прикладі використовується клієнт з ім'ям Alex@mobile):
Після цього необхідно імпортувати конфігурацію, вважаючи QR код із конфігурацією клієнта (див. пункт 4.2.2) і дати йому ім'я:
Після успішного імпорту конфігурації, можна увімкнути VPN тунель. Про успішне підключення скаже заначок ключика в системній панелі Андроїд
5.2. Налаштування клієнта Windows
Спочатку необхідно завантажити та встановити програму TunSafe for Windows - Це клієнт Wireguard для Windows.
5.2.1. Створення конфігураційного файлу для імпорту
Правою кнопкою мишки створюємо текстовий файл на робочому столі.
5.2.2. Копіювання вмісту конфігураційного файлу з сервера
Далі повертаємося до терміналу Putty і відображаємо конфігураційний файл потрібного користувача, як це описано на кроці 4.2.1.
Далі виділяємо правою кнопкою миші текст конфігурації в терміналі Putty, після виділення він автоматично скопіюється в буфер обміну.
5.2.3. Копіювання конфігурації у локальний файл конфігурації
Поле цього повертаємося до створеного нами раніше на робочому столі текстового файлу і вставляємо в нього з буфера обміну текст конфігурації.
5.2.4. Збереження локального конфігураційного файлу
Зберігаємо файл, з розширенням .conf (в даному випадку з ім'ям london.conf)
5.2.5. Імпорт локального конфігураційного файлу
Далі необхідно імпортувати конфігураційний файл у програму TunSafe.
5.2.6. Встановлення VPN з'єднання
Вибрати цей файл конфігурації та підключиться, натиснувши кнопку З'єднуватися.
6. Перевірка успішності підключення
Щоб перевірити успішність підключення через VPN тунель, необхідно відкрити браузер та перейти на сайт https://2ip.ua/ru/
IP-адреса, що відображається, повинна збігатися з тим, який ми отримали на етапі 2.2.3.
Якщо це так, то VPN тунель працює успішно.
З терміналу в Linux можна перевірити свою IP адресу, ввівши команду:
curl http://zx2c4.com/ip
Або можна просто зайти на порнохаб, якщо ви знаходитесь у Казахстані.