Блог Синявского
  • Разделы
  • Метки
  • Все статьи

OpenVPN на Mikrotik через USB модем

1

OpenVPN на Mikrotik через USB модем

[flickr:id=45934223265]

Тестовый стенд

Задача

Необходимо настроить просмотр камеры видеонаблюдения на даче, где интернет только через мобильного оператора связи. Так же я не хочу использовать P2P, считаю что это небезопасно, хочу настроить VPN туннель и заходить по ссылке.

Из оборудования несколько IP камер видеонаблюдения, роутер Mikrotik, usb модем билайн, виртуальный хостинг.

Схема включения последовательно выглядит так. Питание камер по POE, через свитч, инжектор или от 12В не имеет значения.

  1. Камера 1...N
  2. Роутер Mikrotik OpenVPN клиент
  3. USB модем Beeline (серый IP)
  4. Сервер VPS со статическим IP адресом (OpenVPN сервер)

Перед покупкой Mikrotik я протестировал схему с использованием OpenWRT на TP-Link, приведу пример. Но скорее всего вы будете долго мучаться с подключением через USB модем. Но схема тоже рабочая.

Схема представлена на рисунке

[flickr:id=39882920023]

Между сервером и роутером OpenVPN туннель.

Настройка OpenVPN сервера для работы с mikrotik

Установка OpenVPN сервера

sudo apt-get install openvpn easy-rsa

Создание сертификатов на сервере

Создаем директорию

make-cadir ~/openvpn-ca
cd ~/openvpn-ca

Отредактируем переменные по-умолчанию

nano vars
# Don't leave any of these fields blank.
export KEY_COUNTRY="RU"
export KEY_PROVINCE="SPB"
export KEY_CITY="Saint-Petersburg"
export KEY_ORG="Orbit"
export KEY_EMAIL="alex@sinyawskiy.ru"
export KEY_OU="Survielance"

# X509 Subject Field
export KEY_NAME="SinyawskiyRSA"

Загрузим окружение и создадим основной сертификат удостоверяющего центра (Certificate authority)

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

Создаем ключ Диффи-Хеллмана

./build-key-server SinyawskiyRSA
./build-dh

Создаем сертификат и ключ для каждого клиента (можно и один ключ)

./build-key client1
./build-key client2 

Далее копируем сертификаты в папку с конфигурацией сервера

cd keys/
cp ca.crt /etc/openvpn/
cp SinyawskiyRSA.crt /etc/openvpn/
cp SinyawskiyRSA.key /etc/openvpn/
cp dh2048.pem /etc/openvpn/

Копируем сертификаты клиентов

client1.crt
client1.key

client2.crt
client2.key

Выдача статических адресов клиентам и маршрутов

nano /etc/openvpn/server.conf
port 1194
proto tcp
dev tun
ca ca.crt
cert SinyawskiyRSA.crt
key SinyawskiyRSA.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir ccd
route 192.168.88.0 255.255.255.0
route 192.168.77.0 255.255.255.0
keepalive 10 120
key-direction 0

cipher AES-128-CBC
auth SHA1

user openvpn
group openvpn

persist-key
persist-tun
status openvpn-status.log
verb 3
username-as-common-name
client-cert-not-required
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login

Создадим папку для клиентских конфигов

mkdir -P /etc/openvpn/ccd

Конфигурация client1

nano /etc/openvpn/ccd/client1

Указан маршрут в 192.168.1.0/24 сеть

ifconfig-push 10.8.0.5 10.8.0.6
iroute 192.168.1.0 255.255.255.0
push "route 10.8.0.0 255.255.255.0"

Конфигурация client2

nano /etc/openvpn/ccd/client2

Указан маршрут в 192.168.77.0/24 сеть

ifconfig-push 10.8.0.9 10.8.0.10
iroute 192.168.77.0 255.255.255.0
push "route 10.8.0.0 255.255.255.0"

OpenVPN выдает адреса из таблицы. Первый выделяемый, второй адрес шлюза

[  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]

Проверка сервера

openvpn --config /etc/openvpn/server.conf --mode server

Добавим пользователя под которым будем логиниться из openvpn клиента

Создаем пользователя без директории

useradd -M client1
useradd -M client2

Зададим пароли

passwd client1
passwd client2

Загрузка сертификатов на mikrotik

Загружаем через webfig

Files -> Upload -> Обзор

Выбираем client1.crt client1.key

[flickr:id=46848782631]

Далее сертификаты надо импортировать в сертификаты

System -> Certificates -> Import

[flickr:id=46796545162]

Импортируем по очереди client1.crt и client.key, пока в таблице напротив client1 не появится KT

[flickr:id=46848782711]

После этого нужно удалить их и вкладки Files.

Настройка OpenVPN клиента на mikrotik

Заходим на роутер через webfig

PPP -> Add New -> OVPN Client

Заполняем поля все как на картинке:

[flickr:id=45934074115]

Проверяем на сервере

tail -f /var/log/syslog
Jan 23 13:44:34 ovpn-server[21903]: 10.100.10.155:39806 TLS: Username/Password authentication succeeded for username 'client1' [CN SET]
Jan 23 13:44:34 ovpn-server[21903]: 10.100.10.155:39806 WARNING: 'keydir' is present in local config but missing in remote config, local='keydir 1'
Jan 23 13:44:34 ovpn-server[21903]: 10.100.10.155:39806 Data Channel Encrypt: Cipher 'AES-128-CBC' initialized with 128 bit key
Jan 23 13:44:34 ovpn-server[21903]: 10.100.10.155:39806 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Jan 23 13:44:34 ovpn-server[21903]: 10.100.10.155:39806 Data Channel Decrypt: Cipher 'AES-128-CBC' initialized with 128 bit key
Jan 23 13:44:34 ovpn-server[21903]: 10.100.10.155:39806 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Jan 23 13:44:34 ovpn-server[21903]: 10.100.10.155:39806 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 DHE-RSA-AES256-GCM-SHA384
Jan 23 13:44:34 ovpn-server[21903]: 10.100.10.155:39806 [client1] Peer Connection Initiated with [AF_INET]10.100.10.155:39806
Jan 23 13:44:34 ovpn-server[21903]: client1/10.100.10.155:39806 OPTIONS IMPORT: reading client specific options from: ccd/client1
Jan 23 13:44:34 ovpn-server[21903]: client1/10.100.10.155:39806 MULTI: Learn: 10.8.0.5 -> client1/10.100.10.155:39806
Jan 23 13:44:34 ovpn-server[21903]: client1/10.100.10.155:39806 MULTI: primary virtual IP for client1/10.100.10.155:39806: 10.8.0.5
Jan 23 13:44:34 ovpn-server[21903]: client1/10.100.10.155:39806 MULTI: internal route 192.168.88.0/24 -> client1/10.100.10.155:39806
Jan 23 13:44:34 ovpn-server[21903]: client1/10.100.10.155:39806 MULTI: Learn: 192.168.88.0/24 -> client1/10.100.10.155:39806
Jan 23 13:44:34 ovpn-server[21903]: client1/10.100.10.155:39806 PUSH: Received control message: 'PUSH_REQUEST'
Jan 23 13:44:34 ovpn-server[21903]: client1/10.100.10.155:39806 send_push_reply(): safe_cap=940
Jan 23 13:44:34 ovpn-server[21903]: client1/10.100.10.155:39806 SENT CONTROL [client1]: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,route 10.8.0.0 255.255.255.0,ifconfig 10.8.0.5 10.8.0.6' (status=1)
Jan 23 13:45:01 CRON[18071]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)

Настройка NAT на сервере

Для того, чтобы камера работала, необходимо прокинуть port камеры 554 (rtsp) обязательно протокол tcp и udp.

iptables -t nat -A PREROUTING -i ens18 -p tcp --dport 5542 -j DNAT --to-destination 192.168.88.12:554
iptables -t nat -A PREROUTING -i ens18 -p udp --dport 5542 -j DNAT --to-destination 192.168.88.12:554

iptables -t nat -A PREROUTING -i ens18 -p tcp --dport 5541 -j DNAT --to-destination 192.168.88.11:554
iptables -t nat -A PREROUTING -i ens18 -p udp --dport 5541 -j DNAT --to-destination 192.168.88.11:554

iptables -t nat -A POSTROUTING -j MASQUERADE

Для вывода списка правил nat используется команда

iptables -t nat -L

Для удаления всех правил nat используется команда

iptables -t nat -F

Далее необходимо сохранить правила

iptables-save > /etc/iptables.rules

Применять их при запуске

nano /etc/network/if-pre-up.d/iptables
#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0
nano /etc/network/if-post-down.d/iptables
#!/bin/sh
iptables-save -c > /etc/iptables.rules
if [ -f /etc/iptables.rules ]; then
iptables-restore < /etc/iptables.rules
fi
exit 0

Проверка через FFmpeg

ffmpeg -i rtsp://admin:admin123@10.8.1.5:554/Streaming/Channels/2 1.mpeg

Включение нескольких инстансов VLC

Для просмотра потоков нескольких камер на одном экране

Инструменты -> Настройки

Снять галочки:

  1. Разрешить только одну копию
  2. Ограничиться одной копией при запуске из менеджера

[flickr:id=39883645673]

P.S.: Статья посвещается любимой конюшне в Сестрорецке.



  • ← сюда
  • туда →

comments powered by Disqus

Опубликовано

23.01.2019

Обновление

05.05.2022

Категории

mikrotik

Тэги

  • mikrotik 2
  • openvpn 1
  • survielance 1

Всегда на связи

  • Блог Синявского - Ничего не переносить на завтра, это тоже проблема с прокастинацией?
  • © Алексей Синявский, по лицензии CC BY-SA если не указано иное.
  • С использованием Pelican. Тема: Elegant от Talha Mansoor