모든 mysql 트래픽을 SSH 터널로 전달

모든 mysql 트래픽을 SSH 터널로 전달

40.40.40.40:3306에 있는 원격 mysql 서버에 연결해야 하는 로컬 애플리케이션이 있습니다.

기본 방화벽은 SSH를 제외한 모든 연결을 차단하므로 SSH 터널을 설정하고 문제 없이 서버에 연결할 수 있습니다.

ssh [email protected] -L 3306:127.0.0.1:3306 -N  

(다른 터미널에서)

$ mysql -udb_user -h127.0.0.1 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
[...]

내 목적은 대상 주소가 40.40.40.40:3306인 연결을 127.0.0.1:3306의 터널로 전달하도록 iptables를 구성하는 것입니다.

# iptables -t nat -A PREROUTING -d 40.40.40.40 -p tcp --dport 3306 -j DNAT --to-destination 127.0.0.1:3306

# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             40.40.40.40       tcp dpt:mysql to:127.0.0.1:3306

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination 

#cat /proc/sys/net/ipv4/ip_forward
1

이 설정을 사용해도 애플리케이션이 여전히 데이터베이스에 연결할 수 없습니다. 연결 설정을 127.0.0.1로 변경하면 문제가 없으므로 애플리케이션이 제대로 작동한다고 가정합니다.

답변1

OUTPUT아웃바운드 연결을 로컬 포트로 리디렉션하려면 체인을 사용해야 합니다 .
이 규칙은 필요에 따라 작동합니다.

iptables -t nat -A 출력 -p tcp -d 40.40.40.40 --dport 3306 -j REDIRECT --to-port 3306

관련 정보