일반적으로 이러한 문제는 한 쌍의 네트워크 인터페이스가 본딩을 통해 하나로 결합된 시스템 RHEL 6.4 서버에서 발생합니다. 이 시스템 IP 주소: 10.7.7.1
. 다음으로 10.7.7.2
포트 3306에서 MySQL 서버에 연결해야 하는 애플리케이션을 실행하는 시스템에서 . 실제로 MySQL은 10.7.7.3
. 응용프로그램의 연결 설정은 하드코드되어 있으므로 변경할 수 없습니다. 그건 통해 들을 수 있어iptables주소 번역을 하세요. 응용 프로그램이 시도했을 때 그렇게 만드는 방법10.7.7.2:3306
iptables가로채서 에 요청을 보내고 10.7.7.3:3306
응답을 다시 받아 애플리케이션에 공급합니까?
답변1
이는 iptables의 NAT 규칙을 사용하여 수행할 수 있습니다.
MySQL 서버가 동일한 호스트에 있는 경우 REDIRECT 규칙을 사용하십시오. 10.7.7.3이 아닌 포트 3306에 대한 모든 연결을 필요한 주소로 리디렉션합니다.
MySQL 서버가 동일한 호스트에 있지 않으면 DNAT 규칙을 사용하십시오.
답변2
가정하면
- .1, .2, .3은 서로 다른 시스템입니다.
- .2와 .3의 IP 주소는 교환할 수 없습니다.
- .2는 Linux를 실행 중입니다.
.2에 추가해야 할 사항은 다음과 같습니다.
-t nat -A PREROUTING -d 10.7.7.2 -p tcp --dport 3306 -j DNAT --to-destination 10.7.7.3
-t nat -A POSTROUTING -d 10.7.7.3 -p tcp --dport 3306 -j SNAT --to-source 10.7.7.2
하지만...
어떤 이유로 .2에서 iptables 규칙을 생성할 수 없거나 .1에서 트래픽을 가로채려는 경우 .1에서 수행해야 할 작업은 다음과 같습니다.
-t nat -A POSTROUTING -d 10.7.7.2 -p tcp --dport 3306 -j DNAT --to-destination 10.7.7.3