Назад | Перейти на главную страницу

SSHD для получения перенаправленного IP-адреса клиента

Это мой вариант использования:

У меня есть куча хостов за балансировщиками нагрузки и клиентов SSH через балансировщик нагрузки. LB внутренне создает новое соединение, поэтому соединение с конечным хостом имеет IP-адреса LB. Чтобы узнать, кто запустил запрос, балансировщик нагрузки настроен на пересылку IP-адреса клиента в заголовке. Я не совсем знаком с тем, как работает пересылка, но, насколько я понимаю, в заголовок добавляется магическое число, за которым следует длина поля, а затем само поле, содержащее ClientIP.

Есть ли способ указать SSHD получить перенаправленный IP-адрес клиента? Прошу прощения, если детали немного сбивают с толку, я не знаком с сетевой частью, но у моей команды есть этот вариант использования, и я хотела бы знать, как заставить SSHD извлекать CIP (IP-адрес клиента) из TCP-пакета.

Если балансировка нагрузки работала в режиме DSR, процесс sshd видел бы только IP-адрес клиента и никогда не видел бы IP-адрес балансировщика нагрузки. Я предполагаю, что в вашей сетевой настройке есть что-то, препятствующее использованию DSR, поэтому вам придется использовать другие методы.

Существуют разные уровни протокола, на которых IP-адрес клиента может быть вставлен в заголовок.

  • Уровень IP: не очень хорошая идея, поскольку IPv4 и IPv6 полностью различаются.
  • Уровень TCP: может работать, но я не вижу такой опции на официальный список опций TCP.
  • Слой HTTP: X-Forwarded-For широко используется для этого, но, поскольку он специфичен для HTTP, вы не можете использовать его с ssh.

Используя такие инструменты, как tcpdump или wirehark, вы можете проверять трафик, чтобы узнать, какой заголовок используется для передачи клиентского IP-адреса. Подходящая команда tcpdump для запуска на сервере может выглядеть так tcpdump -pni eth0 -s0 -Uw /tmp/ssh-traffic.pcap 'port 22'

Затем выходной файл можно проанализировать с помощью tcpdump или wirehark.