У меня есть мастер, доступный извне по статическому IP (1.2.3.4). От мастера я могу подключиться к ведомому устройству, которое находится в локальной сети (10.0.0.1). В настоящее время мой .ssh / config
выглядит так:
Host master
Hostname 1.2.3.4
User pi
IdentityFile ~/.ssh/id_rsa
Host slave
Hostname 10.0.0.1
User pi
IdentityFile ~/.ssh/id_rsa
ProxyJump master
С вышесказанным я могу удобно подключиться к ведомому устройству, используя ведомое устройство ssh
. К сожалению, это не работает с Filezilla, который позволяет мне указать только имя хоста и порт. Вот почему я хочу перенаправить порт 2201 ведущего устройства на ведомый SSH. Другими словами, я хочу, чтобы ssh (скрытый) -p 2201
был эквивалентен запуску подчиненного ssh
. Есть предложения, как это сделать?
Изменить:
Добавление флага -t nat
Я выполнил команды, предложенные @timmeyh. iptables -t nat -L --line-numbers
теперь дает
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DNAT tcp -- anywhere anywhere tcp dpt:2201 to:10.0.0.1:22
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 SNAT tcp -- anywhere 10.0.0.1 tcp dpt:ssh to:10.0.0.0
, где 10.0.0.0 - это главный адрес. Но ssh (скрытый) -p 2201
отклоняет соединение. Я также убедился, что / proc / sys / net / ipv4 / ip_forward
включен.
Вы можете решить эту проблему с помощью iptables:
iptables -A PREROUTING -p tcp -m tcp --dport 2201 -j DNAT --to-destination 10.0.0.1:22
iptables -A POSTROUTING -d 10.0.0.1/32 -p tcp -m tcp --dport 22 -j SNAT --to-source <10.xxx IP master>
Первая команда скажет серверу перенаправить трафик, поступающий через порт 2201 к порту 22 ip 10.0.0.1
Второй сообщит, что весь трафик, идущий на порт 22 10.0.0.1, должен иметь правильный IP-адрес источника (в данном случае адрес 10.xxx вашего 1.2.3.4 сервер), чтобы пункт назначения (10.0.0.1) знал, куда его направить обратно.
Надеюсь, это поможет