일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- v
- 흑우마스터
- aws lambda
- 배포
- hot reload
- 구글지도
- Xamarin
- iOS노치
- 닷넷
- xcode13
- 망할
- 구글맵
- ASP.NET Web API
- SecureStorage
- Xamarin Forms
- 프로그래밍
- AWS
- vpc
- 지도
- Cloudflare
- MAUI
- 안드로이드
- .net maui
- n8n
- Android
- 비주얼스튜디오2022
- ABLY
- 개발
- c#
- 자마린
- Today
- Total
흑우마스터의 마법의 공간
SSH 터널링 미지원 되는 MYSQL에 TCP 포워딩 'socat'을 사용하여 연결하기 본문

카페 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를 쓴다면 상품 중 트래픽 과금에 관대한 서비스를 이용하자!