- Instalei o Db2 v11.5.7.0 no Linux/x86_64 dentro do meu PC virtual usando o VirtualBox no Windows 10.
- Eu criei banco de dados com o nome TEST1
- Eu me conectei ao banco de dados usando o soquete Unix:
db2 connect to TEST1
e a conexão foi concluída com sucesso. - Verifique a configuração DB2COMM:
db2set DB2COMM
e a saída é DB2COMM=TCPIP - Apenas para garantir que a conexão TCP/IP funcione com o Db2, criei o nó local e o banco de dados do catálogo:
db2 catalog tcpip node loctcp remote localhost server 50000
db2 catalog database test1 as tcptest1 at node loctcp
db2 terminate
db2 connect to tcptest1 user db2inst1 using <password>
e a conexão foi concluída com sucesso.
- Agora, no meu PC VirtualBox Windows 10 host, defino o encaminhamento de porta Host Port: 60127 e Guest Port: 50000.
- No meu PC com Windows:
netstat -an -p tcp | find ":60127"
posso ver que a conexão está no estado LISTENING. - No meu PC com Windows:
db2 catalog tcpip node remtcp remote localhost server 60127
db2 catalog database test1 as tcptest1 at node remtcp
db2 terminate
- No meu PC com Windows, conecte-se ao banco de dados
db2 connect to tcptest1 user db2inst1 using <password>
PROBLEMA: Parece que a conexão trava. Após alguns minutos, recebo erro no cliente Db2:
SQL30081N Foi detectado um erro de comunicação. Protocolo de comunicação utilizado: "TCP/IP". API de comunicação em uso: "SOCKETS". Local onde o erro foi detectado: "127.0.0.1". Função de comunicação detectando o erro: "recv". Código(s) de erro específico do protocolo: "10054", "*", "0". SQLSTATE=08001
- Tentando entender o problema. No servidor Linux: a) Verifiquei o firewall e está desabilitado. b) IPv6 está desabilitado c) Db2 está escutando na porta 50000 usando IPv4
- Wireshark no Windows ouvindo a porta 60127. a) A conexão TCP é estabelecida b) A conexão Db2 DRDA nunca aparece.
- Tcpdump no servidor Linux capturando tráfego de rede de 50.000 portas. a) A conexão TCP é estabelecida b) A conexão Db2 DRDA nunca aparece.
Parece que algo está errado dentro da máquina virtual Linux, mas as etapas 4 e 5 devem estar bem com a conexão TCP/IP do Db2.
Alguma idéia do que mais para verificar por que a conexão do cliente Db2 não funciona?
PS Eu tenho exatamente a mesma instalação com Db2 v11.1 e conexão Db2 do meu PC está funcionando bem.
Eu já resolvi o problema. Era problema de firewall.
Minha suposição no passo 10 estava errada. Eu só verifiquei as regras do iptables:
que tendo PERMITIDO para todas as políticas, então eu assumi que o firewall está desabilitado (ou não tem efeito).
Mas havia outro serviço firewalld firewall habilitado e em execução:
Eu parei e desativei:
Ou, em vez dos três comandos acima, eu poderia adicionar uma exceção de firewall para permitir a porta 50000 do meu serviço Db2:
Nota: Meus passos 11 e 12 foram suposições erradas. Analisei os pacotes de rede com mais detalhes. Vejo que apenas o pacote TCP SYN foi recebido do cliente Db2 Windows e não houve resposta TCP SYN/ACK da máquina do servidor Db2 de volta ao cliente. Não havia conexão TCP estabelecida (porque estava bloqueada por firewall), obviamente não poderia haver nenhum protocolo DRDA estabelecido, devido à dependência da conexão TCP.