У меня есть сервер, который мы назовем hub-server.tld с тремя IP-адресами: 100.200.130.121, 100.200.130.122 и 100.200.130.123. У меня есть три разных компьютера, которые находятся за брандмауэром, но я хочу использовать SSH для перенаправления одной машины на каждый IP-адрес. Например: первая машина должна прослушивать SSH на порту 22 на 100.200.130.121, а вторая машина должна делать то же самое на 100.200.130.122, и так далее для разных служб на портах, которые могут быть одинаковыми для всех машин.
На странице руководства SSH есть -R [bind_address:]port:host:hostport
в списке у меня включены порты шлюза, но при использовании -R
с определенным IP-адресом сервер по-прежнему прослушивает порт на всех интерфейсах:
# ssh -NR 100.200.130.121:22:localhost:22 root@hub-server.tld
# netstat -tan | grep LISTEN
tcp 0 0 100.200.130.121:2222 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
Есть ли способ сделать так, чтобы SSH перенаправлял только соединения с определенного IP-адреса на первую машину, чтобы я мог одновременно прослушивать порт 22 на других IP-адресах, или мне придется что-то делать с iptables? Вот все строки в моей конфигурации ssh, которые не являются комментариями / значениями по умолчанию:
Port 2222
Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding yes
ClientAliveInterval 30
ClientAliveCountMax 1000000
UseDNS no
Subsystem sftp /usr/libexec/openssh/sftp-server
Из sshd_config(5)
:
GatewayPorts
Specifies whether remote hosts are allowed to connect to ports forwarded for the client. By default, sshd(8) binds remote port forwardings to the loopback address. This prevents other remote hosts from connecting to forwarded ports. GatewayPorts can be used to specify that sshd should allow remote port forwardings to bind to non-loopback addresses, thus allowing other hosts to connect. The argument may be “no” to force remote port forwardings to be available to the local host only, “yes” to force remote port forwardings to bind to the wildcard address, or “clientspecified” to allow the client to select the address to which the forwarding is bound. The default is “no”.
Вы хотите установить это на clientspecified
вместо того yes
.