如何通过跳板机访问内网 Mysql 服务器
很多场景下内网数据库不能直接对公网开放,但我们又需要在外网机器上用数据库客户端(如 DBeaver、MySQL Workbench)连接调试或做数据迁移。常见解决方法是通过**跳板机(Jump Server)**做中转。本文用通俗语言把流程讲清楚,并给出常用命令和注意点。
一、思路概览
常见做法有两种:
- SSH 隧道(推荐):在客户端发起到跳板机的 SSH 隧道,从跳板机再访问内网 MySQL。安全、临时、无需在跳板机上长期开放 3306 端口。
- 跳板机做端口转发 / NAT(不太推荐):把跳板机的
3306
暴露到外网(或绑定到跳板机 IP),客户端直接连跳板机。配置更改多、风险更大,但有时用于长期对接。
下面我按你给的步骤,把环境准备、配置流程、客户端设置和安全注意都写清楚。
二、环境准备
- 让跳板机位于内网 —— 跳板机(A)应能访问内网的 MySQL(B)。A 与 B 在同一个内网或路由可达。
- 让跳板机和操作机在同一个网络下(热点/wifi/网线) —— 这里“操作机”是你用来连接的机器(本地笔记本)。通常你是远端在公网,通过 SSH 连接跳板机;如果是物理局域网调试,确保两台能互通。
三、跳板机安装 SSH
在跳板机上安装并启动 SSH 服务(以 Ubuntu 为例):
sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable --now ssh
# 检查状态
sudo systemctl status ssh
建议:
- 用 SSH key 登录,关闭密码登录(修改
/etc/ssh/sshd_config
:PasswordAuthentication no
),然后sudo systemctl restart ssh
。 - 若需要远程通过公网访问跳板机,确保跳板机的防火墙/云安全组放行 SSH(默认 22)。
四、跳板机设置静态外网 IP、设置网关
如果跳板机有公网或固定外网 IP,设置静态外网 IP(或在云面板上固定弹性 IP)。以 Ubuntu 22.04(netplan)为例:
/etc/netplan/01-netcfg.yaml
示例:
network:version: 2renderer: networkdethernets:eth0:addresses:- 203.0.113.10/24 # 你的外网IP/掩码gateway4: 203.0.113.1 # 网关nameservers:addresses: [8.8.8.8, 1.1.1.1]
应用配置:
sudo netplan apply
(不同发行版或云厂商界面不同,按实际环境操作。)
五、操作机设置网关
如果你的操作机在同一局域网内(比如现场调试),确保网关与跳板机在同一网段、能互通。大多数情况下,操作机使用 DHCP 即可,不必手动设置。如果你确实要手动设置静态 IP,确保网段、网关、DNS 配置正确。
六、跳板机设置静态内网 IP、设置网关
跳板机通常有两张网卡或一个同时能访问公网和内网的路由:
- 内网 IP(能访问 MySQL):例如
10.0.0.5
,这是跳板机在内网的地址。 - 如果需要静态,和外网 IP 一样在 netplan 或
/etc/network/interfaces
中配置内网网卡。
示例(netplan 支持多网卡):
ethernets:eth0: # 外网addresses: [203.0.113.10/24]gateway4: 203.0.113.1eth1: # 内网addresses: [10.0.0.5/24]
七、实际连接方法
下面给出两种常用实现方式 —— A. 用数据库客户端自带的 SSH 隧道功能(推荐),B. 在跳板机上做端口转发。
A. 客户端内置 SSH Tunnel(推荐)
大多数 GUI 客户端(DBeaver、MySQL Workbench、DataGrip)都支持 SSH 隧道设置。设置思路:
- SSH(跳板机)信息:Host = 跳板机公网/外网 IP(或域名),Port = 22,User = 跳板机用户名,Auth = 密钥或密码。
- 数据库(MySQL)信息:Host = 内网 MySQL 的真实 IP(例如
10.0.1.20
),Port =3306
,User/Password = MySQL 的账号密码(和在 MySQL 上的用户名/密码一致)。
举例(DBeaver):
- 新建 MySQL 连接,选“使用 SSH 隧道”(Use SSH Tunnel)。
- SSH Host:203.0.113.10(跳板机外网IP)
- SSH User:jumpuser,Auth:私钥文件或密码。
- Database Host:10.0.1.20(内网 MySQL IP)
- DB User/Password:MySQL 的用户名/密码。
连接后客户端先通过 SSH 隧道到跳板机,再从跳板机访问内网 MySQL。