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

Переадресация IP в Linux

У меня есть три машины

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

Это хороший способ сделать это или есть какое-нибудь простое решение?

Остерегайтесь: прочтите это, только если у вас есть 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 если вы думаете, что это может вам помочь.

Либо используйте для этого VPN-соединения (все машины, подключенные через частную сеть), что более безопасно, либо переадресацию портов (что неплохая идея), просто не забудьте ограничить пул IP-соединений на машине в частной сети.

Правила 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