Openwrt - openvpn сервер настройка

 

Устанавливаем OpenVPN на OpenWRT

Обнови информацию о пакетах
opkg update
 
Попробуем установить openvpn
opkg install openvpn
Можем увидеть ошибку
Unknown package 'openvpn'. Collected errors: * opkg_install_cmd: Cannot install package openvpn.

Найдем пакеты содержащие слово openvpn

opkg list | grep openvpn
Видим что пакет называется openvpn-openssl,
openvpn-openssl - 2.3.6-5 - Open source VPN solution using OpenSSL
устанавливаем его
opkg install openvpn-openssl
Если есть желание (далее мы будем делать все в консоле) ставим модуль luci-app-openvpn что бы в веб интерфейсе появилась вкладка Services - OpenVPN
opkg install luci-app-openvpn

Так же мы можем руссифицировать luci-app-openvpn, найдем название пакета руссификации

opkg list luci*openvpn*ru

увидим

luci-i18n-openvpn-ru - git-15.179.51004-cf2e3f6-1 - Translation for luci-app-openvpn - Русский (Russian)

и установим

opkg install luci-i18n-openvpn-ru

Установим пакет удостоверяющего центра CA

По хорошему удостоверяющий центр должнен находиться на отдельной машине.

opkg install openvpn-easy-rsa

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

nano /etc/easy-rsa/vars

Укажем период действия сертификатов в днях (по умолчанию 10 лет)

export CA_EXPIRE=3650
export KEY_EXPIRE=3650

Так же укажем основные переменные

export KEY_COUNTRY="Ваша страна"
export KEY_PROVINCE="Ваш округ"
export KEY_CITY="Ваш город"
export KEY_ORG="Ваша организация"
export KEY_EMAIL="Ваш емаил"

Очистим удостоверяющий центр командой clean-all от уже существующих сертификатов (внимание все существующие сертификаты и ключи в папке /etc/easy-rsa/keys удаляться).

clean-all

Создадим файлы удостоверяющего центра CA

Приватного (он секретный) ключа ca.key и сертификата ca.crt (он открытый, и копируется на узлы сервера и клиентов OpenVPN) 

build-ca

Проверим создались ли файлы

ls -la /etc/easy-rsa/keys

увидим список файлов

ca.crt
ca.key
index.txt
serial

Создадим Файл Диффи-Хелмана

dh.pem для защиты трафика от расшифровки, это займет продолжительное время, пьем кофе...

build-dh

Проверим создались ли файлы

ls -la /etc/easy-rsa/keys

увидим список файлов

01.pem
ca.crt
dh2048.pem
index.txt.attr
serial
ca.key
index.txt
index.txt.old
serial.old

Создадим файлы для сервера OpenVPN

Cертификат и приватный (он секретный) ключ. В конце будет задан вопрос по вводу пароля, если он будет введен, то он будет запрашиваться в консоли каждый раз при загрузке сервера и запуске OpenVPN. У Вас сервер всегда с собой?

build-key-server NameServer

Проверим создались ли файлы

ls /etc/easy-rsa/keys

увидим список файлов

01.pem
NameServer.csr
ca.crt
dh2048.pem
index.txt.attr
serial
NameServer.crt
NameServer.key
ca.key
index.txt
index.txt.old
serial.old

Перенесем файлы из удостоверяющего центра в папку OpenVPN Сервера

Создадим папку в которую будут перенесены сертификаты, можно положить прямо в корень папки openvpn все файлы, но...
Мы назовем папку NameServer так как позже наш роутер станет еще и openvpn клиентом (мы еще сможем сделать проброс из одной впн сети в другую), и структурируя папки мы делаем себе добро. Файл конфига должен лежать в папке /etc/openvpn/ остальные же файлы где угодно нужно просто укзать в файле конфига полный путь до файла.

mkdir /etc/openvpn/NameServer

Перенесем файлы, обратите внимание на файл dh2048.pem возможно у Вас он будет dh1024.pem

cd /etc/easy-rsa/keys && cp ca.crt ca.key dh2048.pem NameServer.crt NameServer.key /etc/openvpn/NameServer

Создадим конфигурационный файл для OpenVPN сервера

Файл можно скачать, и после переименовать его

wget -P /etc/openvpn/ http://itautsors.ru/NameServer.conf

Или создать его самостоятельно

touch /etc/openvpn/NameServer.conf

Содержимое

mode server
tls-server

port 1194 # порт на котором доступен OpenVPN сервер, иногда удобнее использовать порт 443, так как он практически всегда открыт наружу
proto tcp # выберем протокол tcp, этот протокол и порт выше нужно будет открыть на WAN интерфейсе
dev tun # Интерфейс, через который создается виртуальная сеть

ca /etc/openvpn/NameServer/ca.crt # Путь до Сертификата удостоверяющего центра CA
cert /etc/openvpn/NameServer/NameServer.crt # Путь до Сертификата сервера OpenVPN
key /etc/openvpn/NameServer/NameServer.key # Путь до Приватного ключа сервера OpenVPN
dh /etc/openvpn/NameServer/dh2048.pem # Путь до файла Диффи-Хелмана

client-to-client #Разрешаем клиентам видеть друг друга
server 172.16.0.0 255.255.255.0 # Задаем параметры вертуальной сети
ifconfig-pool-persist /etc/openvpn/ipp.txt # Файл настройки параметров ip адресов для клиентов OpenVPN, чтобы клиентам выдавался один и тот же IP при подключении.
client-config-dir /etc/openvpn/ccd # Директория настройки файлов клиентов
keepalive 10 120 # В течении 120 секунд каждые 10 секунд будет проверять доступность связи, и если провал, перезапускается OpenVPN сервер
comp-lzo # Компрессия трафика в вертуальной сети
cipher AES-256-CBC # Тип шифрования
max-clients 100 # Максимальное кол-во клиентов
persist-key #
persist-tun #
#push "redirect-gateway def1" # весь трафик с клента идет через впн
route 192.168.0.0 255.255.255.0 # Маршрут который будет передаваться всем OpenVPN Клиентам, это параметры сети за openvpn сервером
status /etc/openvpn/openvpn-status.log # Статус-лог. Тут можно посмотреть, кто законнектился на сервер с каким IP и его route.
log /var/log/openvpn.log # Укажем файл лог-файла OpenVPN Сервера
verb 3 # Уровень логирования

Создадим файлы параметров OpenVPN клиента на сервере

Команды из файла /etc/openvpn/ccd/NameClient1 будут отрабатываться при подключении клиента NameClient1 

Создадим папку ccd в который будут храниться конфигурационные файлы OpenVPN клиентов

mkdir /etc/openvpn/ccd

Создадим сам конфигурационный файл для клиента NameClient1

touch /etc/openvpn/ccd/NameClient1

Содержание самого файла

ifconfig-push 172.16.0.5 172.16.0.6 #Айпи адреса для нашего первого клиента
iroute 192.168.1.0 255.255.255.0 # Route для сервера, чтобы сервер знал, что эта сеть за именно за этим клиентом
push "route 192.168.0.0 255.255.255.0" # Передача клиенту route, что бы клиент знал что сеть 192.168.0.0/24 за сервером

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

touch /etc/openvpn/ipp.txt

и внесем туда ip для нашего первого клиента

NameClient1,172.16.0.4

Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN). С учетом перечисленных условий для клиентов и сервера подойдут пары IP-адресов со следующими парами последних октетов:

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238] [241,242] [245,246] [249,250] [253,254]

Создадим разрешающе правило на WAN интерфейсе
Добавим правило Network - Firewall - Custom Rules

iptables --table filter --insert  zone_wan_input 1 --jump ACCEPT --source 0/0 --protocol tcp --destination-port 1194
Правило означает добавить в таблицу фильтр в цепочку zone_wan_input разрешающее правило номером 1, источник трафика любой, порт 1194

Запустим службу openvpn сервера

/etc/init.d/openvpn start

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

tail /var/log/openvpn.log

Должны увидеть строки

Initialization Sequence Completed

Так же посмотрим поднят ли интерфейс openvpn командой

ifconfig

Вывод команды

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:172.16.0.1  P-t-P:172.16.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Добавляем сервис openvpn в автостарт

/etc/init.d/openvpn enable

Создадим файлы для первого клиента OpenVPN в Удостоверяющем центре CA

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

build-key NameClient1

Проверим создались ли файлы

ls /etc/easy-rsa/keys

увидим список файлов

01.pem
NameServer.csr
ca.key
index.txt.attr
serial
NameClient1.csr
02.pem
NameClient1.key
dh2048.pem
index.txt.attr.old
serial.old
NameServer.key
NameServer.crt
ca.crt
index.txt
index.txt.old
NameClient1.crt

Так же можно сгенирировать ключи клиента в формате PKCS12

build-key-pkcs12 NameClient1

Перенесем файлы из удостоверяющего центра на OpenVPN Клиента

Установим на роутер SFTP сервер

opkg update && opkg install openssh-sftp-server

Теперь можно с помощью FileZilla или WinSCP скопировать следующие файлы для клиента OpenVPN (Важно приватный ключ NameClient1.key не должен быть скпомпроментирован):
Паравильным способом
будет сгенирировать файл ключа на самом клиенте и передать специальный файл в центр сертификации для подписания. То есть файл ключа не должен вообще перемещаться между хостами.

ca.crt dh2048.pem NameClient1.crt NameClietn1.key

 На хосте который будет Openvpn Client ом создадим папку с названием впн сервера, деламе себе добро, так как эта машина может иметь еще конфигурационные файлы OpenVPN. (На самом деле так же можно внести текст серфтификатов и ключей напрямую в конфигурационный файл заключвил их в соответвующие скобки <ca>...</ca> <dh>...</dh> И тд. Иногда например для андроида это удобнее так как всего один файл, но не забывайте что необходимо обеспечить приватность ключа.)

mkdir /etc/openvpn/NameServer

Или из консоли с линкус машины, которая будет клиентом напрямую с с openwrt копируем файлы

scp root@ipadressopenwrt:/etc/openvpn/NameServer/NameClient1* /etc/openvpn/NameServer/
scp root@ipadressopenwrt:/etc/openvpn/NameServer/ca.crt /etc/openvpn/NameServer/
scp root@ipadressopenwrt:/etc/openvpn/NameServer/dh2048.pem /etc/openvpn/NameServer/

Конфиг файла для OpenVPN клиента

Подготовим на нашем сервере openvpn пример конфигурационного файла client.conf, который потом будем использовать у клиентов OpenVPN
Так же перед этим создадим папку:

mkdir /etc/openvpn/confforclients

Мы не переместили файл client.conf в директорию /etc/openvpn/ так как Сервер OpenVPN может одновременно являтся и клиентом, и если мы поместим client.conf в директорию /etc/openvpn/, то наш сервер будет пытатся подключится в роли клиента, используя этот конфигурациионный файл.

dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
resolv-retry infinite
remote ipaddresopenvpnservera 1194 tcp
lport 0
ca /etc/openvpn/NameServer/ca.crt
dh /etc/openvpn/NameServer/dh2048.pem
cert /etc/openvpn/NameServer/NameClient1.crt
key /etc/openvpn/NameServer/NameClient1.key
#ns-crt-type server
#tun-mtu 1400
#fragment 1300
#mssfix
comp-lzo
passtos
Внесем изменения в конфигурациионый файл:

Указыжум адрес OpenVPN сервера где AAA.BBB.CCC.DDD внешний ip адрес:

remote AAA.BBB.CCC.DDD 1194

Лучше указать в файле vpn.mydomain.ru и привязать ip адрес к этому поддомену, тем самым сменив внешний ip адрес openvpn сервера не придется вносить изменения в конфигурацию всех клиентов.
 
Явно укажем месторасположения файлов приватного ключа и сертификата OpenVPN клиента nameclient (для каждого клиента свое иникальное имя см. ниже создание сертификатов для клиентов) поскольу мы подготоваливаем общую болванку оставим nameclient
Для Linux:

ca /etc/openvpn/ca.crt
cert /etc/openvpn/nameclient.crt
key /etc/openvpn/nameclient.key
 
Для Windows:
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\nameclient.crt"
key "C:\\Program Files\\OpenVPN\\config\\nameclient.key"

Необходимо выбрать тот же механизм шифрования, что и на сервере (см выше) AES-256: 

;cipher BF-CBC        # Blowfish (default)
cipher AES-256-CBC    # AES
;cipher DES-EDE3-CBC  # Triple-DES

Для Linux хоста укажем месторасположения лог файла и статусного файла OpenVPN клиента. Если не укажем log-append, то вывод лога будет производится на stdout.

log-append /var/log/openvpn/openvpn_client.log
status /var/log/openvpn/status_client.log
На Машине с OpenvpnClient Копируем конфиг файл в папку /etc/openvpn/ (ключи мы уже скопировали выше) из консоли сразу с openwrt
scp root@ipadressopenwrt:/etc/openvpn/confforclient/client.conf /etc/openvpn/

Переименовываем файл конфига что бы блыло понятно что за сервер

rm /etc/openvpn/client.conf /etc/openvpn/NameServer.conf

Проверки

Проверяем что на openwrt есть интернет и запускаем openvpn server

ping ya.ru
/etc/init.d/openvpn start

На Openvpn клиенте подключаемся к опенвпн серверу конкретно указывая его имя, ведь у нас может быть несколько конфигов впн клиента.
service openvpn start NameServer

проверяем подключение к впн Серверу на клиенте

tail /var/log/syslog

Проверяем подключени клиента NameClient1 к серверу на сервере

cat /etc/openvpn/openvpn-status.log

Проверяем доступность сети за ВПН сервером для клиента тут необходимо помнить что на роуетере с впн клиентом должен быть настроен iptables цепочка forward это тема для отедльной статьи (см /etc/openvpn/ccd/NameClient1 или общий конфиг сервера push "route... )

ping 192.168.0.XXX

Проверяем доступность сети за ВПН клиентом для Сервера, тут необходимо помнить что на роуетере с впн клиентом должен быть настроен iptables цепочка forward это тема для отедльной статьи (см /etc/openvpn/ccd/NameClient1 - iroute)

ping 192.168.1.XXX

Так же если сделали второго клиента и использовали client-to-client проверяем пинг из сетей тут необходимо помнить что на роуетерах с впн клиентами должены быть настроены iptables цепочка forward, это тема для отедльной статьи

Если что то идет не так то смотрим лог впн сервера

tail /var/log/openvpn.log
Таксаномия: 

Добавить комментарий