Отрывок из конца заметки:
В итоге: по адресу 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 (у вас будет свой)
Что потребуется
- IP-камера или Видеорегистратор или другое сетевое устройство.
- Роутер D-link DIR-620S или DIR-300
(можно другой (однако не любой другой), указанные модели проверены и подойдут 100%, описание настроек и скриншоты в статье — из этих моделей) - 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=300sconn 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 – нет, это не очень приятно, так как придётся ещё дополнительно настроить сетевой экран, об этом будет рассказано и показано далее.}
Нажимаем Применить
После этого, роутер автоматически начнёт соединяться 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
3.2 Сетевой экран
Так как я сейчас настраиваю на DIR-300 (могу себе позволить не включать Сетевой фильтр, а оставить выключенным) - я пропущу этот шаг, но оставлю картинки настроек (позже допишу текстом).
Межсетевой экран → 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://github.com/eugenesmsk/local_network_access
Также можете погуглить по запросу: "vps vpn port forwarding".
Сохраните к себе или поделитесь с друзьями: