現象
本機 Windows 安裝 MySQL,透過 PuTTY 連線 Linux 伺服器,嘗試從 Linux 連回本機 MySQL,報錯:
java.net.SocketException: Connection timed out
排查過程
- 檢查 MySQL
bind-address、skip-name-resolve 配置 → 正常
- 檢查 Linux iptables、安全群組 → 正常
- 檢查 Windows MySQL 服務狀態、端口 3306 監聽 → 正常
- 網路搜尋多指向「開放 3306 端口」,但防火牆已開放 → 無效
真兇:Windows 防火牆
Windows 防火牆預設阻擋入站連線,即使建立了「允許 3306」規則,若規則配置為「僅限域網/專用網路」,而當前網路被識別為「公用網路」,規則不生效。
解決方案
- 控制台 → Windows 防火牆 → 進階設定 → 入站規則
- 找到 MySQL 3306 規則 → 內容 → 範圍 → 確認「遠端 IP」包含 Linux 伺服器 IP
- 或新增規則:允許 TCP 3306、所有設定檔(域網/專用/公用)
- 測試:
telnet windows_ip 3306 從 Linux 端驗證
教訓
- 遠程連線超時首查目標端防火牆,而非只查來源端
- Windows 網路位置(公用/專用/域網)直接影響防火牆規則生效與否
- 建立防火牆規則時勾選所有三種設定檔,避免網路位置變更導致失效