Довольно банальная ситуация — у вас нет возможности подключить проводной интернет с белым ip от нормального провайдера и приходится довольствоваться 4G от мобильных операторов. А выделенный ip очень нужен.
Это можно легко исправить. Допустим, у вас на работе белый ip и им никто не пользуется. При этом есть возможность поставить машину с linux на 24/7. Или же вы арендуете свой vps сервер. Главное чтобы был постоянный ip.
Я буду производить все манипуляции с системой на Ubuntu 16.04, которая выходит в интернет со своим собственным выделенным ip адресом. Домашняя сеть же крутится на роутере Keenetic Extra 2. Все действия заключаются в следующем: на сервере ставим OpenVPN, на роутере подключаемся к нему, перенаправляем порты на сервере, открываем порты на роутере. И все запросы будут проходить через сервер со статическим ip в нашу домашнюю сеть
Начнем.
У вас должен быть установлен Open VPN на Ubuntu 16.04, у меня есть на этот случай отдельная, очень простая инструкция:
Теперь нужно подключить к vpn наш роутер.
В моем Keenetic Extra II это делается очень легко:
Переходим в Другие подключения
и сознаем новое, тип — OpenVPN:
Со всеми галочками, как на скриншоте.
Поле Конфигурация OpenVPN заполняем содержимым файла *.ovpn, сформированного на Ubuntu 16.04.
У меня кинетик не хотел подключаться к vpn, ругаясь в логе на 14 строку setenv opt block-outside-dns
Я ее удалил, кинетик подключился.
Теперь нужно настроить перенаправление портов на сервере в нашу домашнюю сеть.
Узнаем имеющиеся сетевые подключения командой:
ifconfig -a
нам нужно найти сетевой интерфейс с нашим белым ip:
В данном случае это eth0
и найти сетевой интерфейс vpn:
В данном случае это tun0
Теперь создадим сетевые правила для перенаправления из eth0 в tun0:
iptables -t nat -A PREROUTING --dst 10.200.300.40 -p tcp --dport 443 -j DNAT --to-destination 10.2.0.3 iptables -I FORWARD 1 -i eth0 -o tun0 -d 10.2.0.3 -p tcp -m tcp --dport 443 -j ACCEPT
где 10.200.300.40 это ваш выделенный общедоступный ip, 10.2.0.3 это ip в сети vpn, выданный роутеру в файле *.ovpn, а 443 это порт, который мы перенаправляем.
Чтобы правила выполнялись и после перезагрузки сервера, отредактируем файл /etc/rc.local:
sudo nano /etc/rc.local
И добавим:
#!/bin/sh iptables -t nat -A PREROUTING --dst 10.200.300.40 -p tcp --dport 443 -j DNAT --to-destination 10.2.0.3 iptables -I FORWARD 1 -i eth0 -o tun0 -d 10.2.0.3 -p tcp -m tcp --dport 443 -j ACCEPT
В автозапуск добавили, теперь откроем нужный порт на домашнем роутере.
В keenetic extra 2 переходим в Переадресация и добавляем правило:
Где вход это наше подключение vpn, а выход, это ваше устройство в домашней сети, куда нужно получить доступ. Ну и порты, естественно.
Вот и все, у нас есть постоянный ip адрес для доступа из интернета в домашнюю сеть
На 10.2.0.3:443 идёт трафик с 10.200.300.40, получается и все запросы https в логах тоже будут от этого ip? или в логах ip клиента зашедшего на 10.200.300.40?
Ввиду того, что делал я это для доступа к home assistant извне, я не задумывался над этим. Запросы в логах, скорее всего, будут с внешнего ip сервера.
Спасибо за инфо!