V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
final0pro
V2EX  ›  数据库

mysql 远程访问 设置

  •  
  •   final0pro · 2015-07-05 04:29:47 +08:00 · 792 次点击
    这是一个创建于 3210 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近被计算机网络绕晕了

    我知道 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
    • 如果设置为局域网 IP 地址,是不是只有局域网的机器才能访问数据库?同理,如何设置公开 IP 地址,是不是只有外网机器才能访问数据库?而设置为0.0.0.0,则能同时运行局域网内外机器访问数据库
    • bind-address究竟是什么?是监听本机3306端口的意思吗?而开放公网地址,则允许远程主机访问,因为请求的地址是公网 IP。
    1. 这个user_ip是哪个?是 user 的公网 IP,还是数据库所在局域网的网关 IP?

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

    晕晕的。谢谢!

    4 条回复    2015-07-06 11:14:13 +08:00
    vibbow
        1
    vibbow  
       2015-07-05 08:44:04 +08:00   ❤️ 1
    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
        2
    final0pro  
    OP
       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
        3
    Microseft  
       2015-07-05 20:01:51 +08:00   ❤️ 1
    既然你是在用虚拟机学习,就不要用NAT方式
    应当使用桥接(brige)模式,这样虚拟机网卡会被认为是一个独立的网卡,更加能够模拟真实的情况

    bind-address是TCP层,如果这层就已经拒绝连接,user的权限设置自然也不会有作用了
    一般如果你需要内网和外网都需要访问,bind-address可以忽略就默认的0.0.0.0
    然后授予相应的用户host
    另外需要防火墙开放3306端口
    不放心还可以用防护墙做一次过滤防止暴力破解之类
    final0pro
        4
    final0pro  
    OP
       2015-07-06 11:14:13 +08:00
    @Microseft 好咧。因为是想再虚拟机里跑 docker,然后就开始尝试比较虚拟机和 docker 的网络,然后就晕了哈哈。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5378 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:41 · PVG 16:41 · LAX 01:41 · JFK 04:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.