Установки і настройка openvpn в ubuntu linux за 5 хвилин, записки програміста

Постійні Новомосковсктелі цього блогу, швидше за все, вже пару-трійку раз у своєму житті налаштовували OpenVPN. Але думається, що новачкам ця стаття буде цікава і корисна. З неї ви дізнаєтеся, як за п'ять хвилин підняти власний VPN сервер, а також навіщо він, власне, потрібен. Ну добре, з огляду на час на реєстрацію в якомусь Amazon'е. DigitalOcean, VDSina або FastVDS і оплату VDS, мабуть, буде потрібно не п'ять хвилин, а «цілих» п'ятнадцять.

Отже, навіщо ж комусь ходити в мережу через VPN? На то є цілий ряд причин. Наприклад, щоб ваші паролі, що передаються по HTTP, що не витекли, коли ви сидите з відкритих WiFi точок невідомого походження. Та й взагалі, навіть вашого звичайного провайдеру не обов'язково знати, на які сайти ви ходите. Ще - щоб не палити свій IP в IRC мережах та інших сервісах, з якими ви працюєте. Їм знати ваше місце розташування теж зовсім ні до чого. Також вам може захотітися спробувати який-небудь новий сервіс, який поки що недоступний для користувачів з українським IP. Крім того, трафік між вами і VPN сервером не тільки шифрується, але і стискається, що нерідко може створити відчуття більш швидкого інтернету. Також OpenVPN може бути корисний в цілому ряді інших випадків - для доступу співробітників до внутрішніх ресурсів компанії, при побудові на VDS'ах додатки з мікросервісной архітектурою і не тільки.

Чому VPN, а не якісь там проксі або пробрасиваніе портів через SSH, сподіваюся, теж зрозуміло. VPN досить налаштувати один раз і відразу весь трафік всіх додатків піде через VPN cервер, в стислому і зашифрованому вигляді.

Щоб підняти свій VPN, вам буде потрібно власний сервер з Ubuntu Linux (або будь-яким іншим Linux / * BSD, але тоді вам буде досить складно слідувати інструкціям даної замітки), а також права root'а на ньому. Якщо сервер у вас вже є, добре. Якщо немає, то не турбуйтеся. В наші дні купити підходящий VDS / VPS можна за смішні 150 рублів на місяць. Компаній, що пропонують відповідні послуги - десятки, деякі були названі на початку замітки. Радити якийсь конкретний складно. Якщо вам потрібна машина десь в США, оплата тільки за допомогою банківських карт і ціни в доларах не бентежать, придивіться до DigitalOcean. Якщо влаштовує розташування сервера в Амстердамі c українським IP і хочеться платити якомога менше, використовуючи Яндекс.Деньги, WebMoney або подобне системи (відповідно, з комісією) спробуйте VDSina. Ну і, само собою зрозуміло, не полінуйтеся вивчити питання самостійно, так як до моменту прочитання вами цих рядків ситуація на ринку VDS може змінитися. І немає, цей пост ніким не проплачений :)

Заходимо на сервер, стаємо root'ом, говоримо:

apt-get update
apt-get install openvpn

Раніше в OpenVPN входила утиліта під назвою easy-rsa, призначена для генерації ключів і сертифікатів. Починаючи з версії 2.3 цю утиліту з пакета випиляли, тому доведеться завантажити і зібрати її самостійно:

cd / tmp
wget https: // github.com / OpenVPN / easy-rsa / archive / master.zip
apt-get install unzip
unzip master.zip
cd easy-rsa-master
. / Build / build-dist.sh
tar xvzf. / EasyRSA-git-development.tgz
cd EasyRSA-git-development

Генеруємо всі необхідні ключі та сертифікати. Приготуйтеся вводити для них паролі. Так як ми налаштовуємо персональний VPN сервер, то, мабуть, можна використовувати один-єдиний пароль, але достовірніше:

/ Easyrsa init-pki
. / Easyrsa build-ca
. / Easyrsa build-server-full server
. / Easyrsa build-client-full client1
. / Easyrsa gen-dh

Виконання останньої команди може зайняти кілька хвилин.

Переносимо отримані ключі та сертифікати в каталог / etc / openvpn /:

mv. / Pki / dh.pem / etc / openvpn / dh.pem
mv. / Pki / private / client1.key / etc / openvpn /
mv. / Pki / private / server.key / etc / openvpn /
mv. / Pki / ca.crt / etc / openvpn /
mv. / Pki / issued / client1.crt / etc / openvpn /
mv. / Pki / issued / server.crt / etc / openvpn /

У тому ж каталозі створюємо файл server.conf:

mode server
dev tun
server 10.128.0.0 255.255.255.0
push "redirect-gateway def1"
# Важливо! інакше будемо ходити в DNS провайдера
push "dhcp-option DNS 8.8.8.8"
tls-server
ca ca.crt
cert server.crt
key server.key
dh dh.pem
proto tcp-server
port 1 194
# Клієнти бачать один одного
client-to-client
comp-lzo
keepalive 10 120
verb 4
cipher AES-256-CBC
user nobody
group nogroup
max-clients 10

Спробуємо запустити OpenVPN. При запуску від вас вимагатиметься ввести пароль. Відповідно, після ребута піднімати OpenVPN доведеться руками. Але оскільки ми налаштовуємо персональний VPN, навряд чи це є більшу проблему, ніж ключі, що лежать у відкритому вигляді, або ще гірше - збережені паролі. запускаємо:

service openvpn start

Сервер повинен слухати порт 1194. Якщо це не так, куримо / var / log / syslog.

Тепер що стосується клієнтської сторони. Нам знадобляться файли client1.crt, client1.key і ca.crt:

mkdir vpn
cd vpn
scp vpn-server: / etc / openvpn / client1.crt. /
scp vpn-server: / etc / openvpn / client1.key. /
scp vpn-server: / etc / openvpn / ca.crt. /

Створимо файл client.conf:

# Наступні два рядки актуальні тільки для * nix систем
# На практиці вони не дуже зручні, так як OpenVPN не зможе
# Нормально все за собою почистити по завершенню роботи

# User nobody
# Group nogroup

persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
cipher AES-256-CBC
comp-lzo
verb 3

Підрубувати до сервера, уважно Новомосковськ логи:

sudo openvpn --config client.conf

У сусідньому терміналі говоримо:

ping 10.128.0.1
traceroute mail.ru

Якщо все було зроблено правильно, ви виявите, що пінг успішно доходять до 10.128.0.1 (перша команда), але пакети через нього нікуди не проходять (друга команда). Це тому що ми забули налаштувати на сервері NAT. Що мені особисто здається дивним. Я смутно пригадую, що коли свого часу я піднімав OpenVPN на FreeBSD. подібного кроку не було потрібно. Втім, я можу і помилятися.

Щоб не довелося перезавантажуватися, говоримо:

echo 1 >> / proc / sys / net / ipv4 / conf / all / forwarding

iptables -A FORWARD -s 10.128.0.0 / 24 -j ACCEPT
iptables -A FORWARD -d 10.128.0.0 / 24 -m state \
--state ESTABLISHED, RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.128.0.0 / 24 \
-j SNAT --to-source 123.45.67.89

... де 123.45.67.89 - це IP сервера. Перепідключатися клієнтом, спробуємо зайти на якісь 2ip.ru або ip.xss.ru - тепер все має працювати. Якщо це не так, куримо логи. Якщо все ОК, зберігаємо правила фаєрвола на сервері:

iptables-save> / etc / iptables.rules

... і перевіряємо, що в файлі / etc / network / interfaces є рядок:

pre-up iptables-restore

Якщо на сервері раніше вже налаштовувався фаєрвол. може виявитися, що правила зберігаються в файлі з ім'ям, відмінним від /etc/iptables.rules.

Можна сказати reboot і перевірити, що настройки тримаються після перезавантаження сервера:

cat / proc / sys / net / ipv4 / conf / all / forwarding
iptables -L -n

Сервер OpenVPN, зрозуміло, доведеться перезапустити руками.

Залишилося зробити останній штрих на клієнті. Справа в тому, що (1) запускати openvpn в окремому терміналі і стежити, чи не впав він там, незручно. Крім того, (2) якщо на клієнті сказати:

nm-tool | grep DNS
sudo iptables -A OUTPUT -d 192.168.0.1 -j DROP
# ^ Для видалення правила введіть ту ж команду з -D замість -A

... де 192.168.0.1 - DNS вашого провайдера (виводиться утилітою nm-tool), ви виявите, що резолвінг доменів зламався, а отже клієнт все ще використовує DNS провайдера. Можна вбити двох зайців, сказавши:

sudo apt-get install network-manager-openvpn-gnome

... і налаштувавши VPN через NetworkManager (іконку мережі в правому верхньому куті Unity). Робиться це нескладно, фактично потрібно повторити текстовий конфиг клієнта за допомогою галочок і полів введення. Зрозуміти, яка галочка який сходинці в конфіги відповідає, дуже легко. Головне - не полінуватися залізти у всякі просунуті властивості мережі та інші розділи налаштувань. Якщо ж ви десь помилитеся, проблему можна з легкістю діагностувати за допомогою файлу / var / log / syslog.

Незважаючи на те, що замітка вийшла досить довгою, настройка OpenVPN дійсно займає всього лише кілька хвилин. Безпечного і швидкого вам веб-серфінгу! А також, як завжди, я буду щиро радий вашим питань і доповнень.

Сподобався пост? Поділися з іншими:

(Необхідно включити JS)

Схожі статті