Oracle 서버에서는 명확하게 연결할 수 있습니다
sqlplus user/pass@hostremote/SID
내가 터널을 만든다면
ssh -L 1521:localhost:1521 -F -n hostremote -vvv
나에게 줘
debug1: Connection to port 1521 forwarding to localhost port 1521 requested.
debug2: fd 7 setting TCP_NODELAY
debug2: fd 7 setting O_NONBLOCK
debug3: fd 7 is O_NONBLOCK
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug2: channel 2: zombie
debug2: channel 2: garbage collecting
debug1: channel 2: free: direct-tcpip: listening port 1521 for localhost port 1521, connect from 127.0.0.1 port 60882 to 127.0.0.1 port 1521, nchannels 3
debug3: channel 2: status: The following connections are open:
ERROR:
ORA-12537: TNS: connection close
왜?
일반적으로 저는 직접 연결된 서버에서 SSH 터널을 사용합니다.
ORACLESERVER=192.168.0.15
CLIENT=192.168.0.4
클라이언트에서는 터널을 설정하고 localhost의 sqlplus에 연결합니다. 간단합니다.
지금은 상황이 조금 다르고 더 복잡해졌습니다.
PSHYSICAL SERVER=192.168.0.44
VIRTUALMACHINE WITH NAT=192.168.0.45 eth0 10.3.1.1 eth1
ORACLESERVER=virtual machine 10.3.1.4
가상 머신에서 DNAT를 수행했으며 가상 머신에서 telnet 1521을 사용할 수 있으며 tcptraceroute 1521은 성공적인 연결을 반환합니다. 그러나 터널링에 성공하면 TNS 오류가 발생하고 연결이 되지 않습니다.
이것은 방화벽을 사용하여 만드는 것입니다.
forward-ports: port=1521:proto=tcp:toport=1521:toaddr=10.3.1.4
port=1521:proto=udp:toport=1521:toaddr=10.3.1.4
답변1
문제는 Oracle이 초기 연결 후 포트 1521 대신 추가 연결을 열므로 터널이 그런 식으로 작동하지 않는다는 것입니다. 모든 대화를 나누고 서버 네트워크 내에서 여러 연결을 설정할 수 있도록 서버 측에 Oracle Connection Manager를 설정하십시오.
Oracle 설명서(비공개):https://support.oracle.com/rs?type=doc&id=참고:361284.1 음, 거울을 열어보세요:http://blog.itpub.net/161195/viewspace-1053131/
답변2
Oracle TCP 프로토콜은 연결되어 있지 않습니다. 어떤 경우에는 FTP와 유사하게 동작합니다. ei 동적으로 할당된 포트에서 추가 TCP 연결을 열 수 있습니다.
Oracle TCP 프로토콜은 TCP 헤더의 OOB 비트를 사용합니다. 이는 TCP를 TCP로 캡슐화할 때 때때로 문제를 일으킬 수 있습니다.
첫 번째 요점에 대해 질문이 있을 가능성이 높습니다. strace
/를 사용하여 두 번째 연결을 열려고 하는지 tcpdump
알아보세요 .sqlplus