Прозрачное ssh-туннелирование

Прозрачное ssh-туннелирование

У меня есть SSH-туннель, определенный в /etc/ssh/ssh_config. Он содержит:

LocalForward 0.0.0.0:8000 some-service:80
LocalForward 0.0.0.0:8001 some-other-service:80

Я бы все равно хотел иметь возможность доступа к туннелям через их оригинальные DNS-имена (например, curl some-serviceэто должно работать, вместо того, чтобы использовать curl 0.0.0.0:8000)

В попытке сделать это я добавил в свой /etc/hostsфайл следующее:

127.0.0.2 some-service
127.0.0.3 some-other-service

Теперь, я думаю, мне нужны iptablesкоманды, которые будут делать следующее:

When I see a request to 127.0.0.2:80 I should proxy it to 127.0.0.1:8000
When I see a request to 127.0.0.3:80 I should proxy it to 127.0.0.0:8001

Таким образом, curl some-serviceбудет разрешен 127.0.0.2(через /etc/hosts, который в свою очередь будет проксирован на 127.0.0.1:8000(через iptables), который в свою очередь попадет some-service:80(через туннель ssh)


Вопрос: Мне кажется, что должен быть более простой способ добиться этого? Если нет, то как будут iptablesвыглядеть команды?

решение1

Использоватьssh DynamicForwardвозможность настроить прокси-сервер Socks, добавив это в свой файл .ssh/config:

DynamicForward localhost:8000

Затем скажите curl использовать SOCKS:

curl --socks5 localhost:8000 ...

Есть и другие способы использования curlносков; см.документация.

решение2

Не уверен, что здесь правильный этикет (закрыть вопрос? отметить как дубликат?), но у меня есть принятый ответ на этот вопрос здесь:

https://serverfault.com/questions/982063/transparent-ssh-tunneling

Связанный контент