Я работаю в среде, где есть несколько местоположений, и в каждом из них у нас одна и та же схема IP-адресации, то есть у нас есть много машин (по одной в каждом месте), которые используют один и тот же IP-адрес (хотя имена хостов разные). Естественно, между этими локациями нет связи, а также нет DNS. Я подключаюсь к каждому месту по очереди, открывая VPN-туннели. Моя рабочая станция - Linux.
Я пытаюсь разработать систему, позволяющую мне работать в этой среде максимально безопасно. Я хотел бы использовать имена хостов вместо IP-адресов напрямую, поскольку у нас есть легко запоминающееся соглашение об именах. Проблемы, с которыми я столкнулся до сих пор: 1) вход по ошибке на другой компьютер, потому что туннель был открыт в неправильном месте, и 2) ssh, имеющий другой хост с тем же IP, но с другим именем хоста в known_hosts, и отказываясь подключаться.
Пока я думаю о создании разных файлов / etc / hosts и ~ / .ssh / known_hosts для каждого местоположения (например, /etc/hosts.location1) и использования сценария переключения местоположения для автоматического переключения между этими файлами путем копирования файла версия настроена для моего целевого местоположения вместо файла по умолчанию (например, cp /etc/hosts.location1 / etc / hosts). В идеале этот сценарий в конечном итоге будет интегрирован с программным обеспечением, которое я использую для открытия виртуальных частных сетей в разных местах.
Мой вопрос: есть ли лучший способ сделать это? Есть ли какие-то функции в ssh или разрешении имен linux, которые мне не хватает?
Большое спасибо.
Редактировать: это производственная среда, и я ищу решение этой проблемы на рабочей станции.
Вы упомянули, что используете VPN для каждого сайта. Может ли каждый сайт иметь DNS-сервер (или два) с собственным доменом сайта (site1.mycorp.com, site2.mycorp.com) и использовать что-то вроде Bind views (http://www.zytrax.com/books/dns/ch7/view.html) для предоставления IP-адресов именованным хостам в сети VPN?
Таким образом, вы можете дать каждому хосту на каждом сайте уникальное полное доменное имя (barney.site1.mycorp.com
и rubble.site2.mycorp.com
), и эти хосты будут правильно разрешаться только тогда, когда вы подключены к правильному сайту по VPN и откликнетесь на это представление привязки. На каждом сайте barney.site1.mycorp.com
и rubble.site2.mycorp.com
потенциально может иметь тот же IP-адрес. Но они не разрешились бы извне или если бы вы были подключены к неправильному VPN.
Это не столько решение для "рабочей станции". Но если у вас есть возможность добавлять узлы (виртуальные машины или физические хосты) к каждому сайту (которые не обязательно должны быть частью производственной среды), то это может быть решением. Если у вас уже есть производственный DNS, который вам удобно изменять, то вы, возможно, уже сможете использовать имеющиеся представления и именование.
Можете ли вы делать что-нибудь на удаленных сайтах, например, поместить файл в $ HOME или отредактировать bashrc? Например, у меня есть на одном сайте / etc / bashrc:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[SITE1 \u@\h \W]\\$ "
что помогает избежать двусмысленности. Вы можете настроить свое приглашение на включение cat .site_name
например, если вы можете установить этот файл.
Также обратите внимание на использование .ssh / config для определений имен хостов. Вы можете иметь:
Host app1.site1
HostName 10.11.12.13
User service
и т.д., а затем используйте ssh app1.site1
и полагайтесь на строгую проверку ключа хоста, чтобы обезопасить себя. Я предполагаю, что sshd было разрешено создавать собственные ключи хоста. Если у машин одинаковые ключи хоста, с этим у вас будут проблемы.
Наконец, вы можете написать сценарий оболочки ssh. См. Таблицу маршрутизации (netstat -nr
), чтобы найти конечные точки VPN и запретить неправильное поведение на основе IP-адреса конечной точки. Примерно: safe_ssh site hostname
и помимо ротации файлов known_hosts, если место назначения для вашей удаленной сети не соответствует указанному вами значению сайта, выйдите из системы с сообщением об ошибке. Вероятно, вы могли бы что-то сделать с мультиплексированием ssh-соединения, если бы вы хотели, чтобы сценарий также запускал и отключал VPN.
Является ли решение дать каждой машине уникальный IP-адрес (а также общий IP-адрес, предположительно, RFC 1918)? Мы используем этот подход, у нас есть несколько машин с псевдонимом IP RFC 1918, но все они имеют уникальный «общедоступный» IP.