Создание и настройка OpenVPN сервера, настройка клиента OpenVPN под Windows. Тунелирование всего интернет трафика через OpenVPN сервер.

Для начала что мы имеем:

Внешний выделенный сервер (dedicated) работающий под операционной системой Debian Linux, сервер имеет несколько внешних IP адресов.

Клиентский компьютер который будет подключатся, к определенному IP адресу внешнего Linux сервера, после подключения весь интерне трафик будет  тунелироватся через Linux сервер, при чем выход в интернет будет осуществляться под другим IP адресом, подключение к openvpn один ip, выход в интернет другой ip.

Начнем настройку сервера (все команды представлены под операционную систему Debian Linux но скорее всего подойдут и под другой дистрибутив) все команды выполняйте под root:

Установим openvpn

apt-get install openvpn

Установим iptables

apt-get install iptables

Откройте путь /usr/share/doc/openvpn/examples/easy-rsa/2.0

в этой папке нужно отредактировать файл vars

export KEY_DIR=”/etc/openvpn/keys”  здесь нужно прописать путь где будут находится ключи и сертификаты openvpn

создадим каталог для ключей

mkdir /etc/openvpn/keys

создадим каталог для настроек подключающихся клиентов
mkdir /etc/openvpn/ccdперейдем в каталог со скриптами генерации ключей

cd /usr/share/doc/openvpn/examples/easy-rsa/2.0

Создаем необходимые ключи

./vars
./clean-all
./build-dh
./pkitool –initca

Создаем сертификат сервера, вместо server можете указать любое другое имя

./pkitool –server server

Создаем сертификат клиента, вместо client можете написать любое имя
./pkitool client
openvpn –genkey –secret ta.key
mv ./ta.key /etc/openvpn/keys

Создадим конфигурационный файл для openvpn

touch /etc/openvpn/openvpn.conf

Добавьте в конфигурационный файл параметры, здесь я указываю только необходимый набор параметров их как вы понимаете намного больше:

mode server # указывает программе работать в режиме сервера
tls-server # активирует работу Transport Layer Security (криптографический протокол) сервера
proto tcp-server # выбираем протокол TCP (если необходим UDP, тогда: proto udp)
dev tap # используемый тип интерфейса – L2 туннель (для L3-туннеля: dev tun)
port 1200 # указываем порт, по которому будет работать OpenVPN
daemon # программа будет работать в режиме демона, если нет в этом необходимости – просто раскомментируйте строку
tls-auth /etc/openvpn/keys/ta.key 0 # активирует дополнительный уровень аутентификации
ca /etc/openvpn/keys/ca.crt # путь к корневому сертификату
cert /etc/openvpn/keys/server.crt # путь к сертификату сервера
key /etc/openvpn/keys/server.key # ключ сервера
dh /etc/openvpn/keys/dh1024.pem # файл алгоритма Diffie-Hellman
client-config-dir /etc/openvpn/ccd # путь к каталогу индивидуальных клиентских конфигураций
ifconfig 192.168.10.1 255.255.255.0 # устанавливает виртуальный адрес сервера
ifconfig-pool 192.168.10.2 192.168.10.99 # устанавливает диапазон виртуальных адресов для клиентов
push “route 192.168.10.0 255.255.255.0 192.168.10.1″ # эта команда будет выполняться на клиентских компьютерах, во время инициализации OpenVPN, она будет активировать роутинг так, чтобы клиенты автоматически использовали openvpn-сервер как шлюз для этой подсети
duplicate-cn # включает возможность использования одного ключа несколькими клиентами
verb 3 # указывает уровень отладки
cipher DES-EDE3-CBC # шифрование по алгоритму DES-EDE3-CBC
persist-key # будет загружать ключи в режиме persist, то есть их перезагрузка не потребуется в случае разрыва соединения
log-append /var/log/openvpn.log # путь к файлу лога
persist-tun # активирует работу tun/tap устройств в режиме persist
comp-lzo # активирует использование сжатия

keepalive 10 180  # посылает клиенту ICMP запросы, дабы проверить не отвалился ли он
client-to-client # разрешает клиента обращаться друг к другу, например если вы хотите подключить к openvpn еще несколько компьютеров и получить доступ к ним по сети.

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

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

/etc/init.d/openvpn start

Если он у вас уже запущен тогда

/etc/init.d/openvpn restart

Теперь нам нужно настроить клиент на Windows машине и проверить подключение:

Скачайте и установите OpenVPN для Windows ссылка

Далее перейдите в папку с установленным openvpn и откройте папку conf

сюда вам нужно положить 4 файла, которые у вас лежат на сервере в папке /etc/openvpn/keys

это файлы:

ca.crt
client.crt
client.key
ta.key

Теперь тут же в папке conf нужно создать текстовый файл с именем vpn.ovpn ( имя может быть произвольным, главное что бы расширение файлы было ovpn )

Прописываем параметры в наш конфиг:

tls-client # указывает программе работать в режиме клиента
proto tcp-client # активирует протокол TCP
remote 9.9.9.9 # внешний адрес сервера
dev tap # используемый тип интерфейса – L2 туннель
port 1200 # номер openvpn-порта сервера
cd /etc/openvpn # указывает на директорию по-умолчанию
pull # указывает принимать команды от сервера

remote-cert-tls server # необходимый параметр для безопасности
tls-auth /etc/openvpn/keys/ta.key 1 # активирует дополнительный уровень аутентификации
ca /etc/openvpn/keys/ca.crt # путь к корневому сертификату сервера
cert /etc/openvpn/keys/client.crt # путь к сертификату клиента
key /etc/openvpn/keys/client.key # путь к ключу клиента
cipher DES-EDE3-CBC # шифрование по алгоритму DES-EDE3-CBC
log-append /var/log/openvpn.log # путь к файлу лога
comp-lzo # активирует использование сжатия

route-gateway 192.168.10.1  # указываем шлюз для клиента, чтобы завернуть весь трафик на наш сервер
redirect-gateway # приписывает шлюз
dhcp-option DNS 192.168.1.1 # прописываем DNS на наш сервер, на сервере должен стоять BIND или другой демон DNS
route-method exe # параметр который нужен только для Windows, исправляет ситуацию когда не прописывается ROUTE таблица

Сразу хотел бы уточнить 4 последних параметра, можно прописывать для клиентов индивидуально, прямо на сервере, например ваш домашний компьютер будет подключатся к openvpn для того чтобы заворачивать весь трафик через сервер и управлением другими машинами в вашей виртуальной сети, а компьютер на работе будет подключатся к openvpn для того что бы вы могли получить к нему удаленный доступ, но на нем заворачивать трафик через сервер openvpn не трубуется.

Настройка iptables на сервере, для доступа клиента к интернету.

Для начала нужно проверить включена ли пересылка пакетов в ядре Linux.

Введите команду

#more /proc/sys/net/ipv4/ip_forward

если вывод команды 1 – то пересылка в ядре работает если 0 то отключена. Если отключена введите команду для включения

echo 1 > /proc/sys/net/ipv4/ip_forward

учтите что после перезагрузки значение вернется в исходное состояние, для постоянного включения форвардинга в ядре, измените значение в файле /etc/sysctl.conf

выставте значение:

net.ipv4.ip_forward=1

Теперь нужно создать правило iptables что бы Linux сервер делал преобразование адресов для клиента:

Так как, iptables в Debian Linux не стартует автоматически, нужно создать скрипт при запуске сети который и будет прописывать нужное правило.

В каталоге /etc/network/if-up.d создайте файл iptables

#touch iptables

задайте на этот файл разрешение на запуск

#chmod +x iptables

Пропишите в файле iptables указание на командный интерпретатор

#!/bin/sh

Ниже пропишите команду iptables

iptables -t nat -A POSTROUTING -o eth+ -s client_ip -j SNAT –to-source server_ip

разберем команду повнимательней

-t nat # указываем что работаем с таблицей nat

-A POSTROUTING # добавляем правило в цепочку POSTROUTING

-o eth+ # правило работает на сетевых интерфейсах eth ( это eth0 eth1 и т.д. )

-s client_ip # сетевой адрес с которого пришел пакет, в нашем случае это будет внутренний адрес 192.168.10.2 который нам выдал openvpn в виртуальной сети или другой выданный DHCP

-j SNAT # заменяет ip адрес отправителя

–to-source server_ip # ip адрес на который заменяем, в данном случае нужно указать внешний ip адрес сервера, с которого наш подключенный через openvpn компьютер будет выходить в интернет, укажите ip адрес не тот что был указан в конфиге opnvpn сервера, для того что бы подключение к openpvn и выход в интернет были под разными ip адресами.

Теперь после загрузки сервера, наше правило будет действовать и предоставлять компьютеру подключающемуся через openvpn доступ в интернет.

Если вам нужно выходить в интернет с нескольких компьютеров подключеных к openvpn вам нужно правило изменить таким образом:

iptables -t nat -A POSTROUTING -o eth+ -s 192.168.10.0/24 -j SNAT –to-source server_ip

Этим правилом мы указываем что вся под сеть 192.168.10.0 будет выходить в интернет.

Linux клиент openvpn настраивается аналогичным образом.

В итоге, что мы имеем и зачем это нужно:

Вы подключаясь к openvpn получаете прямой шифрованный канал до своего сервера, а так же доступ к остальным компьютерам подключенным к этому openvpn серверу (вы можете настроить доступ к компьютерам не имеющим внешнего ip адреса, в принципе что вам предоставляют платные продукты TeamViewer, Logmein), выходите в интернет через один и тот же ip адрес, отличающийся от вашего адреса выданым вашим провайдером, можете перебрасывать порты к себе с этого внешнего ip адреса.

Для чего это все нужно:

Конечно же для безопасности – думаю не секрет что все ваши пароли, переписки, сообщения, да всю вашу активность в интернете могут снифирить местные провайдеры.

Подключаясь к клиент банкам и т.п. платежным сервисам, вы всегда будете знать что вы выходите под одним ip адресом.

Доступ к заблокированным ресурсам – местные провайдеры не могут блокировать вам сайты или сервисы, т.к для них у вас лишь одно шифрованное соединение до вашего сервера, который находится скорее всего за границей.

Организация безопасного удаленного доступа как к своему компьютеру, так и к другим компьютерам которые вы подключили к своей виртуальной шифрованной сети.

Вот в принципе и все, будут вопросы пишите!

Эта запись опубликована в рубриках: Linux, OpenVPN. Постоянная ссылка.

Оставить комментарий

Почта (не публикуется) Обязательные поля помечены *

Вы можете использовать эти HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: