Надайте доступ серверу до Інтернету через підключення клієнта через 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.