Для камер и других вещей, требующих белую статику.

Если оператор не дает белый IP, то можно сделать его самим.

Способ подойдет для любых 3G/4G/LTE операторов и вообще любых интернет-провайдеров, хоть билайн, мтс, мегафон или теле2.

Как бонус — собственный VPN сервер 😉

Ценозатраты: от 60руб/мес в зависимости от хостинга.

Стадия 1. Регистрация и покупка VDS

Регистрируемся в хостинге. Я использую 2 VDS хостинга:

  • vdsina — 60руб/мес
  • ruweb — 160руб/мес

Буду благодарен, если зарегистрируетесь по моей ссылке 🙂

Я использую самый дешевый вариант:

Выбираем Debian 10 и самый дешевый вариант.

Для скорости можно выбрать Москву, просто для VPN можно выбрать нужную страну.

На почту приходит письмо вида:

Далее скачиваем и устанавливаем PuTTY x86-bit или 64-bit

Стадия 2. Подготовка VDS

И подключаемся через него:


Нажимаем Да и попадаем в CLI:

Первым делом обновляем систему:

#apt-get update && apt-get upgrade -y
#apt-get dist-upgrade

Локализуем

#dpkg-reconfigure locales
en_US ISO-8859-1
en_US.UTF-8 UTF-8
ru_RU.CP1251 CP1251
ru_RU.UTF-8 UTF-8

И по-умолчанию выбираем ru_RU.UTF-8 UTF-8

Установим часовой пояс. Выберем свой город

#dpkg-reconfigure tzdata

Установим пакет для обновления системы без перезапуска сервера

#apt-get install needrestart -y

И перезагрузим

#reboot

Стадия 3. Установка L2TP IPsec сервера

Скачиваем скрипт установки сервера

#cd /tmp
#wget https://git.io/vpnsetup -O vpnsetup.sh

Узнаем как называется интерфейс, смотрящий в Интернет

cat /etc/network/interfaces

Нас интересует название интерфейса, в данном случае ens3,

Правим скрипт под себя

Если на вашем сервере интерфейс так же отличается от eth0, то выполняем еще команду

#sed -i 's/eth0/ens3/g' vpnsetup.sh

Обращаю внимание, что скрипт создает ppp интерфейсы и пулы адресов со своей адресацией. Если адресация по-умолчанию не устраивает, ее нужно изменить заранее:

nano vpnsetup.sh

L2TP_NET=${VPN_L2TP_NET:-'192.168.42.0/24'}
L2TP_LOCAL=${VPN_L2TP_LOCAL:-'192.168.42.1'}
L2TP_POOL=${VPN_L2TP_POOL:-'192.168.42.10-192.168.42.250'}
XAUTH_NET=${VPN_XAUTH_NET:-'192.168.43.0/24'}
XAUTH_POOL=${VPN_XAUTH_POOL:-'192.168.43.10-192.168.43.250'}
DNS_SRV1=${VPN_DNS_SRV1:-'8.8.8.8'}
DNS_SRV2=${VPN_DNS_SRV2:-'8.8.4.4'}

Я обычно использую рандомайз. Меняю первые 2 октета например на 10.250:

L2TP_NET=${VPN_L2TP_NET:-'10.250.250.0/24'}
L2TP_LOCAL=${VPN_L2TP_LOCAL:-'10.250.250.1'}
L2TP_POOL=${VPN_L2TP_POOL:-'10.250.250.10-10.250.250.250'}
XAUTH_NET=${VPN_XAUTH_NET:-'10.250.251.0/24'}
XAUTH_POOL=${VPN_XAUTH_POOL:-'10.250.251.10-10.250.251.250'}
DNS_SRV1=${VPN_DNS_SRV1:-'8.8.8.8'}
DNS_SRV2=${VPN_DNS_SRV2:-'8.8.4.4'}

Запускаем скрипт

sh vpnsetup.sh

В конце будут данные для подключения

Стадия 4. Настройка L2TP IPsec

Общий IPsec ключ живет в файле /etc/ipsec.secrets

nano /etc/ipsec.secrets

%any  %any  : PSK "Этот_Ключ_Меняем_На_Свой"

Список пользователей в файле /etc/ppp/chap-secrets

nano /etc/ppp/chap-secrets

"user1" l2tpd "Ln9RCu4DWJ0AcPsM" 10.250.250.101
"user2" l2tpd "rKQzQecCiEifMWQ4" 10.250.250.102

Стадия 5. Настройка MASQUERADE

Чтобы на ppp интерфейсы пустить Интернет

nano /etc/iptables.rules
Перед последним COMMIT, после всех правим MASQUERADE добавляем

-A POSTROUTING -o ppp+ -j MASQUERADE

Перезагружаем сервер

#reboot

Стадия 6. Проброс портов или VPN?

Проброс порта не самый безопасный метод. Вы будете светить и так не совсем безопасными сервисами во внешний мир.
Лучше создать себе отдельную запись VPN и подключаться сначала к VPN, а потом уже по внутреннему IP адресу внутри VPN открывать камеры.
Но есть малая категория людей, которые могут запомнить все эти действия. По этому на свой страх и риск можно открыть порт в Интернет:

#iptables -t nat -A PREROUTING --dst _IP_АДРЕС_VDS_СЕРВЕРА_ -p tcp --dport _ВНЕШНИЙ_ПОРТ_ -j DNAT --to-destination _ВНУТРЕННИЙ_IP_VPN_КЛИЕНТА_:_НУЖНЫЙ_ПОРТ_
#iptables -I FORWARD 1 -i ens3 -o ppp+ -d _ВНУТРЕННИЙ_IP_VPN_КЛИЕНТА_ -p tcp -m tcp --dport _НУЖНЫЙ_ПОРТ_ -j ACCEPT (для порта)
#iptables -I FORWARD 1 -i ens3 -o ppp+ -d _ВНУТРЕННИЙ_IP_VPN_КЛИЕНТА_ -p tcp -m tcp -j ACCEPT (все tcp)
#iptables-save > /etc/iptables.rules

В моем примере я прокидываю на 34567 порт роутера, который является L2TP IPsec клиентом user1

#iptables -t nat -A PREROUTING --dst _IP_АДРЕС_VDS_СЕРВЕРА_ -p tcp --dport 34567  -j DNAT --to-destination 10.250.250.100:34567
#iptables -I FORWARD 1 -i ens3 -o ppp+ -d _ВНУТРЕННИЙ_IP_VPN_КЛИЕНТА_ -p tcp -m tcp --dport 34567 -j ACCEPT #Если мне нужно разрешить конкретный порт
#iptables -I FORWARD 1 -i ens3 -o ppp+ -d _ВНУТРЕННИЙ_IP_VPN_КЛИЕНТА_ -p tcp -m tcp -j ACCEPT #Если мне нужно разрешить все tcp порты
#iptables-save > /etc/iptables.rules

Далее на самом роутере в зависимости от модели нужно настраивать дальнейшее прокидывание порта на нужное оборудование c l2tp интерфейса

Стадия 7. Настройка маршрутизатора

Настройка MikroTik

Создаем L2TP Client:



Interfaces->+L2TP Client

Задаем название интерфейса в Name

Connect To: IP VPN нашего сервера

Выбираем цепочку dstnat, нужный протокол (для камер может использоваться как tcp, так и udp, можете создать сколько угодно правил), Dst. Port на который обращаются из вне, In Interface, куда приходит обращение

Выбираем событие dst-nat и указываем на какой IP в поле To Addresses и на какой порт отправлять подключение.

Пробуем подключиться по белому IP с указанием порта. Всё получится.

Если остались вопросы, либо нет понимания что да как делать — я занимаюсь удаленной помощью.

Подводные камни L2TP IPsec

Если устройства за одним NAT подключаются к одному серверу, то работает сценарий «кто первый подключился».

Для таких моментов, а так же если ваше оборудование не может тянуть шифрование — поставим PPTP сервер:

#apt-get install pptpd

nano /etc/pptpd.conf

В конце указываем адресацию нашего L2TP сервера

localip 10.250.250.1
remoteip 10.250.250.101-200

nano /etc/ppp/pptpd-options

Укажем DNS

ms-dns 8.8.8.8
ms-dns 8.8.4.4

nano /etc/ppp/chap-secrets

Исправим список пользователей, указав * вместо l2tpd. Но можно жестко разграничить l2tpd и pptpd.

"user1" * "Ln9RCu4DWJ0AcPsM" 10.250.250.101
"user2" * "rKQzQecCiEifMWQ4" 10.250.250.102

nano /etc/rc.local

Добавим перед echo 1

service pptpd restart

В итоге получится:

#!/bin/bash
(sleep 15
service ipsec restart
service xl2tpd restart
service pptpd restart
echo 1 > /proc/sys/net/ipv4/ip_forward)&
exit 0

И перезагружаемся 🙂

reboot

Настройка PPTP ничем не отличается от L2TP, нужно только выбрать PPTP Client и указать все тоже самое, за исключением IPSec Secret