OpenVPN. Установка и настройка VPN (Сеть, шлюз, проброс портов) на Debian


VPN (Virtual Private Network) — виртуальная частная сеть. Обобщенное название технологии, позволяющей обеспечить логические сети (одно или более сетевых соединений) поверх другой сети (например Интернет). Есть возможность сжатия и шифрования данных, что обеспечивает некоторую безопасность передачи данных.
Можно много рассказывать о технологии VPN, описывая классификацию, структуру и многое другое, но сегодня я хочу рассказать о OpenVPN.

OpenVPN - свободная реализация технологии виртуальной частной сети (VPN) с открытым кодом. OpenVPN использует библиотеку OpenSSL, что позволяет использовать полный набор шифров из этой библиотеки для увеличения безопасности и сохранности данных. OpenVPN - одна из самых молодых реализаций VPN, но тем не менее является одной из самых популярных и функциональных. OpenVPN используется в настоящее время во всех популярных операционных системах.

Примеры использования OpenVPN (VPN)

Корпоративная виртуальная частная сеть (VPN) Есть у нас офис, но сотрудники офиса желают иметь доступ к внутренней сети везде где есть доступ к сети интернет, при этом невозможно каждому участнику сети получить выделенный IP адресс, более того все IP адресса, постоянно меняются, как и провайдеры. Но нашей целью является организовать сеть и она должна быть безопасной, корпоративная тайна и все такое - Вы понимаете. Вот нам и понадобится OpenVPN (VPN).

Личная виртуальная частная сеть (VPN) У меня несколько компьютеров, они могут регулярно подключаться к разным провайдерам, с разных точек планеты, тем более что для разных задач я с собой беру разное устройство. Получить выделенный IP тут не возможно. Хранить все свои данные на сервере в интернет нет желания. Но несмотря на все я хочу с любого устройства иметь доступ к другим своим компьютерам (мало ли что).

VPN туннель для подключения к интернету Представьте, что большая часть сети заблокирована провайдером (шлюзом), т.е. мы не можем получить доступ к нужным ресурсам. Тут можно настроить VPN туннель и подключаться к интернету через сервер VPN (туннель).

Думаю с примерами нам уже нужно завязывать и переходить к настройке сего чуда.


Настройка сервера OpenVPN (VPN) в Debian

Перед установкой OpenVPN необходимо озаботится поддержкой системой псевдо-устройства "tun".
Для Debian проверить его наличие и поддержку можно следующим образом:

ls -l /dev/net/tun

Для работы с интерфейсом "tun" нам понадобится модуль ядра "tun". Проверяем, загружен ли он:

lsmod | grep tun

На самом деле проверку можно опустить, если конечно Вы не пересобрали сами ядро без это поддержки tun.
Далее переходим к установке пакетов OpenVPN, OpenSSL и библиотеку сжатия трафика LZO:

aptitude install openvpn openssl liblzo2-2

Копируем директорию для работы с утилитами для создания ключей и сертификатов и переходим в директорию:

cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa

В файле vars редактируем строки под себя, достаточно поправить:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

Затем создайте новые ключи и сертификаты:

. ./vars
./clean-all
./build-ca

Нужно будет ответить на вопросы, например: код страны, штат/провинция, населенный пункт, название организации, имя и адрес почты.

Далее создадим ключ сервера:

./build-key-server server
Нужно будет опять ответить на много вопросов, в результате появятся файлы server.key и server.crt.

Так же сделаем ключ клиента. В примере используется имя client1 (можете называть как угодно, ключи Вам понадобится передавать клиентам для подключения к OpenVPN - VPN):

./build-key-server client1

Затем создадим ключ Diffie Hellman:

./build-dh
В результате будет создан файл dh1024.pem. Для OpenVPN будем использовать TLS аутентификацию.

В папке ./keys появляется созданные ключи, нужные ключи нужно скопировать в директорию /etc/openvpn/:

cp ./keys/ca.crt /etc/openvpn
cp ./keys/server.crt /etc/openvpn
cp ./keys/server.key /etc/openvpn
cp ./keys/dh1024.pem /etc/openvpn

Только что мы создали ключи, теперь нужно настроить OpenVPN. Мой рабочий server.conf:

port 1194
proto tcp
dev tun # используем тип тунеля для интернет, tap для eternet
ca ca.crt # наши сертификаты
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0 # собственно наша виртуальная сеть
ifconfig-pool-persist ipp.txt
keepalive 10 120 # пинг каждые 10 секунд для поддержания канала связи
comp-lzo # сжатие трафика
persist-key
persist-tun
status openvpn-status.log #лог
client-to-client
push "redirect-gateway" # Перенаправлять default gateway на vpn-сервер. Если не нужно - закомментировать.
client-config-dir ccd
client-to-client
;route 10.8.0.0 255.255.255.0
verb 3 # уровень болтливости записей в логи
push "dhcp-option 8.8.8.8"


Добавляем директорию для настройки route для клиентов

mkdir /etc/openvpn/ccd

Добавляем настройки route для клиента client1

echo "iroute 10.8.0.0 255.255.255.0" > /etc/openvpn/ccd/client1

Сервер OpenVPN готов - перезапускам его:

/etc/init.d/openvpn restart

Примерно вот так должно быть:

server:~# /etc/init.d/openvpn restart
Stopping virtual private network daemon: server.
Starting virtual private network daemon: server.
server:~#

Если так, то поздравлю сервер OpenVPN настроен.


Настройка клиента OpenVPN (VPN) в Debian

Переходим к установке пакетов OpenVPN, OpenSSL и библиотеку сжатия трафика LZO:

aptitude install openvpn openssl liblzo2-2

С сервера, клиенту нужно передать ключи, которые мы генерировали, а конкретней:
ca.crt
client1.crt
client1.key

Скопировать ключи клиента, необходимо в директорию /etc/openvpn/ на клиенте.

Теперь сделаем файл настроек клиента, для подключения к серверу:

remote 11.11.11.11 1194 # ip и порт нашего сервера
client
dev tun
ping 10
comp-lzo
proto tcp
tls-client
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
ns-cert-type server
push "dhcp-option DNS 8.8.8.8"
route 10.8.0.0 255.255.255.0
verb 3
pull

Сохраняем файл настроек клиента OpenVPN и перезапускам клиента vpn:

/etc/init.d/openvpn restart

В результате имеем примерно такую картинку:

root@valualit:~# /etc/init.d/openvpn restart
Stopping virtual private network daemon: client.
Starting virtual private network daemon: client.
root@valualit:~#

Маршруты пакетов в виртуальной частной сети (VPN)

Для обеспечения правильного передвижения пакетов внутри сети, необходимо настраивать маршрутизацию на сервере, для этого можно воспользоваться например iptables.

В моем случае я хотел реализовать проброс порта 48888 с сервера VPN, на клиента VPN 10.8.0.6, общий список используемых мною правил:

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

iptables -t nat -A PREROUTING -d 11.11.11.11 -p tcp -m tcp --dport 48888 -j DNAT --to-destination 10.8.0.6:22
iptables -A FORWARD -d 10.8.0.6 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE


Вывод:
Мы создали частную виртуальную сеть VPN над интернетом с помощью OpenVPN, объединив нужные компьютеры в локальную сеть.
Клиенты виртуальной частной сети VPN используют в нашем случае сервер, как шлюз для выхода в интернет.
С помощью iptables и NAT мы указали правила движения пакетов и конечно проброс порта на нужный. В результате я могу подключится из любой точки мира к своему компьютеру, который не имеет выделенного ip адреса.

http://4debian.info/article/page/15-debian-install-settings-openvpn-vpn/

Обновлено: 13.03.2015