Есть несколько вариантов. Прежде всего, есть ProxyCommand
, который может использовать произвольную программу вместо TCP-соединения - до тех пор, пока он говорит SSH в stdin / stdout. (Конечно, это работает только с SSH.)
Например, для туннелирования через другой SSH-сервер:
ssh -o ProxyCommand="ssh bastion.tld -W %h:%p" server123.tld
Таким образом, вы можете написать инструмент / скрипт на предпочитаемом вами языке, который принимает имя хоста в командной строке, ищет сервер, открывает TCP-соединение и копирует данные между ним и stdin / out. (Это может быть скрипт, который работает nc
.)
Затем используйте это так:
# ~/.ssh/config – see `man ssh_config` Host *.example.com ProxyCommand ~/bin/ssh-cloud-lookup %h %p
Второй вариант - написать собственный DNS-сервер, который использует API вашего контейнера для поиска адресов и предоставления ответов. Я считаю, что я видел, как некоторые инструменты, такие как Chubby, делают именно это.
Третий вариант (специфичный для Linux) - написать плагин "nsswitch", который реализует поиск имени хоста, аналогично существующим плагинам "dns", "mdns", "files". Например, systemd поставляет плагин с именем nss_mymachines
для разрешения имен контейнеров nspawn.