
У меня такая настройка:
[client01] <-A-> [server01] <-B-> [server02]
client01
может получить доступ к порту 9300 на server01
(подключение A
). server01
может получить доступ только к порту 9300
на server02
(подключение B
)через ssh. Каков наилучший способ заставить весь трафик на порту 9300
идти на server01
порт ?9300
server02
Я могу успешно сделать это с помощью туннеля ssh из client01
в server01
в server02
, но я не хочу запускать ssh на client01
. Когда я ssh из server01
в server02
перенаправляю порт 9300 ( ssh -g -L9300:localhost:9300 server02
на server01
), это не работает — я использую неправильную команду?
EDIT: добавлено, что server02 доступен только через ssh
решение1
Это можно сделать с помощью правила DNAT iptables — что-то вроде:
iptables -A PREROUTING -p tcp -d x.x.x.x --dport 9300 -j DNAT --to-destination y.y.y.y:9300
Замените IP-адрес server01 x.x.x.x
на адрес server02 y.y.y.y
и все готово.
Конечно, все это предполагает, что вы используете iptables на server01. Это также предполагает, что server02 использует server01 для маршрутизации трафика обратно в Интернет. Если server02 не использует, то это не делает то, что вам нужно.
Изменить с учетом возможности подключения между машинами только по SSH:
Ваша командная строка для переадресации порта SSH выглядит нормально, за исключением того, что вам нужен пробел между "L" и "9300". Вам также нужно убедиться, что компьютер server01 будет принимать входящие соединения на порт 9300. Посмотрите на цепочку INPUT вашего iptables в таблице фильтров ( iptables -L INPUT
), чтобы убедиться, что трафик будет разрешен.
Вам также придется постоянно следить за состоянием этого туннеля.