Надайте доступ серверу до Інтернету через підключення клієнта через SSH


18

Я можу використовувати свій домашній комп'ютер A для підключення через SSH до сервера B, де доступ до зовнішньої мережі заблокований. Іншими словами, всі запити до Інтернету з B кидають помилку: Мережа недоступна . Чи можу я переспрямовувати всі ці запити, щоб пройти через комп'ютер A, який має необмежений доступ до Інтернету?

Server B - це сервер, на якому розміщений один з моїх веб-сайтів. Я хочу завантажити файли, щоб встановити якесь програмне забезпечення. Але зв’язок заблокований. Я був в змозі передавати файли , але це було складно , тому що версії програмного забезпечення можуть відрізнятися від А і В , тому в залежності , де різні і потрібно різні файли на A і B .

Я шукав в Інтернеті і, здається, мені потрібен зворотний тунель. Але я знайшов рішення лише там, де порт перенаправлений . Але це не те, що мені потрібно, оскільки я не хочу, щоб B мав доступ до А, а до Інтернету.


якщо спонсор цих питань бачить цей коментар, ви не хотіли б повідомити нам чому? Я не бачу в цьому нічого поганого, навіть якщо відповідь "неможлива".
strugee


ssh дозволяє вам здійснювати або локальне, або віддалене переадресація портів - тобто, коли програма на B намагається відкрити локальний порт X, він передається до A як спроба відкрити будь-який порт, який ви вказали. Тоді A може вільно переслати цей запит на з'єднання в Інтернет. Ви не згадали, який порт (и) або протоколи ви намагаєтесь використовувати, що полегшить побудову детальних відповідей.
Stabledog

Я намагаюся використовувати композитор , тому для завантаження пакетів у Github повинні бути запити HTTP та HTTPS.
AL

Відповіді:


8

Ви можете запустити проксі-сервер на комп’ютері А, до якого потім підключиться комп'ютер B для доступу до Інтернету через комп’ютер А.

Щось на зразок цього

             +----------+            +-----------+
             |          |+----SSH+-->|           |
             |     A    |            |    B      |
             |+--------+|            |           |
  Internet <-++-+PROXY<++<SSH Tunnel--+          |
             |+--------+|            |           |
             +----------+            +-----------+

Встановіть проксі-сервер типу squid на A, який прослуховується на порту 3128, і тоді ви можете сш на сервер за допомогою цього -
ssh -L 3128:127.0.0.1:3128 user@B

Це дозволить B отримати доступ до Інтернету через A


Як тільки ви підключитесь до B, як запити до Інтернету будуть перенаправлені на A? Немає конфігурації для зміни?
AL

Вам потрібно буде встановити проксі-сервер на B на 127.0.0.1:3128
Лоуренс

11

Просто додайте ще кілька чітких кроків до відповідей @Lawrence та @ SpiRail.

Виконайте налаштування наступним чином:

Налаштування на хості A:

  1. Встановіть проксі-сервер Squid на хості A. За замовчуванням Squid прослуховує порт 3128.
    yum install squid
  2. Прокоментуйте http_access deny allдодавання http_access allow allв /etc/squid/squid.conf
  3. Якщо хост A сам використовує якийсь проксі, скажімо, 10.140.78.130:8080 для підключення до Інтернету, тоді також додайте цей проксі /etc/squid/squid.conf:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

Налаштування на хості B:

  1. Додайте такі записи до / etc / environment
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

Тепер наша установка завершена.

Створення тунелю SSH з віддаленою переадресацією порту

  1. Виконайте наступну команду SSH від Host A
    ssh -R 3129:localhost:3128 user@HostB

    Якщо ви хочете створити стійкий тунель SSH, ви можете використовувати autossh наступним чином:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    Щоб вище команда autossh працювала, вам слід встановити SSH-ключі від HostA до HostB

  2. Це дозволить хосту B отримати доступ до Інтернету через хост А.

Перевірка в Інтернеті:

  1. Виконайте наступну команду від хоста B
    wget https://google.com

Схема потоку руху : введіть тут опис зображення


5

Відповідь @Lawrence була досить хорошою для мене, щоб все це знищити. Але ось більш детальні кроки, які я використав.

Я використовував це для використання своїх ноутбуків 4g dongle для маршрутизації Інтернету до малинового пі з фіксованим підключенням до маршрутизатора wifi.

Якщо ваш хост є mac: встановіть squidman http://squidman.net/squidman/

(не тільки загальні кальмари, у мене було занадто багато проблем з його створенням) Налаштування за замовчуванням здалися мені досить добрими.

Підключіться до 4g підключення до wifi - налаштуйте статичний ip на своєму Wi-Fi та видаліть адресу шлюзу (якщо ви не займаєтесь додатковими речами). У іншому випадку ви отримаєте два маршрути за замовчуванням та його дуже дратує. - переконайтеся, що ваш маршрутизатор Wi-Fi не використовує той самий діапазон 192.168.xy (налаштуйте в цьому випадку інше "x")

ssh -R 8080:localhost:8080 pi@<ip address of the pi or target machine>

На ПІ

export http_proxy=http://localhost:8080

з візуалом додайте текст:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Тепер wget буде працювати, і так буде sudo apt-get, щоб ви могли встановлювати пакети.

Якщо ви хочете, щоб git також був тут: /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy


Дякую за вашу відповідь. Яка тут роль visudo? Куди ви додаєте текст? (Я не можу використовувати sudoсвій веб-хостинг)
AL

Я дуже не розумію вашого запитання, але якщо ви просто наберете visudo в термінал (можливо, вам знадобиться "sudo visudo"), ви можете додати рядок тексту внизу.
SpiRail

на моєму веб-хостингу немає кореневого доступу.
AL

Це було давно зараз. Але з пам'яті visudo редагує файл sudoers, а доданий рядок означає, що ці змінні середовища користувача зберігаються під час введення sudo. Якщо ви не можете зробити судо, то вам цей крок все одно не потрібен.
SpiRail
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.