У меня три машины
Source Machine
Destination Machine - IP 10.20.30.40
Intermediate Machine - Host server1.test.com
Исходная машина имеет SSH-доступ к Промежуточной машине, а Промежуточная машина имеет SSH-доступ к Целевой машине но нет прямого доступа от источника к месту назначения
На источнике запущен скрипт, которому требуется SSH к месту назначения. В скрипте настроен IP-адрес места назначения, и я не могу изменить его на имя хоста или localhost (тогда я мог бы использовать SSH-порт для перенаправления с помощью промежуточного сервера)
Я проверил некоторые статьи и везде предлагал использовать iptables для перенаправления IP-адреса на другой пункт назначения
Поэтому я решил использовать iptables на источнике для перенаправления IP-адреса назначения на localhost на порт 1234, используя следующее:
iptables -t nat -A PREROUTING -p tcp -d 10.20.30.40 --dport 22 -j DNAT --to 127.0.0.1:1234
, а затем перенаправить локальный порт 1234 через промежуточный компьютер в пункт назначения следующим образом:
ssh server1.test.com -L 1234:10.20.30.40:22
Это хороший способ сделать это или есть какое-нибудь простое решение?
правила iptables-DNAT будут заменены следующими настройками.
(Script execution user's .ssh/config)
Host 10.20.30.40
Hostname 127.0.0.1
Port 1234
Если ssh-portforward запущен с тем же пользователем, я считаю целесообразным использовать ProxyCommand
.
Host 10.20.30.40
ProxyCommand ssh server1.test.com nc %h %p
Либо используйте для этого VPN-подключения (все машины, подключенные через частную сеть), что более безопасно, либо переадресацию портов (что неплохая идея), просто не забудьте ограничить пул IP-соединений на машине в частном порядке сеть.
Остерегайтесь : прочтите это, только если у вас есть root-доступ как к исходным, так и к промежуточным машинам.
Поскольку вы говорите, что исходный компьютер (назовем его A) не имеет возможности чтобы связаться с адресатом (называемым C), я предполагаю, что существуют ограничения маршрутизации или разрешений, которые препятствуют этому. Ограничения, которых может избежать промежуточный продукт (машина B). Вы можете заставить исходный компьютер использовать последний в качестве шлюза для достижения пункта назначения. Поскольку я считаю, что A и B не находятся в одной сети, вы можете создать ssh vpn между A и B (IP tun0: 10.0.0.1, IP tun0 B: 10.0.0.2, оба замаскированы 255.255.255.252 в режиме p2p) и выдайте
# ip route add 10.20.30.40/32 via 10.0.0.2 dev tun0
на A. С другой стороны, на B:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 10.0.0.1 -d 10.20.30.40/32 -j MASQUERADE
Я не буду вдаваться в подробности о том, как вызвать ssh vpn, так как это вне вашего вопроса. Проверьте https://help.ubuntu.com/community/SSH_VPN , если вы думаете, что это может вам помочь.