O aplicativo da máquina host não consegue consultar o banco de dados Cassandra da máquina convidada

O aplicativo da máquina host não consegue consultar o banco de dados Cassandra da máquina convidada

Ambiente

Hospedar:

  • Ubuntu 18.04 Desktop 64 bits
  • Código do Visual Studio + CassandraCSharpDriver

Convidado:

  • Servidor Ubuntu 18.04 64 bits
  • Java e Cassandra instalados
  • Nó único
  • Replicação 1
  • Consistência 1
  • Serviço Cassandra em execução
  • keyspace e tabela criada
  • Dados inseridos na tabela
  • Rede Virtual Box para convidados configurados para Bridge.

O problema

Quando executo o código na máquina host, recebo um erro:

user@desktop:~/Desktop/vsc$ dotnet run
Unhandled exception. Cassandra.NoHostAvailableException: All hosts tried for query failed (tried 192.168.0.15:9042: SocketException 'No route to host')
   at Cassandra.Connections.ControlConnection.Connect(Boolean isInitializing)
   at Cassandra.Connections.ControlConnection.InitAsync()
   at Cassandra.Tasks.TaskHelper.WaitToCompleteAsync(Task task, Int32 timeout)
   at Cassandra.Cluster.Cassandra.SessionManagement.IInternalCluster.OnInitializeAsync()
   at Cassandra.ClusterLifecycleManager.InitializeAsync()
   at Cassandra.Cluster.Cassandra.SessionManagement.IInternalCluster.ConnectAsync[TSession](ISessionFactory`1 sessionFactory, String keyspace)
   at Cassandra.Cluster.ConnectAsync(String keyspace)
   at Cassandra.Tasks.TaskHelper.WaitToComplete(Task task, Int32 timeout)
   at Cassandra.Tasks.TaskHelper.WaitToComplete[T](Task`1 task, Int32 timeout)
   at Cassandra.Cluster.Connect(String keyspace)
   at HelloWorld.Program.Main(String[] args) in /home/user/Desktop/vsc/Program.cs:line 15
user@desktop:~/Desktop/vsc$ 

O que eu tentei

Em uma máquina Windows onde a máquina executa o código e o Cassandra no mesmo host sem usar uma VM, o código e o banco de dados funcionam bem, pois o código é capaz de inserir e selecionar no banco de dados sem problemas.

Posso executar ping em ambas as direções sem problemas e o traceroute retorna o seguinte:

Básico:

user@desktop:~$ traceroute 192.168.0.15
traceroute to 192.168.0.15 (192.168.0.15), 30 hops max, 60 byte packets
 1  node1 (192.168.0.15)  0.737 ms  0.694 ms  0.697 ms
user@desktop:~$ 

Com porta:

user@desktop:~$ traceroute 192.168.0.15 -p 9042
traceroute to 192.168.0.15 (192.168.0.15), 30 hops max, 60 byte packets
 1  node1 (192.168.0.15)  0.386 ms  0.388 ms  0.422 ms
user@desktop:~$ 

Abriu o número da porta na VM convidadaiptables -I INPUT 1 -p tcp --dport 9042 -j ACCEPT

Agora recebendo a seguinte mensagem de erro:

user@desktop:~/Desktop/vsc$ dotnet run
Unhandled exception. Cassandra.NoHostAvailableException: All hosts tried for query failed (tried 192.168.0.15:9042: SocketException 'Connection refused')
   at Cassandra.Connections.ControlConnection.Connect(Boolean isInitializing)
   at Cassandra.Connections.ControlConnection.InitAsync()
   at Cassandra.Tasks.TaskHelper.WaitToCompleteAsync(Task task, Int32 timeout)
   at Cassandra.Cluster.Cassandra.SessionManagement.IInternalCluster.OnInitializeAsync()
   at Cassandra.ClusterLifecycleManager.InitializeAsync()
   at Cassandra.Cluster.Cassandra.SessionManagement.IInternalCluster.ConnectAsync[TSession](ISessionFactory`1 sessionFactory, String keyspace)
   at Cassandra.Cluster.ConnectAsync(String keyspace)
   at Cassandra.Tasks.TaskHelper.WaitToComplete(Task task, Int32 timeout)
   at Cassandra.Tasks.TaskHelper.WaitToComplete[T](Task`1 task, Int32 timeout)
   at Cassandra.Cluster.Connect(String keyspace)
   at HelloWorld.Program.Main(String[] args) in /home/user/Desktop/vsc/Program.cs:line 15
user@desktop:~/Desktop/vsc$ 

Pergunta

Como configuro o convidado da VM para obter o código na máquina host para conectar-se ao banco de dados Cassandra? Presumo que o problema esteja acontecendo porque a VM não está configurada corretamente.

Eu me conecto ao servidor usando 192.168.0.15, mas internamente o servidor parece usar 127.0.0.1. Preciso encaminhar alguma conexão de entrada para 127.0.0.1? Como verifico se esse é o caso e como encaminho a porta, se necessário? Assim como quando estava testando o código no Windows onde o código e o servidor eram a mesma máquina, eu estava me conectando à porta local 127.0.0.1.

informação relacionada