У меня есть мастер, доступный извне по статическому 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 slave
. К сожалению, это не работает с Filezilla, который позволяет мне указать только имя хоста и порт. Вот почему я хочу перенаправить порт 2201 ведущего устройства на ведомый SSH. Другими словами, я хочу ssh pi@1.2.3.4 -p 2201
быть эквивалентным бегу ssh slave
. Любые предложения о том, как это сделать?
Редактировать:
Добавление -t nat
flag Я выполнил команды, предложенные @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 pi@1.2.3.4 -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.x.x.x IP of master>
Первая команда скажет серверу перенаправить трафик, поступающий на порт 2201, на порт 22 IP 10.0.0.1.
Второй сообщит, что весь трафик, идущий к порту 22 10.0.0.1, должен иметь правильный IP-адрес источника (в данном случае адрес 10.xxx вашего сервера 1.2.3.4), чтобы пункт назначения (10.0.0.1) знал, куда направить направить его обратно в.
Надеюсь это поможет