CentOS 서버 간의 비공개 연결을 디버깅하려고 합니다.
서버 1(웹)에서 서버 2(MySQL)로 MySQL에 연결하려고 합니다.
두 장치 모두에서 네트워크 장치를 설정했습니다 firewalld
. 장치를 영역 ens10
에 추가했습니다.trusted
서버 2에서는 mysql
서버를 서비스로 추가했습니다.firewalld
서버 1에서 포트를 열었습니다.3306
server1의 명령
$ firewall-cmd --zone=trusted --change-interface=ens10 --permanent
$ firewall-cmd --zone=trusted --permanent --add-port=3306/tcp
$ firewall-cmd --reload
server2의 명령
$ firewall-cmd --zone=trusted --change-interface=ens10 --permanent
$ firewall-cmd --zone=trusted --add-service=mysql --permanent
$ firewall-cmd --reload
디버그
서버 2
$ sudo netstat -tulpn | grep LISTEN
tcp 0 0 10.0.0.4:3306 0.0.0.0:* LISTEN 920/mysqld
tcp6 0 0 :::33060 :::* LISTEN 920/mysqld
이제 이상한 것들이 (적어도 나에게는)
서버 1의 명령
$ telnet 10.0.0.4
Trying 10.0.0.4...
telnet: connect to address 10.0.0.4: No route to host # same goes for 3306 port
$ ping -c2 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_seq=1 ttl=63 time=0.788 ms
64 bytes from 10.0.0.4: icmp_seq=2 ttl=63 time=0.589 ms
--- 10.0.0.4 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 22ms
rtt min/avg/max/mdev = 0.589/0.688/0.788/0.102 ms
무슨 일이 일어난 것 같나요? 어떤 아이디어가 있나요?
답변1
서로 다른 것을 테스트하고 있기 때문에 서로 다른 결과를 얻을 수 있습니다.
ICMP를 사용한 핑(man ping)
ping은 ICMP 프로토콜의 강제 ECHO_REQUEST 데이터그램을 사용하여 호스트나 게이트웨이에서 ICMP ECHO_RESPONSE를 발생시킵니다. ECHO_REQUEST 데이터그램(ping)에는 IP 및 ICMP 헤더가 있고 그 뒤에 구조체 timeval이 오고 패킷을 패딩하는 데 사용되는 패딩 바이트 수가 있습니다.
반면 Telnet은 TELNET 프로토콜(보통 포트 23/tcp)을 사용합니다(man telnet).
telnet 명령은 TELNET 프로토콜을 사용하여 다른 호스트와 통신하는 데 사용됩니다.
@panki가 쓴 것처럼 MySQL 서버를 실행하는 서버에서 포트 3306을 열어야 합니다.
telnet 3306
그런 다음 서버 1에서 테스트합니다.
답변2
문제는 --permanent
옵션 인터페이스를 변경하지 않고 public
인터페이스를 다시 설정하지 않는 것입니다.eth0
지금 설정하세요
firewall-cmd --permanent --zone=trusted --change-interface=ens10
아니요
firewall-cmd --permanent --zone=public --change-interface=eth0
firewall-cmd --reload
실행되면 변경사항이 손실됩니다.
귀하의 답변과 의견에 감사드립니다.