흑우마스터의 마법의 공간

SSH 터널링 미지원 되는 MYSQL에 TCP 포워딩 'socat'을 사용하여 연결하기 본문

프로그래밍/리눅스

SSH 터널링 미지원 되는 MYSQL에 TCP 포워딩 'socat'을 사용하여 연결하기

흑우마스터 2023. 8. 23. 16:24

카페 24에서는 SSH 터널링을 지원하지 않는다.  망할 회사의 서비스는 이 전 개발자가 인스턴스와 PHP, DB를 하나로 묶어서 배포했다.  덕분에 카페 24 MYSQL DB를 사용해야 되게 되었고 PHP 라이믹스로 해놔서 이거 분리도 쉽지 않았다.

 

여기서 고민해볼만한 건 일정 주기로 필요한 데이터를 정리해서 주고 받는 서비스를 카프카던 뭐던 만들어서 서버를 만들려고 했지만 이 건 서버나 장애가 발생했을 때 물려 있는게 많이 생기므로 뭔가 쉬운 방법이 필요했다.

 

특히 AWS ECR을 쓰고 있고 Fargate로 클러스터를 구축해놓았는데 정적 IP를 매번 할당해도 되지만 이 건 또 같은 망에 VPC를 이용해야 되니 절차가 너무 복잡했다. 정적 IP를 연동 안해놓으면 IP가 버전업이 될때마다 계속 바뀌니까 이것도 등록이 쉽지 않다. 글로벌 엑셀레이터인가 뭔가랑 네트워크 로드밸런스 이 쪽도 아니고 NAT 쪽을 추가해줘야 되는데 이 건 또 비용이 크다.

 

 이 클러스터 말고도 다른 곳에서 연동해야 될 때마다 카페 24에 들어와서 정적 IP 를 등록해줘야 되는데 망할 카페 24에서는 허용 하는 IP 갯수가 10개 밖에 안되는 상황(아니 전 개발자님.. 8개나 쓰고 계심 어쩝니까...난 어떻게 쓰라고)에서 VPN 처럼 포워딩만 해주는 애는 없을까 찾아보니 traefik도 그렇지만 리눅스에서는 socat 이라는걸 지원했다. 

 

#socat 명령어를 쳤는데 뭐가 없다면
sudo apt install socat

 

먼저 socat 유틸리티가 있는지 확인이 필요하다.

그리고 해당 서비스의 세션이 끊어지거나 재시작이 되었을 때를 위해 서비스에 대해 명확하게 구현해보자

 

#nano는 텍스트 편집기다
#즉 socat-mysql-proxy.service 라는걸 system 아래 만드는 것이며 이름은 달라도 된다 
sudo nano /etc/systemd/system/socat-mysql-proxy.service

 

명령어를 치면 텍스트 에디터가 열리며 다음과 같이 친다

 

[Unit]
Description=Socat MySQL Proxy
After=network.target

[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:수신받을포트번호,fork,reuseaddr TCP:타겟DB주소:타겟DB포트번호
Restart=always
User=nobody
Group=nogroup
RestartSec=3

[Install]
WantedBy=multi-user.target

 

작성 후 저장하고 빠져 나오자. 이제 서비스를 시작하기 전에 서비스 파일이 추가 되었음을 알려주자

 

#서비스 추가
sudo systemctl daemon-reload

#서비스 시작 (설정파일에서 만든 서비스 이름 : 필자는 socat-mysql-proxy.service)
sudo systemctl start socat-mysql-proxy.service

#서비스 자동 시작 설정 (설정파일에서 만든 서비스 이름 : 필자는 socat-mysql-proxy.service)
sudo systemctl enable socat-mysql-proxy.service

 

재부팅을 해도 좋고 시스템이 정상적으로 돌고 있는지 확인해보자

 

#sudo systemctl status [your_service_name]
sudo systemctl status socat-mysql-proxy.service

 

이렇게 작성하고 해보니 정상적으로 연결이 되었다. 다만 이렇게 중계 역할을 하는 서버가 무분별하게 받지 못하도록 방화벽 설정은 해줘야 되며 별도로 인스턴스를 만든 것이기 때문에 비용이 발생할 수 있다. 그래도 다른 서비스를 사용한다면 리소스가 많이 들 수 있지만 socat은 간단한 유틸리티라 소모가 크진 않기 때문에 CPU와 RAM이 높을 필욘 없지만 많이 몰릴 것을 대비해 적절하게 배치하고 lightsail 등 염가 VPS를 쓴다면 상품 중 트래픽 과금에 관대한 서비스를 이용하자!