Почему из контейнера docker не доступен сетевой ресурс?
Приветствую, коллеги!
Суть. Подключаюсь к vpn клиента используя Cisco Anyconnect. После подключения становятся доступны внутренние ресурсы, на условном домене *.local. Однако подключиться к ресурсу из контейнера не получается.
Пинг из контейнера определяет внутренний IP, но все пакеты теряются. Трассировка никуда не уходит, обрывается на первом узле. При этом с компьютера все работает.
Docker compose up поднимает дефолтную сеть bridge.
В docker-compose.yml сети не указаны.
На компьютере Kubuntu 22.04.
Подскажите куда копать.
Cison AnyConnect создаёт свой виртуальный VPN-интерфейс, которому присваивает IP-адрес, настроенный клиентом на VPN-сервере для раздачи вам из диапазона IP-адресов своей VPN-сети. VPN-сервер ожидает соединений только с этого IP-адреса.
Docker Compose поднимает свою сеть со своей адресацией, в VPN-сеть из сети Docker пакеты не попадут, а если вы даже их и смаршрутизируете - VPN-сервер их не примет - IP-адреса не его.
Скорее всего копать в сторону настройки SNAT в iptables: при отправке пакета на IP-адрес ресурса в VPN-сети подменять адрес источника на IP-адрес виртуального VPN-интерфейса. Не факт что сработает - Cisco AnyConnect версия от версии всё более анально огораживается от всевозможных трюков с сетевыми настройками, подменами DNS-серверов и т. п. Работает классическое утверждение "повышение безопасности всегда ведёт к понижению удобства работы".
Можете спросить у клиента, как вам быть в вашем случае: если им по силам поднять Cisco VPN, значит по идее и по силам предложить вам вариант, при котором доступ в VPN-сеть работать будет не только с вашей машины, но и из контейнеров на ней. Особенно если в вашей работе подразумевалось использование контейнеризации вами на вашей стороне.
Ещё одна альтернатива - проксирование. На хосте ставите HAProxy, для нужных ресурсов из VPN-сети клиента настраиваете проксирование: входящие в HAProxy соединения по порту такому-то направлять на такие-то IP и порт из VPN-сети...