Como configurar domínios específicos são encapsulados em outro servidor

8

Estou trabalhando em uma universidade como assistente de pesquisa. Muitas vezes, eu gostaria de conectar os recursos da casa à universidade através de http ou ssh, mas eles estão impedidos de acesso externo. Portanto, eles têm um servidor ssh front-end onde podemos fazer o ssh para e de lá para outros hosts. Para acesso http, eles aconselham a configurar um túnel ssh como este

ssh -L 1234:proxyserver.university.fi:8080 publicsshserver.university.fi

e coloque as configurações de proxy do seu navegador para apontar para a porta 1234

Tudo bem e funcionando, mas eu não gostaria de deixar todo o meu outro tráfego na Internet passar por esse servidor proxy, e toda vez que quero me conectar à universidade, preciso executar essas etapas novamente.

O que eu gostaria:

  • Configure um túnel ssh sempre que eu fizer login no meu computador. Eu tenho um certificado, portanto, nenhuma senha é necessária
  • É possível redirecionar alguns domínios curinga sempre através do servidor ssh primeiro. Assim, quando digito intra.university.fi no meu navegador, de forma transparente, a solicitação passa pelo túnel. Mesmo quando eu quero ssh em outro recurso dentro da universidade

Isso é possível? Para a parte http, acho que talvez eu deva configurar meu próprio proxy transparente local para fazer isso facilmente. E a parte ssh?

Peter Smit
fonte

Respostas:

5

Isso é realmente fácil de fazer. Eu o uso o tempo todo para acessar o banco de dados por trás do nosso servidor web de produção.

1) A primeira parte foi uma pergunta que fiz há pouco .

Você pode usar o apelido em ~ / .bashrc.

Adicione essa linha

alias university_ssh="ssh -L 1234:proxyserver.university.fi:8080 publicsshserver.university.fi" 

E recarregue o arquivo bashrc com source ~ / .bashrc

E agora você só precisa digitar university_ssh para ssh no servidor de banco de dados.

2) Em seguida, você precisa editar seu arquivo / etc / hosts para adicionar university.loc (.loc é um TLD falso) e apontar para localhost :: 1234. Por exemplo, meu arquivo hosts fica assim:

127.0.0.1       localhost
127.0.1.1       ubuntu-64-desktop
127.0.0.1       code2design.loc    localhost

e Agora posso digitar code2design.loc para acessar minha versão local do code2design.com no meu PC.

3) Última, altere o proxy do navegador para nada, pois você não precisa mais dele. Desde que você digitou university.loc agora está configurado para usar esse túnel.

Atualizada

Eu tentaria adicionar a porta ao arquivo de hosts ( 127.0.0.1:portou localhost:port) e você também pode alterar o .locTLD para o .fiTLD real se estiver preocupado com a quebra de hosts virtuais.

Então, para você, pode ser assim:

127.0.0.1       localhost
127.0.1.1       ubuntu-64-desktop
127.0.0.1       university.fi    localhost:1234
Xeoncross
fonte
Onde exatamente você está apontando as coisas para a porta 1234? Não vejo que, no exemplo no passo 2
Peter Smit
Essa resposta ainda não é perfeita, mas ainda assim eu a aceito, pois é a melhor e o prazo é em uma hora. Você ainda pode responder minha pergunta acima aqui?
Peter Smit
11
O que a coisa da porta no arquivo hosts faz?
janmoesen
11
Tu es. Gravemente. De man hosts: IP_address canonical_hostname [aliases...]. IMO, esta não é uma solução adequada.
janmoesen
11
Observe que vários hosts para o mesmo endereço IP podem ser colocados apenas em uma linha; portanto, seu exemplo pode ser reescrito como 127.0.0.1 localhost ubuntu-64-desktop university.fi.
Mathias Bynens
7

Eu uso um arquivo PAC (Proxy Auto-Config) para isso. Gostaria de colar o meu aqui, mas a Wikipedia tem um bom arquivo de exemplo .

No seu navegador, aponte a opção "Usar configuração automática de proxy de" para o arquivo (talvez hospedado em um servidor web compartilhado). Funciona em praticamente todos os navegadores meio decentes.

Observe que você ainda precisa configurar seus túneis SSH. (Ou use um ssh -Dproxy SOCKS apenas para determinados hosts, definidos no seu PAC - mas o SOCKS não funciona no Opera.)

EDIT : Certo, como não parece haver muito interesse do seu lado, vou expandir um pouco minha resposta. :-)

Para configurar automaticamente seu túnel SSH sudo apt-get install autosshe coloque isso no seu crontab:

@reboot autossh -L 1234:proxyserver.university.fi:8080 publicsshserver.university.fi

Como alternativa, você pode colocar o comando ssh no seu ~/.bash_profileou ~ / .bashrc.

Agora, para determinar quais domínios proxy e quais conectar-se diretamente, crie um PAC como este:

function FindProxyForURL(url, host)
{
    var httpProxy = 'PROXY 127.0.0.1:1234';
    var noProxy = 'DIRECT';
    var default_ = noProxy;

    // Host matches that use the HTTP proxy.
    var httpProxyMatches = [
        'intranet.university.fi',
        'webmail.university.fi',
        '*yourwildcard*'
    ];
    // Check all host patterns and network masks.
    for (var i = 0; i < httpProxyMatches.length; i++) {
    if (shExpMatch(host, httpProxyMatches[i])) {
        alert('HTTP ' + httpProxy + ' match for host: ' + host + '; url: ' + url);
        return httpProxy;
    }
    alert('DEFAULT ' + default_ + ' for host: ' + host + '; url: ' + url);
    return default_;
}
alert('PAC loaded at ' + new Date() + '.');

Em seguida, vá para as configurações avançadas de rede do Firefox e aponte para esse arquivo. Se for bem-sucedido, você verá a mensagem "PAC carregado" no seu console JavaScript (Ctrl + Shift + J). Se você não estiver usando o Firefox, remova as linhas de "alerta".

Este é um PAC bastante básico, mas deve ajudá-lo no seu caminho. A mina também analisa máscaras de rede IP para determinar serviços internos / externos etc.

Deixe-nos saber como você está se saindo.

janmoesen
fonte
1

Isenção de responsabilidade : não testei isso, apenas uma ideia.

Talvez você possa forçar os domínios privados a usar o 'proxy' simplesmente editando a configuração do host em seu sistema local. Se você apontar manualmente todos os domínios para localhost e tiver o túnel estabelecido, não:

http://privateaccess.tld:1234

Envie uma solicitação para:

localhost:1234

O que é realmente uma porta para o servidor proxy da rede interna. A solicitação ainda deve ser para o mesmo domínio, portanto, o servidor proxy deve responder corretamente.

Ou é o que me parece. Mais uma vez, apenas uma ideia.

Tim Lytle
fonte
Sim, isso funcionaria, mas não é fácil e bonito. E quanto ao ssh? Isso passaria?
quer
Você está atravessando o túnel do ssh?
precisa
Quanto mais fácil, realmente não parece tão difícil, você lista os domínios internos no arquivo hosts e abre um túnel ssh.
precisa
Sim, eu atravesso um túnel. O host para o qual eu quero ssh não está disponível na Internet, mas está disponível no host "DMZ"
Peter Smit
1

FoxyProxy ( http://foxyproxy.mozdev.org/ ) resolve o problema de seleção automática de proxy. Ele foi projetado exatamente para esse fim, mas é, é claro, específico para o Firefox.

ÁRVORE
fonte
0

Tente configurar o proxy SOCKS com ssh ( ssh -D <portnumber> publicsshserver.university.fi) e configure seu navegador para usar 127.0.0.1 e <portnumber>como proxy. Você pode adicionar domínios para os quais ele deve ou não usar o proxy. Para outros serviços (por exemplo, vnc), você pode usar tsocks para fazê-lo usar seu túnel.

Jimmy Hedman
fonte
Como posso "adicionar domínios"? Nas configurações do meu navegador? O Opera suporta apenas padrões de exclusão. E as conexões ssh. Como posso definir lá para usar o proxy sox?
61110 Peter Smit
Eu não usei o Opera, então não sei dizer. Talvez você possa usar o tsock para isso também. Use "tsocks ssh <sitethatneedtheproxy>" para ssh para determinar a necessidade através do proxy socks.
precisa
Opera ainda não suporta proxies SOCKS, receio. Deparamos com esse problema no início desta semana. No entanto, ele suporta o PAC. Veja minha resposta. :-)
janmoesen 11/03/10
0

Você provavelmente deve usar uma VPN em vez de apenas ssh para esse problema. Olhe para o openvpn.

txwikinger
fonte
Sinto muito, mas eu não posso instalar nada no servidor da universidade (e eles não querem VPN)
Peter Smit
0

A maneira mais fácil seria adicionar o comando ssh que se conecta ao servidor ao seu ~ / .bash_profile

Em seguida, crie um perfil separado no firefox que use essa configuração de proxy fazendo

$ firefox -profilemanager

Você pode criar um atalho na área de trabalho que seja executado

firefox -P ProfileName -no-remote

O comando no-remote permite executar várias instâncias do firefox simultaneamente. Certifique-se de definir as configurações de proxy neste novo perfil.

Dessa forma, sempre que quiser qualquer recurso da universidade, basta abrir esse perfil alternativo do Firefox.

teknikqa
fonte