Як запустити власний сервер OpenVPN на Raspberry PI

Привіт усім!

У цій короткій статті я розповім, як налаштувати власний сервер VPN (Віртуальна приватна мережа) на Raspberry PI з OpenVPN. Після того, як ми налаштуємо сервер, ми налаштуємо сервер обфускації, щоб замаскувати наш трафік, вказуючи на те, що ми використовуємо VPN. Це допоможе нам уникнути певної форми цензури.

Навіщо використовувати VPN?

Спочатку поговоримо про те, чому ви можете використовувати сервер VPN:

  1. Уникайте нападу посеред людини. Якщо у вас є зловмисний користувач у вашій локальній мережі - навіть ваш сусід по кімнаті - ця людина може контролювати ваш незашифрований трафік і втручатися в нього.
  2. У моєму випадку приховуйте свою діяльність в Інтернеті від свого провайдера (Інтернет-провайдера) або університету.
  3. Розблокувати послуги. Мій університет блокує всі пакети UDP (User Datagram Protocol). Це означає, що я не можу використовувати жодну програму, яка спілкується через UDP. Я не можу користуватися своїм поштовим клієнтом, грати в ігри або навіть використовувати Git!

Я вирішив налаштувати VPN у своєму домашньому Інтернеті за допомогою Raspberry Pi. Таким чином я можу підключитися до своєї домашньої мережі, перебуваючи в університеті. Якщо вам потрібен сервер VPN в іншій країні, ви можете придбати віртуальний приватний сервер за 5 доларів на місяць у DigitalOcean. Ви можете скористатися моїм реферальним посиланням, щоб отримати знижку 10 доларів - це два місяці безкоштовного VPN. Але необов’язково використовувати його, якщо не хочете.

Встановлення OpenVPN

Цей крок дуже простий, тому що ми використаємо сценарій оболонки, щоб зробити це за вас. Тож вам просто потрібно «натиснути» далі і закінчити.

Встановлення триватиме довго, залежно від вибраного розміру ключа. На моєму Raspberry Pi 3 Model B це зайняло близько 3 годин.

Будь ласка, перейдіть до цього сховища, а потім дотримуйтесь інструкцій

Angristan / OpenVPN-install

OpenVPN-install - Налаштуйте власний сервер OpenVPN на Debian, Ubuntu, Fedora CentOS та Arch Linux github.com

Якщо ви не знаєте IP-адресу свого сервера, просто вкажіть 0.0.0.0. Я вибрав 443порт і протокол TCP (Transmission Control Protocol).

Примітка : Це дуже важливо, оскільки мій університет дозволяє лише порти TCP / 80 і TCP / 443 , решта в значній мірі заблоковані. Також Obfsproxy працює лише з TCP, тому переконайтеся, що ви вибрали TCP !

Після закінчення сценарію ви отримаєте файл .ovpn . Його можна імпортувати у ваш улюблений VPN-клієнт, і все повинно працювати нестандартно.

Перевірка з'єднання

Імпортуйте файл .ovpn у ваш VPN-клієнт і змініть ip 0.0.0.0на локальний ip вашого Raspberry PI. Залежно від конфігурації вашої мережі, вона може мати таку форму 192.168.*.*.

Примітка: Це спрацює, лише якщо ви підключені до того ж Wi-Fi, що і Pi.

Я налаштував свій маршрутизатор, щоб PI завжди отримував зарезервовану IP-адресу. Можливо, вам доведеться перевірити налаштування маршрутизатора, якщо ви хочете зробити щось подібне.

Якщо з’єднання вдалося, вітаємо, тепер у вас є сервер VPN! Але ви не можете отримати до нього доступ ззовні ... поки.

Якщо вам потрібен лише сервер OpenVPN без проксі-проксі, тоді ви можете перейти до переадресації портів .

Obfuscation Proxy Встановити

Obfs4 - скремблюючий проксі. Це маскує ваш інтернет-трафік, щоб виглядати як шум. Той, хто підглядає ваш трафік, насправді не знатиме, що ви робите, і це захистить вас від активних зондуючих атак, які використовує Великий китайський брандмауер.

Примітка. Цей метод не спрацює, якщо ваш супротивник дозволяє лише трафік із білого списку :(

Давайте встановимо проксі-сервер зараз.

0. Встановіть необхідний пакет:

apt-get update && apt-get install obfs4proxy
  1. Створіть каталог, який буде містити конфігурацію.
sudo mkdir -p /var/lib/tor/pt_state/obfs4

2. Створіть файл конфігурації.

sudo nano /var/lib/tor/pt_state/obfs4/obfs4.config

У файл конфігурації ви вставите такі речі:

TOR_PT_MANAGED_TRANSPORT_VER=1TOR_PT_STATE_LOCATION=/var/lib/tor/pt_state/obfs4TOR_PT_SERVER_TRANSPORTS=obfs4TOR_PT_SERVER_BINDADDR=obfs4-0.0.0.0:444TOR_PT_ORPORT=127.0.0.1:443

TOR_PT_SERVER_BINDADDR - це адреса, за якою проксі буде прослуховувати нові підключення. У моєму випадку це саме так 0.0.0.0:444- чому 444, а не 443? Ну, оскільки я не хочу змінювати конфігурацію сервера OpenVPN, яка наразі прослуховується на 443. Крім того, я зв’яжу цю адресу згодом із 443 за допомогою переадресації портів.

TOR_PT_ORPORT повинен вказувати на сервер OpenVPN. У моєму випадку мій сервер працює127.0.0.1:443

3. Створіть файл служби SystemD.

sudo nano /etc/systemd/system/obfs4proxy.service

Потім вставте в нього наступний вміст:

[Unit]Description=Obfsproxy Server[Service]EnvironmentFile=/var/lib/tor/pt_state/obfs4/obfs4.configExecStart=/usr/bin/obfs4proxy -enableLogging true -logLevelStr INFO[Install]WantedBy=multi-user.target

4. Запустіть проксі-сервер Obfuscation.

Тепер переконайтеся, що OpenVPN запущений, і запустіть наступні команди, щоб запустити проксі-сервер і дозволити його запуск під час завантаження.

sudo systemctl start obfs4proxysudo systemctl enable obfs4proxy

5. Збережіть сертифікат КЛЮЧ

Після запуску служби виконайте наступну команду та збережіть ключ сертифіката.

cat /var/lib/tor/pt_state/obfs4/obfs4_bridgeline.txt

The key is of the form Bridge obfs4 : GERPRINT> cert=KEY iat-mode=0 . You will need it when you’re connecting to the VPN.

6. Testing the connections.

Open up your VPN client and change the ip from 443 to 444 in order to connect to the proxy instead of the OpenVPN server.

After that, find the Pluggable Transport option in your OpenVPN client and see if it supports obfs4.

If everything works, then you’re all set! Congratulations! Only a few more things to tweak before using this VPN from the outside world.

Port Forwarding

In order to access the OpenVPN server from the outside world we need to unblock the ports, because they are most likely blocked. As you remember, I have reserved my PI’s IP address on my router to always be 192.168.1.125 so it doesn’t change if the PI disconnects or if the router reboots.

This way I have defined the following rules in my Port Forwarding table:

The outside port 443 will point to the obfuscation’s server port 444. If you don’t have an obfuscation server, then leave 443->443.

The port 25 will point to the PI’s SSH port 22. This is only for my own convenience.

In case I want to access the OpenVPN server directly without the obfuscation proxy, I have created a rule 444->443

The service port is the OUTSIDE port that will be used with your PUBLIC IP address. To find your public IP, use a service like whatsmyip.com.

The internal port is the INSIDE port. It can be used only when you are connected to the network.

Note: The first rule is saying redirect all the connections from PUBLIC_IP:443 to 192.168.1.125:444

Testing

  1. Find your public IP and replace your old IP with the public IP in the .ovpn file or in the VPN client.
  2. Connect to the VPN.

That’s it.

Dynamic DNS

In most cases, your IP will change because it’s a dynamic IP. A way to overcome this is to create a small program on the PI that saves your IP and sends you an email every day or so. You may also store the IP in an online database such as Firebase.

My router has Dynamic DNS setting. This way I can use a service provider like NoIP and get a domain like example.no-ip.com that will always point to my public IP address.

Other Resources:

  • A Childs Garden Of Pluggable Transports
  • Viscosity-Obsfurcation/
  • //www.pluggabletransports.info/transports/

If you have any questions hit me up on Twitter.