Como encaminhar porta por (sub) nome de domínio?

2

Eu tenho esta configuração:

um (Host) FreeBSD 9.2 host server executando o VirtualBox com outro (Guest) FreeBSD guest server . Eu configurei o encaminhamento de porta no Host para o Guest da seguinte forma:

VBoxManage modifyvm "Guest" --natpf1 "guestssh,tcp,,9201,,22"
VBoxManage modifyvm "Guest" --natpf1 "guestmysql,tcp,,9202,,3306"
etc ...

Isso funciona bem. Eu posso por exemplo ssh -p 9201 user@localhost bem.

Também tenho um domínio (digamos example.com ) com registro de endereço DNS apontando para o Host ip. E isso também funciona como esperado ssh -p 9201 [email protected] .

Além do domínio principal, tenho subdomínios como ssh.example.com , mysql.example.com . Agora preciso do tráfego de entrada desses domínios para ser encaminhado para portas específicas na máquina virtual. Então

ssh.example.com:22 -> localhost:9201
mysql.example.com:3306 -> localhost:9202

Para o SSH, isso é facilmente alcançado em um único clinet * nix configurando ~/.ssh/config da seguinte forma:

Host ssh.example.com
    Port 9201

Mas eu preciso encaminhar outros serviços além do SSH (como MySQL, VNC, HTTP, etc.). Além disso, as portas podem mudar, pois adicionarei novas máquinas virtuais a serviços específicos.

Então, minha pergunta é : como posso configurar a máquina Host para encaminhar o tráfego de entrada domain_name:port1 para localhost:port2 ?

Eu tentei configurar o firewall para isso, mas isso obviamente era um caminho errado, como os nomes de domínio resolvem para endereços IP . Configurar um encaminhamento de SSH com ssh -L também é uma má ideia. Então, o que mais resta?

EDIT : Eu posso acessar o registro DNS bruto e reconfigurá-lo, então eu estava pensando se eu pudesse ligar algum tipo de informação ao domínio e pegá-lo com um software proxy no Host lado?

    
por Maciej Sz 10.01.2014 / 15:56

3 respostas

3

Você não pode fazer o encaminhamento de porta com base no nome do host, porque quando alguém se conecta ao seu host, eles não informam qual nome de host eles procuraram para obter seu endereço IP. Tudo o que você sabe é o endereço IP e o número da porta à qual eles se conectaram (e o endereço IP e o número da porta de onde eles estão se conectando).

Você terá que organizar ssh.example.com e mysql.example.com para ter endereços IP diferentes. Ou apenas aceite que você também está encaminhando

mysql.example.com:22 -> localhost:9201
ssh.example.com:3306 -> localhost:9202

A única informação que o cliente está extraindo do registro DNS é o endereço IP, de modo que é a única coisa que você pode alterar para afetar o encaminhamento de porta. (Claro, uma máquina pode ter vários endereços IP, mas se você estiver fazendo isso na Internet, os endereços IP públicos podem estar em falta.)

    
por 10.01.2014 / 16:17
1

É possível, mas a questão é o esforço que vale a pena?

Pode-se criar um software "proxy" que fala o protocolo para os diferentes aplicativos e usa, por exemplo, o cabeçalho Host do http para determinar para qual máquina / porta encaminhar.

Refiro-me ao projeto seaport, que é um proxy http que faz esse encaminhamento internamente em uma máquina. link

    
por 28.04.2014 / 22:45
1

Confira sslh . É uma ferramenta para multiplexar uma única porta para vários serviços. Como outro usuário mencionou, os subdomínios só resolvem para um endereço IP-- O roteamento atual acontece no nível do protocolo.

    
por 15.09.2015 / 17:38