Инструкция: Проброс порта от камеры или видеорегистратора — без белого IP или как пробросить порт из локальной сети наружу, через VPS и VPN L2TP сервер?

Отрывок из конца заметки:
В итоге: по адресу 45.96.40.14:580 - открывается WEB-интерфейс IP-камеры - из любой точки Интернета. Также можно открыть ещё несколько портов (например RTSP: 554, Onvif 8080 – для записи на удалённый видеорегистратор), и добавить ещё несколько устройств (ещё несколько камер, например).

***

Топология сети

Сеть роутера (на даче): 192.168.1.0/24

Сеть VPN сети (VPN-сервер L2TP, на VPS): 172.16.0.0/16

_________________________________________________________

IP адрес камеры: 192.168.1.36 (рассматриваем 80 порт — веб-интерфейс)

Шлюз VPN сервера: 172.16.0.1 (маска: 255.255.0.0)

IP адрес VPS сервера: 45.96.40.14 (у вас будет свой)

Что потребуется

  1. IP-камера или Видеорегистратор или другое сетевое устройство.
  2. Роутер D-link DIR-620S или DIR-300 
    (можно другой (однако не любой другой), указанные модели проверены и подойдут 100%, описание настроек и скриншоты в статье — из этих моделей)
  3. VPS-сервер

***

1. Поднимем VPS сервер и L2TP VPN сервер на нём

1.1 Регистрируем VPS на вашем любимом хостинге. 

Например, Beget. (да-да, ссылка реферальная, регистрируйтесь по ней и мне упадут бонусы).

Подойдёт самый дешёвый тарифный план. Также не обязательно платить за целый месяц, для начала можно положить 15 р, этого хватит на 2 дня.

Устанавливайте Ubuntu 22.04 (предыдущие версии тоже подойдут).

Итак, Логин и Пароль от аккаунта в СМС и на почте.

Логин и Пароль (для подключения по SSH) от вновь созданного VPS на почте в письме с темой: 

“LTD Beget: Виртуальный сервер « … » успешно создан”.

2. Подключаемся по SSH и поднимаем VPN L2TP

2.1 Нам нужен: VPN L2TP сервер на Ubuntu, где клиентом будет роутер, который маршрутизирует локальную сеть: 192.168.1.0 к сети L2TP сервера: 172.16.0.0 с маской 255.255.0.0 и шлюзом 172.16.0.1.

sudo apt update

sudo apt install xl2tpd strongswan

2.2 Отредактируйте файл /etc/ipsec.conf, чтобы добавить следующую конфигурацию:

config setup
   charondebug="ike 1, knl 1, cfg 0"

conn %default
   keyexchange=ikev1
   ike=aes256-sha1-modp1024!
   esp=aes256-sha1!
   dpdaction=clear
   dpddelay=300s
   dpdtimeout=300s

conn L2TP-PSK
   authby=secret
   auto=add
   keyingtries=%forever
   ikelifetime=8h
   keylife=1h
   ike=aes256-sha1-modp1024!
   esp=aes256-sha1!
   type=transport
   left=%any
   leftprotoport=17/1701
   right=%any
   rightprotoport=17/%any
   rightsubnet=172.16.0.0/16
 

2.3 Отредактируйте файл /etc/xl2tpd/xl2tpd.conf, чтобы добавить следующую конфигурацию:

[global]
ipsec saref = yes

[lns default]
ip range = 172.16.0.2-172.16.0.254
local ip = 172.16.0.1
refuse chap = yes
refuse pap = yes
require authentication = yes
name = l2tpd
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

2.4 Создайте файл /etc/ppp/options.xl2tpd и добавьте в него следующую конфигурацию:

ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
mtu 1400
mru 1400

2.5 Добавьте пользователей, которым будет разрешен доступ к VPN:

Отредактируйте файл /etc/ppp/chap-secrets и добавьте в него следующую конфигурацию:

username1 * password1 *
username2 * password2 *

2.6 Настройка пересылки IP-пакетов

Отредактируйте файл /etc/sysctl.conf, чтобы разрешить пересылку IP-пакетов:

sudo nano /etc/sysctl.conf

Убедитесь, что следующая строка раскомментирована:

net.ipv4.ip_forward=1

Примените изменения:

sudo sysctl -p

2.7 Настройка правил фаервола

Настройте правила фаервола, чтобы разрешить трафик между локальной сетью и VPN. Предположим, что интерфейс, подключенный к интернету, - это eth0, а интерфейс, связанный с локальной сетью, - это eth1.

sudo iptables -A FORWARD -i eth0 -o eth1 -s 192.168.1.0/24 -d 172.16.0.0/16 -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -s 172.16.0.0/16 -d 192.168.1.0/24 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Сохраните правила фаервола, чтобы они применялись после перезагрузки сервера:

sudo iptables-save | sudo tee /etc/iptables.rules

2.8 Настройка автозапуска

Создайте файл /etc/rc.local:

sudo nano /etc/rc.local

Добавьте следующие строки:

iptables-restore < /etc/iptables.rules
service strongswan restart
service xl2tpd restart

Убедитесь, что файл /etc/rc.local имеет права на выполнение:

sudo chmod +x /etc/rc.local

2.9 Запуск служб и перезагрузка сервера

Запустите службы L2TP и перезагрузите сервер:

sudo systemctl start strongswan-starter
sudo systemctl start xl2tpd
sudo reboot

***

На данном этапе можно промежуточно протестировать проделанную работу.

Для этого создайте L2TP соединение на вашем роутере.

(рекомендую использовать D-Link DIR-300 или DIR-620S – так как проверял на них работоспособность данной инструкции).

Параметры L2TP соединения  для DIR-300:

Переходите в Настройка соединений → WAN → (+) знак плюса (добавить)

Тип соединения: L2TP

Имя пользователя: username1

Пароль: username1

Адрес VPN-сервера: 5.35.9.70 // IP вашего VPS сервера

{Нажимайте вкладку “Все настройки” для расширенных настроек}

NAT: выключаем

Сетевой экран: выключаем (!) на время тестирования

{Здесь важный момент: на DIR-300 у меня была возможность выключить Сетевой экран, а на DIR-620S – нет, это не очень приятно, так как придётся ещё дополнительно настроить сетевой экран, об этом будет рассказано и показано далее.}

Настройка L2TP соединения

Нажимаем Применить

После этого, роутер автоматически начнёт соединяться c L2TP сервером, и в случае успеха – после нескольких нажатий F5 вы увидите в колонке Статус: Соединено.

 

Далее, можно попинговать наш сервер с роутера:

У D-Link это Система → Пинг

В поле Хост: 172.16.0.1 // Адрес сервера в VPN сети.

Если видите: 

3 packets transmitted, 3 packets received, 0% packet loss

Всё ок. Идём дальше.

***

3. Ещё немного настроек роутера

3.1 Настраиваем маршрут

Дополнительно → Маршрутизация

Добавляем маршрут к сети 172.16.0.0 с маской 255.255.0.0 и шлюзом 172.16.0.1

Добавление маршрутизации к сети роутера к VPN сети

3.2 Сетевой экран

Так как я сейчас настраиваю на DIR-300 (могу себе позволить не включать Сетевой фильтр, а оставить выключенным) - я пропущу этот шаг, но оставлю картинки настроек (позже допишу текстом).

Межсетевой экран → IP-фильтры

Первое правило:

Первое правило для IP фильтра (сетевой фильтр)

Второе правило:

Второе правило для IP фильтра (сетевой фильтр)

4. Проброс порта локального устройства наружу

4.1 Необходимо добавлять маршрутизацию и правила iptables при каждом установлении соединения pppX (соединения клиента L2TP с сервером).

Сначала это кажется не очевидным, но соединения иногда разрываются по причине отсутствия Интернета на клиенте, или из-за перезагрузки сервера, да много ещё из-за чего.

Я использовал костыльный метод – прописывая задания в файл: /etc/ppp/ip-up (рабочий, проверенный метод, но с точки зрения Linux Way – это костыль, я знаю, когда-нибудь найду правильное решение и напишу его сюда) добавляем в файл /etc/ppp/ip-up строку:

sudo sh /etc/iptables.sh

И создаём этот файл /etc/iptables.sh, со следующим содержимым:

ip route add 192.168.1.0/24 via 172.16.0.1;
iptables -t nat -A PREROUTING -d 45.96.40.14 -p tcp --dport 580 -j DNAT --to-dest 192.168.1.36:80;
iptables -t nat -A POSTROUTING -d 192.168.1.36 -p tcp --dport 80 -j SNAT --to-source 172.16.0.1

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

45.96.40.14 - IP адрес вашей VPS

192.168.1.36 - локальный IP адрес устройства подключенного к роутеру (IP камера, видеорегистратор, WEB-сервер, или любое другое)

80 - внутренний порт локального устройства, в моём случае, это WEB интерфейс на 80 порту - WEB-интерфейс IP-камеры

580 - это внешний порт на который пробрасывается локальный

4.2 Сделаем файл исполняемым:

sudo chmod +x /etc/iptables.sh

После этого нужно выключить и включить Роутер – что бы L2TP клиент отключился от сервера и подключился снова (ну или просто нажать кнопку Переподключиться выбрав L2TP соединение на странице WAN соединений, в админки роутера D-Link).

В итоге: по адресу 45.96.40.14:580 - открывается WEB-интерфейс IP-камеры - из любой точки Интернета.

***

Если вам понадобится пробросить наружу порт IP камеры ONVIF 8080 – добавляете к вышеуказанному файлу /etc/iptables.sh 2 строки:

iptables -t nat -A PREROUTING -d 45.96.40.14 -p tcp --dport 58080 -j DNAT --to-dest 192.168.1.36:8080;
iptables -t nat -A POSTROUTING -d 192.168.1.36 -p tcp --dport 8080 -j SNAT --to-source 172.16.0.1

Если понадобится добавить ещё один порт или ещё одно устройство – по аналогии добавляйте ещё 2 строки.

***

***

Проблему, которая решает эта заметка — намного проще решается пробросом порта с белым IP.

Данный подход стоит использовать только тогда, когда нет белого IP, например видеонаблюдение на дачи, где Интернет через 4G модем.

***

Вот и всё. В дальнейшем буду понемногу апдэйтить эту заметку.

P.S.: Если что-то пошло не так — пишите в Telegram (ник: first_Andres) - разберёмся.

***

Ссылки по теме:

https://truewebstories.ru/zametki/probros-porta-vps-servera-do-lokalnogo-klienta-routera-klienta-vpn-servera-na-vps

https://blog.kvv213.com/2022/05/soedinyaju-lokalnye-seti-cherez-vps-server-i-keenetic-posredstvom-wireguard-vpn/

https://github.com/eugenesmsk/local_network_access

Также можете погуглить по запросу: "vps vpn port forwarding".


Сохраните к себе или поделитесь с друзьями:

 

Связаться с автором Поддержать автора (что?)

Комментарии

Если у вас есть вопрос, критика или другое мнение - напишите в комментариях.