Видеонаблюдение на дачу своими руками

Идея установки видеонаблюдения на даче у меня возникла достаточно давно, а особенно это желание обострилось после вскрытия домика и выноса маргинальными личностями всего, что можно сдать в пункт приема цветных металлов вместе с тачкой, на которой, видимо все и увезли. Так как бюджет ограничен, пришлось использовать списанное и устаревшее оборудование, доставшееся по случаю и практически «за магарыч».

Итак, за пару лет собрал следующие устройства:

— камера Panasonic BB-HCM531CE – 2 шт., лет 10 назад это было шикарное устройство уличная, PZT, двусторонний звук, PoE, запись на SD карту… Те что достались мне оказались с выцветшими матрицами, но вполне рабочие.

Panasonic BB-HCM531CE

— роутер TP-LINK TL-WR1045ND слегка потрепанный, но вполне рабочий.

TP-LINK TL-WR1045ND

— коммутатор 5 портовый с 4 Poe Upvel UP-215FE, «свистит» при работе и один порт не рабочий.

 Upvel UP-215FE

Новое оборудование:

— 4G модем Huawei E3372h

Huawei E3372h

 

— камера D-Link DCS-4703E

D-Link DCS-4703E

 

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

Тут я столкнулся с первой проблемой — старые камеры Panasonic BB-HCM531CE не “умеют” отсылать письма через почтовые сервисы с шифрованием SSL/TLS. Решение нашлось достаточно быстро: для таких устройств у Яндекса существует почтовый сервер smtp-devices.yandex.ru, работающий по 25 порту без шифрования, но пересылка только на ящики Яндекса.

Следующая проблемы оказалась посложнее. Очень хотелось настроить доступ к онлайн просмотру и настройкам камер «снаружи», из публичного Интернет. Сервисы DDNS не работают из за NAT мобильного оператора, технологию P2P старые камеры не поддерживают, оставался только один путь решения — создание туннеля VPN. Изучение вариантов использования VPN для личных нужд привело к однозначному выводу — никаких платных сторонних VPN сервисов, собственный сервер. Домашний роутер TP-LINK TL-WDR4300 с прошивкой DD-WRT v24-sp2 имеет встроенный OpenVPN сервер, а «дачный» TP-LINK TL-WR1045ND с прошивкой OpenWRT может быть настроен как OpenVPN клиент.

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

OpenVPN технология мультиплатформенная, поэтому конфигурация планируется следующая: сервер DD-WRT, клиент — OpenWRT, ключи будем генерировать на Windows 10 и на ней же отладка клиентской конфигурации.

 

Генерация ключей и сертификатов OpenVPN.

Скачиваем дистрибутив OpenVPN для Windows: https://openvpn.net/community-downloads/

Устанавливаем и не забываем отметить опцию «EasyRSA 2 Certificate Management Scripts», это облегчит нам процесс генерации.

  

По умолчанию установка происходит в папку C:\Program Files\OpenVPN\. Запускаем командную строку от имени администратора:

В командной строке переходим в папку easy-rsa:

cd C:\Program Files\OpenVPN\easy-rsa

Запускаем файл init-config.bat , в папке должен появиться файл vars.bat

Следует открыть его текстовым редактором, и изменить некоторые параметры на свои, у Вас эти параметры могут быть другими.

set KEY_COUNTRY=RU
set KEY_PROVINCE=Voronezh
set KEY_CITY=Voronezh
set KEY_ORG=MyHome
set KEY_EMAIL=mail@pochta.ru
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=server
set PKCS11_MODULE_PATH=server
set PKCS11_PIN=12345

Везде, где написано server, можно поменять на что то своё, например homesrv или myfirstvpn. Это будет имя комплекта ключей, я оставил как было. Сохраняем и закрываем файл.

Далее открываем редактором файл openssl-1.0.0.cnf

Находим строчку default_days 365 и заменяем число 365 на 3650. Тем самым мы увеличим время жизни наших сертификатов на 10 лет. Сохраняем и закрываем файл.

Приступаем к процессу генерации ключей.

Пишем в командную строку команды

vars — эту же команду нужно будет ввести перед процессом генерации ключей, если вы случайно закрыли окно командной строки или в последствии будете генерировать дополнительные клиентские ключи.

clean-all очищается папка “C:\Program Files\OpenVPN\easy-rsa\keys” и создаются файлы index.txt (база клиентов, она же database) и serial (ключ)

В результате должны увидеть:

Скопировано файлов: 1.
Скопировано файлов: 1.

Не закрывая окно командной строки создаем ключ шифрования для авторизации ta.key:

openvpn —genkey —secret «C:\Program Files\OpenVPN\easy-rsa\keys\ta.key».

Генерируем ключ Диффи Хельмана dh1024.pem, вводим команду build-dh.

Генерируем сертификат ca.crt и ключ ca.key центра сертификации, вводим команду build-ca. Информация для ключа и сертификата используется из файла vars.bat, поэтому во время генерации на все вопросы соглашаемся нажатием клавиши Enter.

Генерируем сертификат server.crt, ключ server.key и файл запроса на получение сертификата server.csr (в нашей ситуации он использоваться не будет, так как центр сертификации у нас собственный), вводим команду build-key-server server. На вопросы Country Name, State Name, Locality Name и т.д. отвечаем по умолчанию нажатием клавиши Enter до самого конца, эти параметры мы прописали в файле vars.bat, далее будет предложено создание сертификата сроком на 3650 дней (данный параметр мы указывали в файле openssl-1.0.0.cnf) нажимаем “Y”, подписать подписать центром сертификации и записать сертификат сервера в базу, нажимаем “Y”.

Приступаем к генерации клиентских сертификатов и ключей. Для начала потренируемся, создадим комплект ключей debuild.crt, debuild.key, debuild.csr и тут же отзовем их, в итоге получим пользовательские отозванные сертификат и ключ и файл crl.pem в котором будет содержатся информация для сервера об отозванных сертификатах. Вводим команду build-key debuild.

На вопросы Country Name, State Name, Locality Name и т.д. отвечаем по умолчанию нажатием клавиши Enter до вопросов Common Name и Name, на эти вопросы нужно набрать согласно названию создаваемого сертификата пользователя, в нашем случае это debuild, на оставшиеся вопросы нажимаем Enter, далее будет предложено создание сертификата сроком на 3650 дней (данный параметр мы указывали в openssl-1.0.0.cnf) нажимаем “Y”, будет предложено записать сертификат сервера в базу, нажимаем “Y”.

Отзываем сертификат debuild, вводим команду revoke-full debuild. В итоге будет создан файл crl.pem.

Генерируем «боевые» клиентские комплекты. Вводим команду build-key client. По аналогии с предыдущим клиентским сертификатом на вопросы Country Name, State Name, Locality Name нажимаем Enter, на вопросы Common Name и Name вводим client, остальные вопросы — Y”.

На всякий случай я создал еще комплект ключей для Android, назвал его незамысловато, вводим команду build-key android. Повторяем манипуляции и отвечаем на Common Name и Name вводом android.

Процесс генерации закончен. В папке C:\Program Files\OpenVPN\easy-rsa\keys должны находиться следующие файлы:

Имя файла Нужен для Цель Секретный
ca.crt сервер + все клиенты Публичный ключ (сертификат) корневого центра сертификации (CA) НЕТ
ca.key только для машины, подписывающей ключи Приватный ключ корневого центра сертификации (CA) ДА

dh2048.pem

только сервер Параметры Диффи Хеллмана НЕТ
ta.key сервер + все клиенты HMAC подпись к пакетам SSL/TLS ДА
server.crt только сервер Сертификат сервера НЕТ
server.key только сервер Приватный ключ сервера ДА
client.crt только client Сертификат client НЕТ
client.key только client Приватный ключ client ДА
android.crt только android Сертификат android НЕТ
android.key только android Приватный ключ android ДА

crl.pem

только сервер

Список отозванных сертификатов

НЕТ

Там же будут находиться файлы: index.txt, serial, server.csr, debuild.crt, debuild.key, debuild.csr, client.csr, android.csr, но они нам не потребуются.

Следует заметить, что содержимое папки C:\Program Files\OpenVPN\easy-rsa\keys следует бережно хранить, ключи и сертификаты понадобятся при переустановке операционной системы или сбросе роутера на заводские установки. Я сохранил их в «облако» на Яндекс Диск.

Сегмент сети будет выглядеть следующим образом.

— домашний роутер TP-LINK TL-WDR4300:

интерфейс WAN статический «белый» адрес 123.45.67.89, 255.255.255.255

интерфейс LAN 192.168.21.1, 255.255.255.0

— интерфейс TUN 10.8.0.1, 255.255.255.0

— дачный роутер TP-LINK TL-WR1045ND:

— в USB вставлен 4G модем Huawei E3372h в режиме hilink

интерфейс LAN 192.168.1.1, 255.255.255.0

интерфейс TUN 10.8.0.2, 255.255.255.0

Приступаем к настройке OpenVPN сервера на DD-WRT v24-sp2. Будем честными, процедура оказалась совсем не сложной, так как настройка производится посредством WEB интерфейса и таблица маршрутизации с правилами для брандмауэра формируется автоматически. Однако следует заметить, если вы до этого экспериментировали с настройкой на вашем роутере VPN сервера или клиента, советую начать со сброса к заводским настройкам. В моем случае, после попыток настройки OpenVPN клиента, был создан интерфейс tun0, который мешал серверу создать новый туннельный интерфейс и не позволял работать с существующим.

Открываем браузером панель управления: http://192.168.21.1 ; переходим на закладку Services -> VPN.

OpenVPN Server/Daemon: Enable

Start Type: System

Config as: Server

Server mode: Router (TUN)

Network: 10.8.0.0

Netmask: 255.255.255.0

Port: 8194

Tunnel Protocol: UDP

Encryption Cipher: AES-128 CBC

Hash Algorithm: MD5

Advanced Options: Disable

Заходим в нашу папку C:\Program Files\OpenVPN\easy-rsa\keys. Открываем текстовым редактором файл server.crt, выделяем ВСЕ строки, копируем и вставляем в поле Public Server Cert.

Повторяем те же действия: содержимое файла ca.crt вставляем в поле CA Cert, файл server.key в поле Private Server Key, файл dh1024.pem в поле DH PEM, файл ta.key в поле TLS Auth Key, файл crl.pem в поле Certificate Revoke List

В поле Additional Config вставляем:

push «route 192.168.21.0 255.255.255.0» — «толкнуть» клиенту маршрут к серверу

push «route 10.8.0.0 255.255.255.0» — «толкнуть» клиенту маршрут к туннелю

route 10.8.0.0 255.255.255.0 — маршрут к туннелю для сервера

route 192.168.1.0 255.255.255.0

Нажимаем Save и Apply Settings. Если нигде не ошиблись сервер должен начать работать. Переходим на закладку Status -> OpenVPN, должны увидеть:

Конфигурационный файл сервера генерируется по нажатию кнопки “Save”, его можно посмотреть подключившись к роутеру по SSH. Запускаем PuTTY, вводим адрес роутера:

В DD-WRT независимо от вашего админского логина, при подключении по SSH, нужно вводить логин root и пароль от вашего логина.

Набираем vi /tmp/openvpn/openvpn.conf, и видим конфигурацию сервера OpenVPN:

dh /tmp/openvpn/dh.pem

ca /tmp/openvpn/ca.crt

cert /tmp/openvpn/cert.pem

key /tmp/openvpn/key.pem

keepalive 10 120

verb 3

mute 3

syslog

writepid /var/run/openvpnd.pid

management 127.0.0.1 14

management-log-cache 100

topology subnet

script-security 2

port 8194

proto udp

cipher aes-128-cbc

auth md5

client-connect /tmp/openvpn/clcon.sh

client-disconnect /tmp/openvpn/cldiscon.sh

client-config-dir /tmp/openvpn/ccd

comp-lzo adaptive

tls-server

ifconfig-pool-persist /tmp/openvpn/ip-pool 86400

client-to-client

fast-io

tun-mtu 1500

mtu-disc yes

server 10.8.0.0 255.255.255.0

dev tun2

tun-ipv6

tls-auth /tmp/openvpn/ta.key 0

crl-verify /tmp/openvpn/ca.crl

push «route 192.168.21.0 255.255.255.0″^M

push «route 10.8.0.0 255.255.255.0″^M

route 10.8.0.0 255.255.255.0^M

route 192.168.1.0 255.255.255.0^M

client-config-dir /tmp/openvpn/ccd^M

Тут следует отметить один важный момент: строка client-config-dir /tmp/openvpn/ccd — это путь к каталогу с файлами конфигураций клиентов. Сюда нужно записать файл с именем клиента и его индивидуальными настройками. В данном конкретном случае записываем файл с именем client (без расширения), содержащим всего одну строку: iroute 192.168.1.0 255.255.255.0 (данный параметр добавляет маршрут к устройствам в локальной сети клиента), который нужно положить в каталог /tmp/openvpn/ccd. В Windows это делается из командной строки «c:\Program Files\PuTTY\pscp.exe -scp «c:\путь_к_файлу\client» root@192.168.21.1:/tmp/openvpn/ccd

Вводим пароль root и файл передается по SSH в нужный нам каталог.

У этого способа есть один недостаток, после перезагрузки роутера весь каталог /tmp/ очищается, и устройствам в сети за сервером OpenVPN будут недоступны устройства в сети за клиентским туннелем. Решаем эту проблему с помощью скрипта:

(#!/bin/bash

sleep 30s

echo «iroute 192.168.1.0 255.255.255.0» >> /tmp/openvpn/ccd/client)&

Вставляем эти строки на закладке Administration — > Commands в поле Commands и нажимаем кнопку Save Startup. Таким образом после каждой перезагрузки нужный нам файл будет помещаться в требуемый каталог.

Добавляем правила для Firewall, вставляем строки:

iptables -I INPUT 1 -p udp —dport 1194 -j ACCEPT

iptables -I FORWARD 1 —source 10.8.0.0/24 -j ACCEPT

iptables -I FORWARD -i br0 -o tun2 -j ACCEPT

iptables -I FORWARD -i tun2 -o br0 -j ACCEPT

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 ppp0 -j MASQUERADE

в поле Commands, и нажимаем кнопку Save Firewall.

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

Переходим в папку “C:\Program Files\OpenVPN\config” и в текстовом редакторе создаем файл конфигурации клиента с именем connect.ovpn” со следующим содержимым:

client

dev tun2

proto udp

remote-cert-tls server

key-direction 1

redirect-gateway def1 # эта команда отправляет ВЕСЬ трафик клиента через туннель OpenVPN

remote 192.168.21.1 1194 # здесь адрес сервера в моей локальной сети

resolv-retry infinite

nobind

persist-key

persist-tun

tls-client

ca «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt»

cert «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\client.crt»

key «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\client.key»

dh «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\dh2048.pem»

tls-auth «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ta.key» 1

cipher AES-128-CBC

auth MD5

float

keepalive 10 120

comp-lzo adaptive

verb 3

Сохраняем в каталог c:\Program Files\OpenVPN\config\connect.ovpn

Следует обратить внимание, что двойной левый слэш, это не опечатка, а требования OpenVPN к конфигурационному файлу в Windows.

На рабочем столе запускаем ярлык “OpenVPN GUI”, в трее должен появиться значок 

нажимаем «Подключиться»

Должно появиться окно журнала

в трее значок заполнится зеленым цветом

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

Следующий шаг — настройка клиента OpenVPN на роутере с прошивкой OpenWRT.

Первым делом, после прошивки, нужно «подружить» его с 4G USB модемом.

Набираем в браузере http://192.168.1.1 (после прошивки адрес назначен по умолчанию) и видим окно входа в web интерфейс:

Первый вход производится пользователем root с пустым паролем. Переходим в System → Administration и нажимаем кнопку Admin Password. В появившемся окне вводим свой пароль дважды, нажимаем кнопку Submit.

Переходим в System → Software

В поле Download and install package вводим: usb-modeswitch , нажимаем OK,

далее вводим kmod-usb-net-cdc-ether , нажимаем OK.

Требуемые пакеты для работы USB модема установлены.

Далее переходим в Network — > Interfaces, и нажимаем Add new interface.

В поле Name of the new interface пишем имя интерфейса для модема, я написал USB, в поле Cover the following interface выбираем «eth, если его нет, то выбираем Custom interface и пишем там eth2. Нажимаем Submit.

В списке интерфейсов появится наше вновь созданное, нажимаем на нем Edit

Переходим в раздел Firewall settings и указываем для него зону Wan:

Нажимаем Save & Apply, роутер должен соединиться с провайдером Интернет через наш USB модем.

Теперь нам потребуется программа PuTTY. Подключаемся по SSH по адресу 192.168.1.1, вводим пользователя root и свой пароль

Обновляемся и устанавливаем OpenVPN:

opkg update

opkg install openvpn-openssl

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

«c:\Program Files\PuTTY\pscp.exe -scp «c:\Program Files\OpenVPN\easy-rsa \keys\ca.crt» root@192.168.1.1:/etc/openvpn

«c:\Program Files\PuTTY\pscp.exe -scp «\c:\Program Files\OpenVPN\easy-rsa \keys\client.crt» root@192.168.1.1:/etc/openvpn

«c:\Program Files\PuTTY\pscp.exe -scp «c:\Program Files\OpenVPN\easy-rsa \keys\client.key» root@192.168.1.1:/etc/openvpn

«c:\Program Files\PuTTY\pscp.exe -scp «c:\Program Files\OpenVPN\easy-rsa \keys\ta.key» root@192.168.1.1:/etc/openvpn

«c:\Program Files\PuTTY\pscp.exe «c:\Program Files\OpenVPN\easy-rsa \keys\dh2048.pem» root@192.168.1.1:/etc/openvpn

Окно не закрываем.

Адаптируем файл конфигурации использованный в Windows:

dev tun

proto udp

log openvpn.log

verb 3

ca /etc/openvpn/ca.crt

cert /etc/openvpn/client.crt

key /etc/openvpn/client.key

dh /etc/openvpn/dh2048.pem

client tls-auth /etc/openvpn/ta.key 1

cipher AES-128-CBC

auth MD5

remote-cert-tls server

remote 123.45.67.89 1194

keepalive 10 120

comp-lzo adaptive

float

Сохраняем его с именем openvpn.conf и отправляем его по SSH на роутер:

«c:\Program Files\PuTTY\pscp.exe -scp «c:\путь_к_файлу\openvpn.conf» root@192.168.1.1:/etc/openvpn

Запусаем OpenVPN:

/etc/init.d/openvpn enable

/etc/init.d/openvpn start

Подключаемся к WEB интерфейсу http://192.168.1.1

Создаём VPN интерфейс:

Переходим Network — > Interfaces, и нажимаем Add new interface.

В поле Name of the new interface пишем имя интерфейса, я написал VPN, в поле Cover the following interface выбираем «tun0», если его нет, то выбираем Custom interface и пишем там tun0. Нажимаем Submit.

Добавить в Firewall зону VPN c интерфейсом tun0 и разрешить с него доступ на LAN, разрешить доступ с LAN на VPN:

В списке интерфейсов появится VPN, нажимаем на нем Edit

Переходим в раздел Firewall settings и указываем для него свою отдельную зону:

На этом настройка клиента закончена. С компьютера из сети за сервером проверяем подключение к камерам за клиентом и наслаждаемся проделанной работой.

А вот и первые нарушители спокойствия:

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вверх