Предоставить серверу доступ в интернет через клиентское соединение по 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

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


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


Спасибо за Ваш ответ. Какова роль visudoздесь? Где вы добавляете текст? (Я не могу использовать sudoна своем веб-хостинге)
AL

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

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

Это было очень давно. Но из памяти visudo редактирует файл sudoers, и добавляемая строка означает, что эти переменные среды пользователя сохраняются при вводе sudo. Если вы не можете сделать sudo, то вам этот шаг все равно не нужен.
SpiRail
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.