Прозрачное туннелирование 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)[12105estiveВ попытке сделать это я добавил следующее в свой / 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 команды выглядят так?

0
задан 5 September 2019 в 19:27
1 ответ

Команда iptables , которую вы могли бы использовать в этом случае, имеет следующий вид:

iptables -t nat -A OUTPUT -p tcp -d 127.0.0.2 --dport 80 -j DNAT --to-destination 127.0.0.1:8000

Обратите внимание, что при использовании вышеуказанного правила вам не нужно привязываться к любому адресу в вашем Конфигурация SSH. Вы можете просто использовать:

LocalForward 8000 some-service:80

iptables обрабатывает перенаправление на адрес обратной связи по умолчанию 127.0.0.1.


Я тестировал это с помощью ipify.org . Они предоставляют простой API для возврата IP-адресов, с которых отправляются запросы (которые я удалил из вывода).

Все эти команды выполняются на клиентском компьютере SSH с активным подключением к серверу SSH, инициированным следующей командой:

$ ssh -L 8000:api.ipify.org:80 <remote host>

Вот правило iptables :

$ sudo iptables -n -t nat -L OUTPUT
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  0.0.0.0/0            127.0.0.2            tcp dpt:80 to:127.0.0.1:8000

С хостами , туннель SSH используется:

$ cat /etc/hosts | grep ipify
127.0.0.2       api.ipify.org
$ echo $(curl -s api.ipify.org)
<remote host IP address>

Если запись hosts закомментирована, туннель SSH не используется:

$ cat /etc/hosts | grep ipify
#127.0.0.2      api.ipify.org
$ echo $(curl -s api.ipify.org)
<client machine IP address>
1
ответ дан 4 December 2019 в 15:37

Теги

Похожие вопросы