Имеется изолированная локальная сеть (полностью изолированная, нет доступа извне, а извне нет доступа к ней). Но один из серверов имеет 2 сетевых адаптера, один из которых находится в нашей локальной сети разработчика, а другой - в изолированной локальной сети.
Цель состоит в том, чтобы из локальной сети разработчиков получить доступ к определенным службам TCP внутри изолированной локальной сети. Например. из локальной сети разработчика (например, dev-laptop-01) Я хочу получить доступ к службе SSH сервера внутри изолированной локальной сети (например, iso-server-01), сервер, имеющий роль «шлюза» (например, gw-server), должен предоставить службу SSH в локальной сети разработчика и перенаправить / перенаправить ее поставщику службы в изолированной локальной сети.
Я хотел использовать iptables
со следующей конфигурацией:
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 10022 -j DNAT --to iso-server-01
iptables -t nat -A POSTROUTING -p tcp -m tcp -s iso-server-01 --sport 22 -j SNAT --to-source gw-server
sysctl net.ipv4.ip_forward=1
Но это не работает. С моего dev-laptop-01, когда я выдаю ssh -p 10022 gw-server
Я получаю Connection timed out
ошибка.
Как лучше всего подойти к этой проблеме?
PS: Я использую RHEL 6.6.
По iptables ответа не нашел.
Но это другие альтернативы:
SSH
Вероятно, можно «связать» ssh-соединения для достижения вышеуказанного результата, когда SSH является желаемой службой, но это не работает в других случаях.
Возможно использование SSH-туннелирования. Что-то вроде следующего (для выполнения на gw-сервере, обратите внимание, что gw-server-dev разрешает IP-адрес локальной сети разработчика):
ssh -f -N -L gw-server-dev:10022:iso-server-01:22 <user>@gw-server-dev
Это решение отличается элегантностью: даже если в изолированном сервисе не используется шифрование, мы получаем преимущество шифрования благодаря SSH. И он должен работать с любой службой TCP.
Обратной стороной является то, что в случае сбоя этой команды нет простого способа ее перезапустить. Но ssh довольно стабилен.
xinet
Я также обнаружил, что с помощью xinet можно достичь того, что я хочу для любой службы TCP.
Вот пример файла:
service iso-server-01-ssh
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
redirect = iso-server-01 22
log_on_failure += USERID
}
(Необходимо, чтобы в / etc / services был порт, соответствующий iso-server-01-ssh. В нашем примере это 10022).
iptables
Там у меня нет ответа. Так что, если у вас есть такой, я отмечу ваш ответ как принятый. Мой ответ предназначен для тех, кто ищет аналогичное решение, но кого бы устраивали альтернативы (меня они тоже устраивают, я просто «разочарован» тем, что не смог заставить iptables делать то, что я хотел ;-)) .