mysql 远程访问 设置

2015-07-05 04:29:47 +08:00
 final0pro

最近被计算机网络绕晕了

我知道 mysql 远程访问设置有二个步骤

  1. 设置bind-address
  2. grant all on * TO user@'user_ip'

疑问是

  1. bind-address设置为0.0.0.0,或者192.168.1.x局域网地址,或者数据库服务器某个public ip
  1. 这个user_ip是哪个?是 user 的公网 IP,还是数据库所在局域网的网关 IP?

我一直以为是公网 IP,后来自己建立了个虚拟机,发现grant 的是局域网的默认网关 IP。彻底晕了,是因为数据包进入服务器局域网最后一站是网关吗,数据包里 source ip 变成了局域网 ip 了?

晕晕的。谢谢!

801 次点击
所在节点    数据库
4 条回复
vibbow
2015-07-05 08:44:04 +08:00
LZ的提问方式把我也绕晕了。

Q: 如果设置为局域网 IP 地址,是不是只有局域网的机器才能访问数据库?
A: 你bind到某个IP,那么只有能访问到这个IP的机器才能访问到数据库
比如说你bind到192.168.1.x,那外网的机子肯定没法直接访问到你内网的IP的啊
如果你bind的是外网IP,那么访问192.168.1.x也是没法连接到你的数据库的


Q: 这个user_ip是哪个?是 user 的公网 IP,还是数据库所在局域网的网关 IP?
A: user_ip是用户的公网IP

因为你是虚拟机,所以情况有些特殊,因为有两种访问方式:
1. 你的电脑有直接的路由到虚拟机 (这时候你看到的是客户真实的IP)
2. 虚拟机宿主通过端口转发的方式把流量转发到虚拟机 (这时候看见的就是虚拟机网关的IP)

如果LZ用的是VirtualBox,那么默认NAT模式下能访问虚拟机的方式是方法2,除非你把虚拟机网卡换为Bridge模式
如果LZ用的是VMware,那么即使是NAT模式,VMware也“同时”支持两种访问方式的。
final0pro
2015-07-05 12:34:33 +08:00
@vibbow brilliant. many thanks!

谢谢,回答的很清楚。

第二个问题,用的是 virtualBox 的 NAT+host-only。

NAT 的情况,host 应该访问不到 guest 的吧?只能通过端口转发连接到某个服务。并且我 bind-address设置的是`192.168.56.190`(guest ip),grant 的 ip 是`192.168.56.1`,主机 host ip 是`10.6.192.256`。
所以走的应该是 host-only?host-only 情况下 host 访问 guest 的时候,其实是“伪装”成那张 vboxnet 的网卡?

这几天被 docker 和 virtualbox 绕晕了。不太清楚那些虚拟出的网卡有什么作用。。。
Microseft
2015-07-05 20:01:51 +08:00
既然你是在用虚拟机学习,就不要用NAT方式
应当使用桥接(brige)模式,这样虚拟机网卡会被认为是一个独立的网卡,更加能够模拟真实的情况

bind-address是TCP层,如果这层就已经拒绝连接,user的权限设置自然也不会有作用了
一般如果你需要内网和外网都需要访问,bind-address可以忽略就默认的0.0.0.0
然后授予相应的用户host
另外需要防火墙开放3306端口
不放心还可以用防护墙做一次过滤防止暴力破解之类
final0pro
2015-07-06 11:14:13 +08:00
@Microseft 好咧。因为是想再虚拟机里跑 docker,然后就开始尝试比较虚拟机和 docker 的网络,然后就晕了哈哈。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203390

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX