Предоставить серверу доступ в интернет через клиентское соединение по SSH

17

Я могу использовать свой домашний компьютер A для подключения по SSH к серверу B, где доступ к внешней сети заблокирован. Другими словами, все запросы в Интернет из B выдают ошибку: сеть недоступна . Могу ли я перенаправить все эти запросы для прохождения через компьютер A, который имеет неограниченный доступ к Интернету?

Сервер B - это сервер, на котором размещен один из моих веб-сайтов. Я хочу скачать файлы, чтобы установить программное обеспечение. Но соединение заблокировано. Я был в состоянии передать файлы, но это было сложно, потому что версии программного обеспечения отличаются на A и B , поэтому зависимости были разными, и для A и B требовались разные файлы .

Я искал в интернете, и мне кажется, что мне нужен обратный туннель. Но я нашел только решения, когда порт перенаправлен . Но это не то, что мне нужно, так как я не хочу, чтобы Б имел доступ к А, а к Интернету.

Алабама
источник
Если нижестоящий пользователь этих вопросов видит этот комментарий, не могли бы вы сообщить нам, почему? Я не вижу в этом ничего плохого, даже если ответ «невозможно».
стружка
Возможный дубликат unix.stackexchange.com/questions/111972/…
Лоуренс
ssh позволяет вам выполнять локальную или удаленную переадресацию портов - т.е. когда приложение на B пытается открыть локальный порт X, оно перенаправляется на A как попытку открыть любой указанный вами порт. Так что А может пересылать этот запрос на соединение в Интернет. Вы не упомянули, какой порт (ы) или протоколы вы пытаетесь использовать, что облегчит построение подробных ответов.
Конюшня
Я пытаюсь использовать composer , поэтому это должны быть запросы HTTP и HTTPS к github для загрузки пакетов.
AL

Ответы:

8

Вы можете запустить прокси на компьютере A, к которому затем подключится компьютер B, чтобы получить доступ к Интернету через компьютер A.

Что-то вроде этого

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

Установите прокси, такой как squid, на A, который прослушивает порт 3128, и затем вы можете подключиться к серверу ssh с помощью этого -
ssh -L 3128:127.0.0.1:3128 user@B

Это позволит B получить доступ к Интернету через A

Лоренс
источник
После подключения к B, как запросы в Интернет будут перенаправлены на A? Там нет конфигурации, чтобы изменить?
AL
Вам нужно установить прокси-сервер на B на 127.0.0.1:3128
Лоуренс,
10

Просто добавьте еще несколько четких шагов к ответам @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 с хоста A
    ssh -R 3129:localhost:3128 user@HostB

    Если вы хотите создать постоянный SSH-туннель, вы можете использовать autossh следующим образом:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    Чтобы вышеуказанная команда autossh работала, у вас должна быть настроена настройка SSH Keys от HostA до HostB

  2. Это позволит хосту B получить доступ к Интернету через хост A.

Проверка интернета:

  1. Запустите следующую команду с хоста B
    wget https://google.com

Диаграмма транспортных потоков : введите описание изображения здесь

Dhiru
источник
5

Ответ @Lawrence был достаточно хорош для меня, чтобы все обдумать. Но вот более подробные шаги, которые я использовал.

Я использовал это для использования моего ноутбука 4g ключ для маршрутизации Интернет на Raspberry Pi с фиксированной линией связи с Wi-Fi маршрутизатором.

Если ваш хост - Mac: установите squidman http://squidman.net/squidman/

(не только общий squid, у меня было слишком много проблем с его сборкой) Настройки по умолчанию мне показались достаточно хорошими.

подключиться к 4g подключиться к Wi-Fi - настройте статический 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

с помощью visudo добавьте текст:

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

SpiRail
источник
Спасибо за Ваш ответ. Какова роль visudoздесь? Где вы добавляете текст? (Я не могу использовать sudoна своем веб-хостинге)
AL
Я не совсем понимаю ваш вопрос, но если вы просто наберете visudo в терминал (вам может понадобиться sudo visudo), вы можете добавить строку текста внизу.
SpiRail
на моем веб-хостинге нет root-доступа.
AL
Это было очень давно. Но из памяти visudo редактирует файл sudoers, и добавляемая строка означает, что эти переменные среды пользователя сохраняются при вводе sudo. Если вы не можете сделать sudo, то вам этот шаг все равно не нужен.
SpiRail