Túnel SSH + Encaminhamento UDP Socat + vários clientes

0

Eu tenho uma máquina Ubuntu executando um daemon de servidor (Unity3d unet game server neste caso) que é projetado para se comunicar com clientes exclusivamente via UDP. Os clientes estão no Windows 7 e no Windows 10. Devido aos requisitos de segurança de rede do cliente, sou obrigado a fazer todas as conexões por meio de um túnel SSH (que transmite apenas pacotes TCP). Eu posso usar o Putty ou o cygwin OpenSSH em clientes, mas nenhum deles parece suportar o recurso -w do túnel do openssh.

Eu configurei com sucesso socat para encaminhar pacotes UDP via TCP entre um único cliente e o servidor. No servidor, seguindo uma versão ligeiramente modificada de as instruções da parte inferior desta página . Sou principalmente um desenvolvedor, e embora eu saiba que uma rede unix suficiente é perigosa, isso está fora do meu conjunto de habilidades.

No servidor estou executando $socat tcp4-listen:7776,reuseaddr,fork udp:localhost:7777

No meu cliente, estou executando $socat -T15 udp-listen:7777,reuseaddr,fork TCP4:localhost:7776 .

Estou, então, executando um túnel SSH de 7776 para localhost: 7776.

Isso funciona bem com um único cliente. No entanto, assim que tento conectar mais de um cliente, ambos os clientes falham. Minha suspeita é que isso ocorre porque socat está agindo como um proxy, então meu servidor vê várias conexões de localhost: 7777 e nem o servidor nem o socat têm informações suficientes para rotear os pacotes UDP de volta para seus originadores.

Isto cheira a um caso de uso ideal para interfaces virtuais ou interfaces fictícias - Acredito que se eu pudesse definir interfaces virtuais / fictícias com IPs únicos, por exemplo: 10.0.0.2, 10.0.0.3, etc, como virtual / dummies e bind uma instância de socat para cada interface virtual e meus clientes configuraram seus túneis SSH com um terminal de 10.0.0. x , eu deveria ser capaz de aceitar um cliente por interface. Obviamente, isso não é escalável, mas eu só preciso de alguns clientes para esse caso de uso.

Estou pensando em uma direção razoável? Se assim for, como faço para rotear os dummies de tal forma que eu possa vincular socat a eles e ter socat produzir pacotes udp de 10.0.0. x : 7777 roteado para localhost: 7777 (e aceitar pacotes de localhost: 7777 a 10.0.0. x )?

Eu percebo que existem maneiras melhores de conseguir isso (por exemplo: uma VPN ou ssf), mas devido aos requisitos do cliente, estou limitado a soluções que são executadas em um túnel SSH. Eu posso fazer um caso para instalar software adicional no servidor, mas toda a comunicação deve ser via TCP através do túnel SSH.

[edit] Parece que uma alternativa possível seria executar o openvpn no servidor, em seguida, tunelar uma conexão do cliente openvpn através do túnel ssh. Isso parece confuso, mas possivelmente mais robusto e extensível do que futzing com socat. Quaisquer pensamentos ou opiniões sobre essas duas possíveis soluções, dadas as minhas exigências? [/ Edit]

    
por Alterscape 16.06.2017 / 17:58

1 resposta

0

Você deve olhar para ssh -w - ele faz exatamente isso: construir o túnel e configurar interfaces virtuais nas duas extremidades.

ssh -w x:y user@host network-script.sh com network-script.sh configurando as interfaces do lado do servidor fará com que seja completamente automático.

    
por 16.06.2017 / 18:13