Как использовать ssh-туннель через NAT «один-к-одному»

Мне нужен SSH-туннель из моего дома на частный IP 10.4.100.6 , как показано на схеме:

+-------+    +-----------------+  +------------+  +-------------+
|       |    |                 |  |            |  |             |
| Home  +----+ foo.example.com +--+ 10.4.100.5 +--+  10.4.100.6 |
|       |    |                 |  |            |  |             |
+-------+    +-----------------+  +------------+  +-------------+

У меня есть root-доступ на 10.4.100.5 и ] 10.4.100.6 . У меня нет доступа к foo.example.com . Когда я отправляю ssh на foo.example.com , я каким-то образом попадаю на 10.4.100.5 , который является другим хостом. Мы говорим о 4 отдельных хостах. Я предполагаю, что foo.example.com использует NAT один-к-одному.

Я пробовал:

ssh -L 8080:10.4.100.6:80 user@foo.example.com

Не повезло. Есть какие-нибудь советы?

Edit: Оказывается, туннель работает, но не для веб-сокетов. Соединения с ws: // localhost: 8080 не работают с этим:

<snip> WebSocket connection to 'ws://localhost:8080/' failed: Error during WebSocket handshake: Unexpected response code: 200

Сначала я этого не осознавал. Я думал, что соединение просто зависло.

Edit 2: Приношу свои извинения, но я понял это. Я не понимал, что приложение включает в себя 2 сервера: nginx на порту 80 и сервер websocket на порту 8080. Я создал 2 отдельных туннеля SSH, и теперь все работает. Я запутался, потому что выбранный мной локальный порт, 8080, также использовался удаленным сервером websocket.

Резюме: ничего особенного не требуется для создания SSH-туннеля через NAT «один-к-одному».

0
задан 14 September 2020 в 00:01
3 ответа

При условии, что 10.4.100.5 может получить доступ к 10.4.100.6:80 Я не понимаю, почему ваш ssh -L 8080: 10.4.100.6: 80 (скрыто) не будет работать.

Можете ли вы использовать telnet / curl 10.4.100.6:80 из 10.4.100.5 ? Если нет, возможно, брандмауэр настроен на 10.4.100.6 , запрещающий доступ к порту 80, разрывая соединение, но не отклоняя его.

1
ответ дан 4 January 2021 в 09:20

Есть ли возможность использовать sshuttle ? - https://github.com/sshuttle/sshuttle

Это может быть более простой вариант прокси, особенно с учетом отсутствия доступа к удаленной цели SSH.

1
ответ дан 4 January 2021 в 09:20

Вы можете использовать функцию ProxyJump в OpenSSH, чтобы сделать это чисто.

ssh -J user@foo.example.com -L 8080:localhost:80 user@10.4.100.6

Добавление -J (скрыто) указывает ssh подключиться к пункт назначения через переадресацию портов, настроенную динамически на foo.example.com. Если у вас не настроены ключи ssh, вам будет предложено ввести пароли для foo.example.com и 10.4.100.6.

Если это сработает для вас, вы можете добавить его в свой локальный ~ /.ssh/ssh_config, чтобы упростить задачу. Например,

Host 10.4.100.6
    ProxyJump user@foo.example.com

Тогда вам не нужно будет указывать -J в командной строке для подключения к 10.4.100.6.

1
ответ дан 4 January 2021 в 09:20

Теги

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