В эпоху массовых блокировок и ограничений в сети, сохранение своей онлайн приватности становится все более актуальным. И здесь вам на помощь приходит OpenVPN – одно из самых популярных и надежных решений для создания безопасного туннеля в интернет. Если вы хотите обойти географические ограничения, обеспечить защиту своих данных или просто настроить собственный сервер для удаленного доступа к локальным ресурсам, то данная статья именно для вас! Мы рассмотрим этапы создания и настройки своего собственного OpenVPN сервера, чтобы вы могли насладиться свободным и безопасным интернетом, не зависимо от места нахождения. Присоединяйтесь к нам и давайте начнем этот увлекательный путь в мир безграничной свободы в онлайне!

Где взять VPS(виртуальную машину) и как к ней подключится?

Я лично использовал justhost(тык!) и брал самую дешёвую виртуалку в Нидерландах.

Далее будет инструкция по подключению:

  1. Зарегистрироваться, оплатить VPS

  2. Пока Вы ждёте её включение, скачайте PuTTy(тык!, тык!)

  3. Когда VPS запустилась, Вам на почту по которой вы регистрировались приходит письмо, в котором есть пароль от пользователя root, и IPv4 адрес, запоминаем их

  4. Открываем PuTTy и в поле Host Name (or IP address) вводим ip(IPv4) адрес который мы запомнили из письма и нажимаем Open

  5. Соглашаемся(Accept) с предупреждением о безопасности(оно появляется 1 раз)

  6. Если вы увидели надпись login as: , то Вы подключились

  7. Вводим root и при запросе пароля вводим пароль из письма

Создание нового пользователя и вход под ним(по соображениям безопасности)

  1. useradd -m <любое имя пользователя>

  2. passwd <имя созданного ранее пользователя>

  3. usermod -aG sudo <имя созданного ранее пользователя>

  1. sudo chsh -s /bin/bash <имя созданного ранее пользователя>

Подключаемся заново и входим под ранее созданным пользователем (предыдущий пункт, всё с 3 шага) 

Предварительная подготовка

Установка пакетов

  1.  sudo apt install easy-rsa

  2.  sudo apt install openvpn

  3.  sudo apt install iptables-persistent

Настройка  FireWall

  1.  sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT

  2.  sudo netfilter-persistent save

Настройка директорий VPN

  1. sudo mkdir -p /etc/openvpn/keys

  2. sudo mkdir /etc/openvpn/easy-rsa

  3. cd /etc/openvpn/easy-rsa

  4. sudo cp -r /usr/share/easy-rsa/* .

  1. sudo mkdir /etc/openvpn/ccd

Настройка VPN

Конфигурируем конфиги

Настройка vars

  1. sudo nano vars

  2.  В открывшийся интерфейс вставляем:

export KEY_COUNTRY=«RU» 
export KEY_PROVINCE=«Moscow»
export KEY_CITY=«Moscow»
export KEY_ORG=«sten»
export KEY_ORG=»fdjgbi@sten.com«
export KEY_CN=«sten»
export KEY_OU=«sten»
export KEY_NAME=«vpn.StenLi.com»
export KEY_ALTNAMES=«vpn2.StenLi.com»

KEY_ORG, KEY_ORG, KEY_CN, KEY_OU, KEY_NAME, KEY_ALTNAMES — можно указывать всё, что угодно

  1. нажимаем по порядку: ctrl+x, y, enter

 Настройка /etc/nat(FireWall)

  1. sudo nano /etc/nat

  2. В открывшийся интерфейс вставляем:

#!/bin/sh

# Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward

# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Разрешаем инициированные нами подключения извне
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем подключения по SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

# Разрешаем подключения к OpenVPN
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT

# Разрешает входящий трафик из tun0
iptables -A INPUT -i tun0 -j ACCEPT

# Разрешает транзитный трафик между eth0 и tun0:
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEP

# Запрещаем входящие извне
iptables -A INPUT -i eth0 -j DROP

# Разрешаем инициированные нами транзитные подключения извне
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j A

# Запрещаем транзитный трафик извне
iptables -A FORWARD -i eth0 -o tun0 -j DROP

# Включаем маскарадинг для локальной сети
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE
  1. нажимаем по порядку: ctrl+x, y, enter

  2. sudo chmod 755 /etc/nat

Создание ключей сервера

  1. sudo ./easyrsa init-pki

  2. sudo ./easyrsa build-ca

  3. вводим пароль и запоминаем его(Enter New CA Key Passphrase)

  4. sudo  ./easyrsa gen-req server nopass

  5. sudo  ./easyrsa sign-req server server

 После ввода команды подтверждаем правильность данных, введя yes,

и вводим пароль, который указывали при создании корневого сертификата.

  1. sudo  ./easyrsa gen-dh

  2. sudo  openvpn --genkey secret pki/ta.key

  3. sudo  cp pki/ca.crt /etc/openvpn/keys/

  4. sudo  cp pki/issued/server.crt /etc/openvpn/keys/

  5.  sudo  cp pki/private/server.key /etc/openvpn/keys/ 

  6.  sudo  cp pki/dh.pem /etc/openvpn/keys/

  7.  sudo  cp pki/ta.key /etc/openvpn/keys/

Настройка сервера

  1. sudo nano /etc/openvpn/server.conf

  2. В открывшийся интерфейс вставляем:

 local 999.999.999.999 

port 1194
proto udp
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh.pem
tls-auth keys/ta.key 0
server 10.0.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
client-config-dir /etc/openvpn/ccd
keepalive 10 120
max-clients 32
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 4
mute 20
daemon
mode server
tls-server
comp-lzo
tun-mtu 1500
mssfix 1620
cipher AES-256-GCM
topology subnet

push «redirect-gateway def1»
push «dhcp-option DNS 8.8.8.8»

up /etc/nat
  • client-to-client даёт возможность клиентам видеть и общаться друг с другом в локальной сети

  • client-config-dir /etc/openvpn/ccd мы указываем директорию  в которой задаём статические ip адреса клиентам. Об этом позже

-  Меняем local 999.999.999.999 на local <внешний ip VPS(IP по которому вы подключались через PuTTy)>

Запуск сервера

Запуск сервера

  1. sudo systemctl start openvpn@server

  2.  sudo systemctl status openvpn@server

  3. Вы запустили сервер!!!! УРА!!!!

Генерация сертификатов

Генерация сертификатов

Со 2 по 4 выполняется 1 раз!

После этого запускаем 1, и 5+

  1. cd /<Любая удобная вам директория>

  2. sudo nano gen_sert.sh

  3. Вставляем в открывшееся окно:

#!/bin/bash

if [ $# -ne 1 ]; then
    echo «Usage: $0 --client-name»
    exit 1
fi

client_name=$1
password=«»
rm -r /tmp/keys
mkdir /tmp/keys
cd /etc/openvpn/easy-rsa
export EASYRSA_CERT_EXPIRE=1460
echo «$password» | ./easyrsa build-client-full $client_name nopass
cp pki/issued/client_name.key pki/ca.crt pki/ta.key /tmp/keys/
chmod -R a+r /tmp/keys

cat << EOF > /tmp/keys/$client_name.ovpn
client
resolv-retry infinite
nobind
remote 999.999.999.999 1194
proto udp
dev tun
comp-lzo
ca ca.crt
cert $client_name.crt
key $client_name.key
tls-client
tls-auth ta.key 1
float
keepalive 10 120
persist-key
persist-tun
tun-mtu 1500
mssfix 1620
cipher AES-256-GCM
verb 0

EOF

echo «OpenVPN client configuration file created: /tmp/keys/$client_name.ovpn»
  1. Заменяем remote 999.999.999.999 1194 на remote <IP сервера> 1194

  2. sudo bash ./gen_sert.sh <Имя сертификата>

  3. cd /tmp/keys

  4. Например с помощью winscp достаем из этой директории сертификаты(получение файлов, скачать)

Задание статических адресов клиентам

  1. cd /etc/openvpn/ccd

  2. sudo nano  <Имя сертификата который вы указали при создании>

  3. Вставляем в открывшееся окно:

 ifconfig-push 10.0.0.<адрес который не будет меняться, адреса не должны повторяться> 255.255.255.0 

Комментарии (13)


  1. mmMike
    30.06.2023 07:44
    +5

    А гораздо проще это сделать вот этим скриптом:
    https://www.cyberciti.biz/faq/howto-setup-openvpn-server-on-ubuntu-linux-14-04-or-16-04-lts/

    Создание нового пользователя и вход под ним(по соображениям безопасности)

    Оставлять вход по паролю для root, да и для sudo пользователя - не есть хорошо.
    Неплохо бы:

    1. Cоздать ключ и прописать его публичную часть в ~/.ssh/authorized_keys

    2. Запретить вход по паролю (только по ключу) всем (/etc/ssh/sshd_config: PasswordAuthentication no)

    Ну и для полного счастья заменить порт 22 для SSH на что то другое. Иначе достанут простукивалки стандартных портов.
    еще бы проверить, что ничего лишнего нет netstat -ntlp | grep LISTEN
    Обычно VPS провайдеры ставят Lunux "без лишнего". Но.. береженного 'б'ог бережет, а не береженого конвой стережет


  1. heos_spb
    30.06.2023 07:44
    +7

    Да, вот он - уровень нынешнего Хабра.
    Но самое грустное и одновременно характерное в этом - ссылка на putty.org.

    A.9.1 Is putty.org your website?
    No, it isn't. putty.org is run by an opportunist who uses it to advertise their own commercial SSH implementation to people looking for our free one. We don't own that site, we can't control it, and we don't advise anyone to use it in preference to our own site.

    The real PuTTY web site, run by the PuTTY team, has always been at https://www.chiark.greenend.org.uk/~sgtatham/putty/.


  1. chernish2
    30.06.2023 07:44

    Спасибо за статью, наверное кому-то будет полезно. Но лично я пользуюсь Pritunl, и всем советую.

    Ну и не надо употреблять слово putty в приличном обществе, раз уж вы про администрирование Linux пишете.


  1. Lazhu
    30.06.2023 07:44

    Очередной мануал на тему "как накостылить изи-рса".

    <facepalm>SSH root по паролю</facepalm>

    No, it isn't. putty.org is run by an opportunist who uses it to advertise their own commercial SSH

    Что за чушь? Ссылка download ведет на тот же greenend.org.uk


    1. DaemonGloom
      30.06.2023 07:44

      Угу, и под ней — реклама другого клиента (Bitwise).


  1. ss-nopol
    30.06.2023 07:44
    +2

    1. Следует рассказать как правильно отзывать клиентский сертификат, что для этого надо (crl)

    2. Неплохо указать, как временно отключить пользователя (с помощью ccd)

    3. Надо хотя бы упомянуть что ключи (весь каталог /etc/openvpn/keys) лучше всего не хранить и не генерировать на сервере и что на сервере должны быть только ca.crt, server.key, server.key, ta.key, а клиентских вообще быть не должно

    4. Неплохо было бы хотя бы упомянуть про разные шифры, в частности как включить EC и как обойтись без dh

    5. В последней версии easyrsa файл vars выглядит иначе

    6. Что с IPV6?


  1. ash_lm
    30.06.2023 07:44
    +1

    В эпоху массовых блокировок и ограничений в сети, сохранение своей онлайн приватности становится все более актуальным. И здесь вам на помощь приходит OpenVPN – одно из самых популярных и надежных решений для создания безопасного туннеля в интернет.

    А в чём смысл очередного клона инструкции по Open VPN? Если речь вести в ключе обозначенным автором, то зачем вообще выбирать Open VPN? Буквально в мае с.г. на Хабре была статья о том, что Российские интернет-провайдеры начали блокировать OpenVPN-подключения.


  1. AlexGluck
    30.06.2023 07:44

    Мой комментарий спустя 3 года
    https://habr.com/ru/articles/511970/comments/#comment_21873758


  1. Nyppy
    30.06.2023 07:44
    +2

    Хм, в рф же начали блокировать OpenVPN. Лучше уже настроить через StrongSwan



  1. jingvar
    30.06.2023 07:44

    Зарекался читать статьи не пролистав сразу до рейтинга. Объясните для чего пишут такие авторы?



  1. FSA
    30.06.2023 07:44

    Начиная с версии 2.6 в OpenVPN больше не нужна возня с центрами сертификации. Правда есть одно НО. Свежей версии нет во многих дистрибутивах (но в Ubuntu можно подключить репозиторий от разработчиков), а также 2.6 не поддерживает мобильный клиент под Android. Можно, конечно, и Wireguard поднять, но он, например, не умеет в TCP. А ещё Wireguard не умеет слушать строго определённый адрес и не слушать другие.
    Я сам для себя накидал заметку о том, как настраивать OpenVPN 2.6. Если кому надо, заходите https://tavda.net/openvpn На Хабр такое выкладывать смысла не вижу. Да и дорабатывать ещё надо.