UNLim24 - якісний хостинг, VDS/VPS сервера, захист від ddos атак Хостинг, VDS/VPS сервера

Установка OpenVPN для Linux

Установка OpenVPN

перевірено на:
  • Ubuntu 12.04.5 LTS
  • Debian 7

Вимоги до сервера

Ця інструкція може бути використана як на Linux VPS на віртуалізації KVM, так і на виділених серверах.
На віртуалізації OpenVZ і FreeBSD-Jail пристрій TUN/TAP працювати не буде!

Установка сервера OpenVPN

Debian/Ubuntu

Для Debian-based дистрибутивів (debian, ubuntu, mint...):
apt-get install -y openvpn
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/

Налаштування сервера OpenVPN

Редагуємо змінні:
nano ./vars
Міняємо рядки і зберігаємо файл:
export KEY_SIZE=1024  # Довжина ключа
export KEY_EXPIRE=3650 # Термін дії ключа в днях

# опис сертифікатів за замовчуванням
export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Kiev"
export KEY_ORG="http://example.com"
export KEY_EMAIL="org@example.com"
Ініціалізіруем змінні, чистимо папку keys і створюємо сертифікати:
. ./vars
. ./clean-all

./build-ca			# кореневий сертифікат
./build-key-server server	# сертифікат сервера
./build-dh			# ключ Діффі Хельман
Eсли ви плануєте використовувати tls-auth, який дозволить приховати порт, на якому сервер слухає vpn підключення, захистити від DoS атак і дечого ще, то виконайте ще і цей рядок:
openvpn --genkey --secret ./keys/ta.key
* Включили tls-auth? Тоді не забудьте передати ta.key клієнтам, його треба буде покласти поруч з сертифікатом користувача.
Перенесемо отримані сертифікати в робочу папку:
cp ./keys/ca.crt /etc/openvpn
cp ./keys/server.crt /etc/openvpn
cp ./keys/server.key /etc/openvpn
cp ./keys/dh1024.pem /etc/openvpn
Для tls-auth, виконайте і цей рядок:
cp ./keys/ta.key /etc/openvpn
Створимо сертифікати користувачів, скільки вам потрібно (вводити дані не обов'язково, поля будуть набувати значень змінних за замовчуванням, достатньо просто натискати Enter. В кінці буде запропоновано ввести пароль (Enter export password), він захистить ваш сертифікат від імпорту недоброзичливцями, гарненько його запам'ятайте)
./build-key-pkcs12 windows
./build-key-pkcs12 debian
./build-key-pkcs12 android
* Після цього в папці /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ з'являться ваші сертифікати android.*, windows.* та інші.
Якщо захочете створити сертифікати пізньої, підключаєтеся по SSH, і такі команди:
#	cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
#	. ./vars
#	./build-key-pkcs12 newuser1
#	./build-key-pkcs12 newuser2

Налаштуємо сам сервер

zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
nano /etc/openvpn/server.conf
Всі настройки за замовчуванням нас влаштують, міняємо, раскомментіруем і зберігаємо:
local IP_АДРЕСА_ВАШЕГО_СЕРВЕРА
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client # розкоментуйте, якщо хочете мати доступ між клієнтами усередині вашого VPN
log /var/log/openvpn.log # розкоментуйте, якщо потрібні логи
duplicate-cn # розкоментуйте, якщо хочете використовувати один сертифікат для всіх користувачів

# Для включення tls-auth, необхідно додати (без #)
# tls-auth ta.key 0

# Якщо хочете сховати сервер від китайських ботів, поміняйте стандартний порт на будь-який інший. Тільки не забудьте прописати цей же порт в настройках клієнта.
port 1194
Застосуємо настройки файрвола через rc.local, можна зробити інакше, але зупинимося на цьому варіанті:
nano /etc/rc.local
Додаємо рядки до exit 0 і зберігаємо:
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Редактируем файл sysctl.conf:
nano /etc/sysctl.conf
Раскомментируем строчку:
net.ipv4.ip_forward=1
Відправляємо на перезавантаження, щоб відразу переконатися, що автозапуск працює.
reboot
Все, серверна частина готова. Уже можна підключатися. Для переходу до наступних етапів, треба вивантажити з нашого сервера сертифікати з папки: /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/

Установка клиента OpenVPN

Windows

Тепер ставимо OpenVPN клієнт для Windows. Його можна завантажити тут: https://openvpn.net/download-open-vpn/.
Після установки заходимо в папку установки програми: C:\Program Files\OpenVPN\config і створюємо файл конфігурації windows.ovpn (звичайний текстовий файл) з вмістом:
remote IP_вашого_сервера 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
remote-cert-tls server
pkcs12 windows.p12
verb 3
pull
Якщо ви включили tls-auth на сервері, додайте в конфіг цей рядок:
tls-auth ta.key 1
Створюємо batch скрипт (start_my_vpn.cmd) для запуску VPN сесії:
cd C:\some\path\openvpn\
"C:\Program Files\OpenVPN\bin\openvpn.exe" --config C:\some\path\openvpn\windows.ovpn
Скрипт і конфиг кладемо в одну папку, в цю ж папку кидаємо windows.p12 сертифікат, брати його тут:
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/windows.p12
Готово, ярлик на скрипт кидаємо на робочий стіл, запускаємо від імені адміністратора або від користувача з його правами, при запуску він попросить ввести пароль для «імпорту» сертифіката.
Enter Private Key Password:
Якщо пароль вірний, то кілька секунд і ми підключилися:
Oct 9 21:25:35 Initialization Sequence Completed
Для автостарту тунелю без введення пароля, можна замість p12 використовувати зв'язку сертифікатів ca.crt, windows.key і windows.crt, виглядає це так, замість:
pkcs12 windows.p12
Пишемо:
ca ca.crt
cert windows.crt
key windows.key
Файли брати все там же:
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
і покласти в папку з windows.ovpn і start_my_vpn.cmd.

Linux

Ставимо пакет openvpn:
apt-get install openvpn
Створюємо папку, в будь-якому зручному місці для зберігання сертифікатів та скрипта підключення до VPN:
mkdir /opt/openvpn
Створюємо скрипт підключення:
echo 'cd /opt/openvpn
/usr/sbin/openvpn --config /opt/openvpn/debian.ovpn
' > /opt/openvpn/start_vpn.run
Створюємо файл конфігурації:
echo remote IP_ВАШОГО_СЕРВЕРА 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
remote-cert-tls server
pkcs12 debian.p12
verb 3
pull > /opt/openvpn/debian.ovpn
Якщо ви включили tls-auth на сервері, додайте в конфіг цей рядок:
tls-auth ta.key 1
Файл debian.p12 беремо як зазвичай на сервері /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
# знову ж таки, можна замість p12 використовувати ca.crt, debian.key і debian.crt, як в прикладі з windows, для того щоб не вводити пароль для підключення до VPN, це стане в нагоді наприклад для автозапуску VPN.
chmod +x /opt/openvpn/start_vpn.run
Готово. Не забудьте покласти debian.p12 або ca.crt, debian.key і debian.crt в папку зі скриптом і файлом конфігурації.
Для підключення до VPN, просто виконайте з підвищеними привілеями:
/opt/openvpn/start_vpn.run

Android (root не вимагається)

Встановлюємо на телефон OpenVPN for Android.
Завантажуємо на карту пам'яті сертифікат p12, брати тут:
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/android.p12
Запускаємо OpenVPN for Android.
VPN Profiles> Add, вводимо будь-яке ім'я. Приступаємо до налаштування профілю:
Basic > Server Address: IP адреса вашого VPN сервера, або ім'я домену, якщо ви його прив'язали
Type: PKCS12 File
Select: Вибираємо наш файл * .p12
PKCS12 Password: вводимо пароль імпорту сертифіката, заданий при його генерації.
upd: використовуйте останню версію програми, в ній перевірка remote-cert-tls server включена за замовчуванням, або увімкніть вручну в налаштуваннях авторизації перевірку сертифіката сервера
Якщо ви включили tls-auth на сервері, включіть в налаштуваннях профілю tls-auth і виберіть ta.key
Готово. Підключаємося і перевіряємо, поточний статус підключення доступний в панелі повідомлень (можна додати на робочий стіл ярлик для конкретного VPN, він буде стартувати відразу при натисканні на ярлик, без зайвих рухів тіла. Якщо хочете щоб при кожному підключенні запитувало пароль, просто не зберігайте його в налаштуваннях профілю).

Перевірка коректності роботи OpenVPN

Виконуємо команду пінг до сервера по його внутрішньому адресою 10.8.0.1:
ping 10.8.0.1
Перевіряємо свій зовнішній IP-адреса на якому-небудь сайті на кшталт 2ip.ru (повинен відображатися адреса вашого сервера).
Якщо в поле "адреса" ви бачите свій звичайний IP адреса, значить щось пішло не так і потрібно дивитися журнали підключення на сервері, клієнті і розбиратися. Якщо ви бачите IP адреса вашого VDS, значить весь ваш трафік зараз ходить через OpenVPN в зашифрованому вигляді.