Как можно сделать механизм, который контролирует внешний IP и запрещает выход в интернет, если внешний IP не равен заданному?

Дано:
  1. есть несколько десятков виртуальных машин под Win10
  2. каждая ВМ выходит в интернет через свой внешний IP адрес. Это достигается настроенной маршрутизацией на роутере(pfSense). Упрощенно схема маршрутизации выглядит так: ВМ-->pfSense-->OVPN сервер(внешний IP) -->интернет


Задача:
  1. создать некоторый механизм контроля, который будет каким-либо образом блокировать работу с ВМ или запрещать выход в интернет, если внешний IP адрес не будет соответствовать заданному в настройках.
  2. задержка между изменением внешнего IP и срабатыванием механизма(блокировка ВМ или отключение доступа в интернет) должна быть не более 1 минуты, желательно меньше.
  3. механизм должен быть как можно более простой, чтобы свести ошибки работы в идеале к 0%, даже жертвуя удобством администрирования


Пример работы:
  1. только что запросили какой у нас внешний адрес, например, с сервиса https://www.ipify.org/
  2. ничего не делаем, если полученный внешний IP соответствует заданному в настройках.
  3. во всех остальных случаях(сбой получения внешнего адреса, адрес не соответствует заданному и т.д.) запрещать работу
  4. если механизм сработал и заблокировал доступ к ВМ или доступ в интернет, то разблокировку производит администратор вручную


Какие есть идеи для реализации такого механизма?
  • Вопрос задан
  • 550 просмотров
Решения вопроса 1
@FragMaster Автор вопроса
В общем всем спасибо за мысли, вы мне посоветовали именно такой подход, как я планировал, но в вопросе не освещал, чтобы получить альтернативное видение.
В результате:
- поднятие OVPN клиента + маршрутизация трафика останется на pfSense
- написал скрипт, который будет запускаться в ВМ и контролировать внешний IP и в случае, если он не тот, блокировать все сетевые интерфейсы. Скрипт выполняется раз в 1 минуту.
https://gitlab.com/a.perminov/external-ip-monitor
- еще есть скрипт, который так же проверяет не пересекается ли внешний IP в всех ВМ и шлет уведомления о проблемах в Discord

Думаю этого будет достаточно...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@nApoBo3
Реализация данного функционала на стороне виртуальной машины потенциально проблемная.
Сделать можно на любом скриптовом языке, родным для windows является powershell, плюс планировщик задач.
По ссылке пример:
woshub.com/get-external-ip-powershell
Не проверял, но на первый взгляд выглядит рабочим.
Блокировать сеть можно, например, отключение сетевого интерфейса или удаление маршрута( но для удаления маршрута, нужны права админа, т.е. ваш скрипт должен запускаться от привилегированной учетной записи ).

Но я бы рекомендовал реализовывать данный функционал на сетевом слое.
Обратите внимание, что обычная лицензия windows не позволяет использовать ОС в виртуальной машине.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы