最近被计算机网络绕晕了
我知道 mysql 远程访问设置有二个步骤
bind-address
grant all on * TO user@'user_ip'
疑问是
bind-address
设置为0.0.0.0
,或者192.168.1.x
局域网地址,或者数据库服务器某个public ip
0.0.0.0
,则能同时运行局域网内外机器访问数据库bind-address
究竟是什么?是监听本机3306端口的意思吗?而开放公网地址,则允许远程主机访问,因为请求的地址是公网 IP。user_ip
是哪个?是 user 的公网 IP,还是数据库所在局域网的网关 IP?我一直以为是公网 IP,后来自己建立了个虚拟机,发现grant 的是局域网的默认网关 IP。彻底晕了,是因为数据包进入服务器局域网最后一站是网关吗,数据包里 source ip 变成了局域网 ip 了?
晕晕的。谢谢!
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也“同时”支持两种访问方式的。 |
2
final0pro OP @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 绕晕了。不太清楚那些虚拟出的网卡有什么作用。。。 |
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端口 不放心还可以用防护墙做一次过滤防止暴力破解之类 |