Мы используем облачный сервер (Debian Squeeze), через который общедоступные порты на общедоступном IP направляют трафик на внутренние серверы. Мы ищем способ использовать IPTables и ssh, где на основе некоторой части строки подключения ssh (или чего-то подобного) iptables перенаправит ssh-соединение на «правильный» внутренний сервер. Это позволит нам использовать один общий общедоступный порт, а затем перенаправить ssh-соединения на отдельные серверы.
Так, например, мы надеемся сделать что-то вроде следующего:
iptables использует часть этой строки или какие-то средства для перенаправления соединения на внутренний сервер, используя что-то вроде
iptables -t nat -A PREROUTING ! -s xxx.xxx.xxx.0/24 -m tcp -p tcp --dport $EXTPORT -j DNAT --to-destination $HOST:$INTPORT
....где $HOST
это внутренний IP-адрес сервера, $EXTPORT
это общий общественный порт и $INTPORT
порт внутреннего сервера.
Похоже, что "строковый" аспект iptables не делает того, что мы хотим.
В настоящее время мы можем выполнять маршрутизацию на основе синтаксиса IP-таблицы, который мы используем, но полагаемся на наличие отдельного общедоступного порта для каждого сервера и надеемся использовать один общий общедоступный порт, а затем перенаправить на определенные внутренние серверы на основе некоторой части строка подключения ssh или каким-либо другим способом.
Какие-либо предложения? Спасибо!
Это невозможно. Связь между вами и ssh-сервером полностью зашифрована, iptables не имеет возможности заглянуть внутрь пакета и, следовательно, может соответствовать только на основе IP / порта на отправляющей и принимающей стороне.
Я бы настроил разные порты на общедоступном компьютере и перенаправил их через iptables на машины в фоновом режиме, а затем сделал бы что-то вроде этого в конфигурации вашего ssh-клиента (~ / .ssh / config):
Host machineA
HostName your-public-machine
Port 12341
Host machineB
HostName your-public-machine
Port 12342
Host machineC
HostName your-public-machine
Port 12343
С этой конфигурацией вы можете просто запустить ssh machineA
, ssh machineB
или ssh machineC
и добраться до нужной машины.