Conceder acesso ao servidor na Internet, via cliente conectado por SSH


17

Posso usar meu computador doméstico A para conectar-me por SSH a um servidor B onde o acesso à rede externa está bloqueado. Em outras palavras, todas as solicitações de Internet de B geram um erro: A rede está inacessível . Posso redirecionar todas essas solicitações para passar pelo computador A que possui acesso irrestrito à Internet?

O servidor B é um servidor que hospeda um dos meus sites. Quero baixar arquivos para instalar algum software. Mas a conexão está bloqueada. Eu era capaz de transferir arquivos, mas foi complicado porque as versões de software são diferentes em A e B , então as dependências onde diferente e é necessário arquivos diferentes em A e B .

Pesquisei na Internet e parece que preciso de um túnel reverso. Mas só encontrei soluções em que uma porta é redirecionada . Mas não é o que eu preciso, pois não quero que B acesse A, mas a Internet.


se o autor da pergunta abaixo vir esse comentário, você gostaria de nos informar por quê? Não vejo nada de errado com isso, mesmo que a resposta "não seja possível".
— strugee


O ssh permite que você faça o encaminhamento de porta local ou remoto - ou seja, quando um aplicativo em B tenta abrir uma porta local X, que é encaminhada para A como uma tentativa de abrir qualquer porta que você especificou. Portanto, A é livre para encaminhar a solicitação de conexão para a Internet. Você não mencionou quais portas ou protocolos você está tentando usar, o que facilitaria a construção de respostas detalhadas.
— precisa saber é o seguinte

Estou tentando usar o compositor , então deve haver solicitações HTTP e HTTPS para o github para fazer o download dos pacotes.
— AL

Respostas:


8

Você pode executar um proxy no Computador A ao qual o computador B se conectaria para acessar a Internet através do Computador A.

Algo assim

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

Instale um proxy como o squid em A que escute na porta 3128 e, em seguida, você pode ssh no servidor com isso -
ssh -L 3128:127.0.0.1:3128 user@B

Isso permitirá que B acesse a Internet através de A


Uma vez conectado a B, como as solicitações à Internet serão redirecionadas para A? Não há configuração para mudar?
— AL

Você precisará definir um servidor proxy em B para 127.0.0.1:3128
— Lawrence

10

Basta adicionar mais alguns passos claros às respostas do @Lawrence e do @ SpiRail.

Faça a configuração da seguinte maneira:

Configuração no host A:

  1. Instale o servidor proxy Squid no host A. Por padrão, o Squid escuta na porta 3128.
    yum install squid
  2. Comente o http_access deny alldepois adicione http_access allow all/etc/squid/squid.conf
  3. Se o próprio host A usar algum proxy, diga 10.140.78.130:8080 para conectar-se à Internet e adicione esse proxy da /etc/squid/squid.confseguinte maneira:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

Configuração no host B:

  1. Adicione as seguintes entradas ao / etc / environment
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

Agora nossa configuração está concluída.

Criando túnel SSH com encaminhamento de porta remota

  1. Execute o seguinte comando SSH no Host A
    ssh -R 3129:localhost:3128 user@HostB

    Se você deseja criar um túnel SSH persistente, pode usar o autossh da seguinte maneira:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    Para que o comando autossh acima funcione, você deve ter as chaves SSH configuradas do HostA para o HostB

  2. Isso permitirá que o Host B acesse a Internet através do Host A.

Verificando a internet:

  1. Execute o seguinte comando no Host B
    wget https://google.com

Diagrama de fluxo de tráfego : insira a descrição da imagem aqui


5

A resposta de @ Lawrence foi boa o suficiente para que eu conseguisse entender tudo. Mas aqui estão as etapas mais detalhadas que eu usei.

Eu usei isso para usar o meu laptop dongle 4G para rotear a Internet para um raspberry pi com uma conexão de linha fixa a um roteador wifi.

Se o seu host for um mac: instale o squidman http://squidman.net/squidman/

(não apenas o squid genérico, tive muitos problemas ao construí-lo) As configurações padrão pareciam boas o suficiente para mim.

conecte ao 4G conecte ao wifi - configure um ip estático no seu wifi e remova o endereço do gateway (a menos que você esteja fazendo coisas avançadas), caso contrário, você terá duas rotas padrão e isso é muito irritante. - verifique se o seu roteador wifi não está usando o mesmo intervalo 192.168.xy (configure um "x" diferente neste caso)

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

No PI

export http_proxy=http://localhost:8080

com visudo adicione o texto:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Agora o wget funcionará e o sudo apt-get também poderá instalar pacotes.

Se você quiser o git, também está aqui: /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy


Obrigado pela sua resposta. Qual é o papel visudodaqui? Onde você adiciona o texto? (Eu não posso usar sudona minha hospedagem na Web)
— AL

Eu realmente não entendo sua pergunta, mas se você apenas digitar visudo no terminal (pode precisar de um 'sudo visudo'), poderá adicionar a linha de texto na parte inferior.
— SpiRail 18/03/16

não há acesso root na minha hospedagem na Web.
— AL

Foi há muito tempo agora. Porém, a partir da memória, a edição visualiza o arquivo sudoers e a linha que está sendo adicionada significa que essas variáveis ​​de ambiente do usuário são mantidas ao digitar sudo. Se você não pode executar o sudo, não precisa dessa etapa.
— SpiRail
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.