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

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

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

Новое оборудование:
— 4G модем Huawei E3372h

— камера 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 будут недоступны устройства в сети за клиентским туннелем. Решаем эту проблему с помощью скрипта:
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 выбираем «eth2», если его нет, то выбираем 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 и указываем для него свою отдельную зону:
На этом настройка клиента закончена. С компьютера из сети за сервером проверяем подключение к камерам за клиентом и наслаждаемся проделанной работой.
А вот и первые нарушители спокойствия:

