Я пытаюсь подключиться по SSH со своего домашнего устройства к конечному хосту через узел перехода, используя опцию ProxyJump OpenSSH.
У хоста Jump к его единственному интерфейсу привязаны два IP-адреса: x.x.x.x
и y.y.y.y
. Существует брандмауэр с белым списком IP-адресов, которым разрешен доступ по ssh к конечному хосту. y.y.y.y
есть в списке, но x.x.x.x
его нет.
Проблема в том, что по умолчанию на хосте перехода используется x.x.x.x
SSH для исходящего соединения.
Если я вручную подключаюсь по ssh с хоста перехода на конечный хост, я могу переопределить значение по умолчанию с помощью параметра OpenSSH -b
, например ssh -b y.y.y.y endhost
. Это работает отлично.
Однако при попытке напрямую с моего личного устройства перейти на endhost, используя jumphost в качестве посредника, я не могу заставить это работать. Я пробовал несколько вариантов указания адреса привязки, ~/.ssh/config
но безуспешно.
Есть ли способ указать хосту перехода использовать определенный адрес привязки?
решение1
Проблема в моей настройке заключалась в том, что шлюз по умолчаниюjumphostбыл настроен на использование другого IP-адреса ( x.x.x.x
в вашем примере), нежели тот, который я хотел sshd
использовать для исходящего трафика ( y.y.y.y
в вашем примере).
Итак, один из методов, который сработал для меня, состоял в том, чтобы задать определенный маршрут наjumphostдляконечный хостIP-адрес.
Наjumphost(у меня Ubuntu 20.04):
route add -host <endhost's IP>/32 gw y.y.y.1 dev <y.y.y.y's Iface>
Где <endhost's IP>
IPv4 похож на n.n.n.n
и <y.y.y.y's Iface>
- это интерфейс, который y.y.y.y
связан с, например eth0
.
Использованная литература:
Обратите внимание, я специально работал над тем, чтобы sshd
маршрутизировать через плавающий IP DigitalOcean. В этом случае y.y.y.y
необходимо обнаружить с помощью:
curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address
Итак, если эта команда возвращает 10.10.0.7
, то y.y.y.y
это 10.10.0.7
.
Использованная литература: