среда, 11 января 2017 г.

Администрирование → Видеонаблюдение загородом посредством 3G интернета из песочницы tutorial

Появилась такая задача: Установить видеонаблюдение, в 15 км от города, где доступен только gprs интернет.
Условия:
  • Камерами можно будет управлять через интернет
  • Ограниченный бюджет
  • В городе есть 3G интернет но в области нет.
  • Сотовые операторы не дают «Белый и статический ip адрес».
  • Другого интернета нет.


Что бы решить данную задачу я решил построить такую сеть.
Взять самый дешевый сервер VDS. Недорогой роутер TP-LINK MR 3420, 3G модем от beeline, ip камеру. И построить такую сеть как на схеме.
Суть идеи такова: На сервере поднимается openvpn сервер, на роутере поднимается openvpn клиент, далее объединяем локальную сеть с сетью openvpn. Затем пробрасываем необходимые порты на сервере.



Описание сети:
Первая сеть это роутер + ip камера + ваш компьютер (шлюз). Адрес сети будет 192.168.0.0
У роутера 192.168.0.1
У камеры 192.168.0.100
У вашего компьютера, который будет шлюзом 192.168.0.2

Вторая сеть, это сеть openVPN – 192.168.3.0
IP адрес openVPN вашего роутера будет 192.168.3.2
IP адрес вашего сервера будет 192.168.3.1

И внешний ip адрес сервера для примера будет 205.234.139.100

Что нам нужно.
  1. Компьютер.
  2. Временный доступ в интернет через компьютер.
  3. Роутер который поддерживает OpenWRT и 3G usb модема. (для примера TP-LINK MR 3420)
  4. Сервер с внешним ip адресом на базе Linux.
  5. 3G usb модем (Я использовал Huawey).
  6. IP Видеокамера.
  7. Хороший USB хаб, с внешним питанием (Для расширения USB портов для 3G модема и флэшки).


Ход работы.
  1. Настраиваем на сервере openVPN, генерируем ключи для клиента openVPN.
  2. Настраиваем на роутере openWRT + openVPN и 3G модем для выхода в интернет.
  3. Если 3G связь ловит плохо, собираем антенну Харченко для усиления сигнала.


Настройка openVPN на сервере.

Как настроить сервер openvpn, до пункта “Объединение сетей”, описано тут: Настраиваем OpenVPN сервер на подключения клиентов

Конфигурация сервера выглядит примерно так:

daemon
local 205.234.139.100 # Внешний ip сервера
port 1194
mode server
proto tcp
crl-verify crl.pem
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
client-config-dir ccd
server 192.168.3.0 255.255.255.0 # ip самого openvpn
push "route 192.168.3.0 255.255.255.0"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
client-to-client
status openvpn-status.log
log /var/log/openvpn.log
verb 3

Чтобы каждому клиенту выдавался определенный ip адрес, в конфиге есть строчка
ifconfig-pool-persist ipp.txt

Создаем на сервере документ в папке /etc/openvpn/
Под названием ipp.txt
nano /etc/openvpn/ipp.txt

И в нем пишем “имя клиента, ip адрес”
Например вот так
openwrt,192.168.3.2


Прошивка и настройка роутера TP-LINK MR3420.

Как прошить роутер описано по ссылке: TP-Link TL-MR3420 & TL-MR3220

Для начало нужно дать выход роутеру в интернет для установки дополнительного ПО.

Для того что бы роутер мог выйти в интернет заходим через web (http://192.168.1.1), заходим в network. Далее жмем edit в lan
Переходим на вкладку General Setup и изменяем ip локальное сети на
IP адрес: 192.168.0.1
Маска: 255.255.255.0
Шлюз: 192.168.0.2
DNS: 8.8.8.8



Для того что бы изменения вступили в силу, жмем «Save & Apply»
На компьютере поставим себе ip 192.168.0.2, и используем его как шлюз.

Теперь нужно расширить память роутера для установки дополнительного ПО.
Для этого берем флэшку (Например 4 Гб) и форматируем ее с файловой системой ext4.
Затем вставляем ее в USB хаб и подключаем к роутеру USB хаб.
Потом нужно перенести все настройки на флэшку и сделать что бы она сама монтировалась при старте.

Устанавливаем пакеты для флэшки:
opkg update
opkg install kmod-usb-uhci kmod-usb-storage block-mount kmod-fs-ext4
insmod usb-ohci

Создаем точку подключения:
mkdir /mnt/sda

Затем монтируем флэшку:
mount -t ext4 /dev/sda /mnt/sda -o rw,sync

Копируем туда установленные пакеты:
tar -C /overlay -cvf - . | tar -C /mnt/sda -xvf –

Немного правим конфиг:
vi /etc/config/fstab

Чтобы выглядело вот так:
config 'mount'
option target /overlay
option device /dev/sda
option fstype ext4
option options rw,sync
option enabled 1
option enabled_fsck 1

Затем перезагружаем роутер:
reboot

Теперь мы не ограничены исходным размером flash роутера. И можем себе позволить поставить практически все
Смотрим свободное место:
df –h

Filesystem                Size      Used Available Use% Mounted on
rootfs                    3.7G    128.2M      3.4G   4% /
/dev/root                 2.0M      2.0M         0 100% /rom
tmpfs                    14.3M    688.0K     13.6M   5% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/sda                  3.7G    128.2M      3.4G   4% /overlay
overlayfs:/overlay        3.7G    128.2M      3.4G   4% /

Теперь нам нужно установить openvpn клиент на роутер, заодно и текстовый редактор nano, файловый мэнеджер mc, и русификатор luci.

Устанавливаем необходимые нам пакеты:
opkg install openvpn nano mc luci-i18n-russian

Для нормальной работы mc нужно выполнить две строчки:
export TERMINFO=/usr/share/terminfo
export TERM=xterm

И чтобы каждый раз их не выполнять руками нужно их добавить в /etc/profile:
nano /etc/profile

Затем копируем на роутер в /etc/openvpn/ ключи и сертификаты созданные на сервере openvpn:
ca.crt
dh1024.pem
openwrt.crt
openwrt.key
ta.key

Правим конфиг:
nano /etc/config/openvpn


client
tls-client
dev tap
proto tcp
remote 205.234.139.100 1194 # Вашь Ip и порт сервера
resolv-retry infinite
nobind
persist-tun
persist-key
ca /etc/openvpn/ca.crt
cert /etc/openvpn/openwrt.crt
key /etc/openvpn/ openwrt.key
dh /etc/openvpn/dh1024.pem
comp-lzo
verb 3

Запускаем openvpn:
openvpn --config /etc/config/openvpn

Если ваше Интернет-соединение в порядке и конфигурационный файл openvpn составлен правильно, вы должны увидеть такую надпись:
  • Initialization Sequence Completed

Если вы хотите, чтобы vpn-соединение восстанавливалось после каждой перезагрузки маршрутизатора, добавьте эту строку в /etc/rc.local перед строкой exit 0:
openvpn --config /etc/config/openvpn  &
exit 0 

Объединим сети 192.168.0.0 и 192.168.3.0:
Ваш ip сервера openvpn 192.168.3.1, а ваш Ip на роутере openvpn адаптера tap0 192.168.3.2

Тогда что бы ваш сервер смог увидеть вашу локальную сеть (192.168.0.0) нужно на сервере прописать маршрут.
ip route add 192.168.0.0/24 via 192.168.3.2

Теперь вашу локальную сеть на роутере вид ит сервер с openvpn.

Настроим проброс порта:

Допустим ваша ip камера работает по порту 99, тогда чтобы пробросить порт камеры или другого сетевого устройства пропишем такие строки в консоли, или как описано ниже создаем файл и пишем в него:
EXT_IP="205.234.139.100" # Вашь сервер ip
INT_IP="192.168.3.1"           # Локальный шлюз (ip tap0)
EXT_IF=venet0:0                   # Сетевая карта внешнего ip
INT_IF=tap0                           # Сетевая карта openvrt
LAN_IP="192.168.0.100"    # ip на который нужно пробросить порт
SRV_PORT=99       # Порт который нужно пробросить

iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT

Теперь вы можете конектится к ip камере по адресу 205.234.139.100:99.
А чтобы не делать это вручную после перезагрузки сервера, создадим скрипт, в папке /root/ файл с названием start
и дадим ему права на выполнения:
chmod  777 /root/start

Затем добавим строку в /etc/crontab
@reboot root /root/start

Теперь после перезагрузки сервера скрипт автоматически запустится.

Установка usb 3g Ethernet модема от huawey

opkg update
opkg install usb-modeswitch usb-modeswitch-data kmod-usb-net-cdc-ether

Вставляем модем в USB хаб,
И пишем команду dmesg, вы должны увидеть примерно такие строки:
 [   99.220000] usb 1-1.1.1: new high-speed USB device number 6 using ehci-platform
[   99.330000] cdc_ether 1-1.1.1:1.0: eth2: register 'cdc_ether' at usb-ehci-platform-1.1.1, CDC Ethernet Device, 58:2c:80:13:92:63

Это говорит о том что модем установлен и определился как eth2.

Следующим шаом нам нужно добавить 2 сетевых интерфейса.
1. 3G
2. VPN
для этого правим конфиг:
nano /etc/config/network

3G у нас будет DHCP клиентом, а VPN неуправляемым адаптером, добавляем:

config interface '3G'
        option ifname 'eth2'
        option _orig_ifname 'eth2'
        option _orig_bridge 'false'
        option proto 'dhcp'

config interface 'VPN'
        option ifname 'tap0'
        option _orig_ifname 'tap0'
        option _orig_bridge 'false'
        option proto 'none'

В общем виде конфиг должен выглядеть примерно так:
config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'lan'
        option _orig_ifname 'eth0 wlan0'
        option _orig_bridge 'true'
        option proto 'static'
        option netmask '255.255.255.0'
        option type 'bridge'
        option ipaddr '192.168.0.1'
        option ifname 'eth0'
        option send_rs '0'

config interface '3G'
        option ifname 'eth2'
        option _orig_ifname 'eth2'
        option _orig_bridge 'false'
        option proto 'dhcp'

config switch
        option name 'eth0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'eth0'
        option vlan '1'
        option ports '0 1 2 3 4'

config interface 'VPN'
        option ifname 'tap0'
        option _orig_ifname 'tap0'
        option _orig_bridge 'false'
        option proto 'none'


Что-бы сервер мог видеть все 3 сети, нужно их объединить в межсетевом экране

Для этого изменим файл /etc/config/firewall
nano /etc/config/firewall

nano /etc/config/firewall

Сделать примерно так:
config defaults
        option syn_flood '1'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'

config include
        option path '/etc/firewall.user'

config zone
        option name 'newzone'
        option input 'ACCEPT'
        option forward 'ACCEPT'
        option output 'ACCEPT'
        option masq '1'
        option network '3G lan vpn'


И делаем перезагрузку роутера
reboot


Усиления 3G сигнала на модеме.

Для того чтобы увеличить сигнал 3G модема нужно собрать антенну Харченко.
Обычно, популярные 3G модемы работают на частотах от 800 до 2100 МГц.

Делается это просто.
Нам потребуется:
  • Провод RG6U (толстый белый для антенн – на нем меньше всего затухания) метров 6
  • Коннектор на него
  • Кусок медной проволоки от 1 до 4 мм толщиной ( у меня 1.5)
  • Колпачок от пены для бритья.
  • Паяльник, припой, канифоль и немного навыков работы с ними.
  • Кусок фанерки (120мм на 134мм) и фольга. Либо не травленая плата, покрытая медью с одной стороны.

Начнем.
  • Берем кусок нашей проволоки и сгибаем его в два квадрата, как показано на рисунке. Сторона квадрата должна быть 53мм
  • Концы двух квадратов спаиваем вместе, чтобы получилась сплошная конструкция, наносим припой также на противоположный угол

image

  • Антенный провод зачищаем и надеваем на него коннектор, делаем сердцевину провода так чтобы она выглядывала из коннектора на сантиметр
  • Припаиваем сбоку к телу коннектора кусочек сердцевины провода ( так как не всегда удается припаять оплетку провода с помощью канифоли)
  • После этого припаиваем оба штырька, идущие от коннектора к нашим квадратам

image

  • Теперь делаем рефлектор для лучшего приема — берем нашу фанерку 120 на 135 мм и оборачиваем ее в фольгу, делаем в середине дырку под провод.
  • Сам каркас антенны из проволоки должен находиться над рефлектором на расстоянии 35мм, для этого берем колпачок от пены для бриться или что-то похожее. Он по высоте 4.5 см, поэтому вырезаем в нем пазы в 1 см, чтобы антенна была от рефлектора на нужном расстоянии.

image

  • Сзади всей этой конструкции подставляем рефлектор, сделанный нами ранее и получается готовая антенна:

image

Следующим шагом нужно припаять другой конец провода к модему:
Вскрываем корпус модема.

image

На лицевой стороне расположены: модуль для карты памяти, контакты для SIM-карты, радио модуль под крышечкой, разъём, внутренняя антенна и USB-выход.

image

Интересно, что этот разъём недоступен без разборки корпуса, то есть почти все обладатели этого модема об этом разъёме даже не подозревают. Пусть он остаётся на месте, он нам не нужен и нисколько не мешает. А мешает нам внутренняя антенна:

image

Антенна вытравлена прямо на плате, и нам необходимо её отключить. Для этого сначала выкусываем SMD-конденсатор, предназначенный для резонансной согласовки антенны. Потом небольшой фрезой, зажатой в дрель, делаем пропил по антенне, оставляя только небольшую площадку для припайки кабеля. Разрез делаем неглубоко, так как печатная плата многослойная. Прозваниваем тестером, успешно ли прошла «ампутация» и нет ли КЗ между площадкой под припайку кабеля и отрезанной антенной. Кстати, иногда эта площадка может иметь КЗ на землю – таковы особенности архитектуры некоторых модемов. Если бы мы не отрезали внутреннюю антенну, то после подключения внешней антенны сигнал бы делился между ними, возникло бы рассогласование и ничего бы не получилось.

image

Припаиваем кабель к модему. Паяем быстро, точно и аккуратно, не перегреваем плату. Центральную жилу припаиваем на площадку, оставшуюся от внутренней антенны; оплётку припаиваем к любому месту, являющемуся землёй и расположенному как можно ближе к площадке с припаянной центральной жилой.

image

image

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

На этом все.


Источники:

  1. Антенна 3G своими руками для Huawei E1550 и других – 2100 mHz
  2. Ускорим 3G модем при помощи внешней антенны
  3. OpenVPN клиент на роутере TP-Link TL-MR3020 с OpenWRT
  4. Настраиваем OpenVPN сервер на подключения клиентов
  5. Openvpn-клиент на OpenWRT (tap)