![我可以使用 iptables 将虚拟机客户机请求转发到主机吗](https://linux22.com/image/865778/%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20iptables%20%E5%B0%86%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%AE%A2%E6%88%B7%E6%9C%BA%E8%AF%B7%E6%B1%82%E8%BD%AC%E5%8F%91%E5%88%B0%E4%B8%BB%E6%9C%BA%E5%90%97.png)
这有点复杂,但我有一个 Windows 7 vm(virtualbox),我需要创建与主机上 MySQL 实例的持久连接。
绑定...我可以使用主机 my.cnf 中的 mysql 地址绑定和 vm 上的相应映射来做到这一点,但每次我更改网络(工作、家庭、无线或有线)时,我的主机的 IP 地址都会发生变化,我必须重置主机上和其他地方的绑定地址(我的主机和 VM 上都有站点)。
Windows VM 有一个 NAT 适配器(以及一个桥接适配器)。我使用 NAT 定义的“默认网关”10.0.4.2 来定位我的主机。我通过将“10.0.4.2 asiteonmyhostmachine.net”添加到 VM 上的主机文件并访问 URL 来确认这一点。
我试过使用 IP 别名:
ifconfig lo:1 10.0.4.3 up
根据我读过的一些其他帖子,我已经尝试过 iptables:
sudo iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 10.0.4.2 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT-p tcp -s 10.0.4.2 --sport 3306 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
我运气不太好,感觉就像在黑暗中摸索。使用 nmap 后,我发现 10.0.4.2 无法访问端口 3306,因此上述方法似乎都不起作用。
任何建议都将不胜感激,但也请提供一种测试您(建议)解决方案的方法。
谢谢!
答案1
iptables
可能不是您想要的工具。但是,您可能希望使用 iptables 来阻止来自互联网的访问。
设备上的网络流量lo
不应路由到另一台设备,即使是虚拟设备。virtualbox 很可能已创建br0
设备或名称中包含的某些设备br
。此设备的 IP 地址将是您连接 mysql 的最佳选择。
如果虚拟服务器正在监听可访问的地址,则它应该能够直接连接到 mysql 服务器。通常将 mysql 配置为监听环回 (127.0.0.1) 地址,作为一项安全措施。使用命令sudo netstat -antp | grep mysql
确定mysql
正在监听哪些 IP 地址。如果它只监听127.0.0.1
或::1
,则需要调整 mysql 配置。如果它正在监听0.0.0.0
,则 mysql 将可通过服务器的任何公共地址访问。
答案2
由于安全原因Mysql默认不允许root进行远程访问。
要允许访问,请按照以下步骤操作:
编辑配置文件“/etc/mysql/my.cnf”,取消远程访问的限制
注释掉下面这一行:
#bind-address = 127.0.0.1
授予 root 从任何 IP 进行连接的权限:
mysql -u root -pROOTPASSWORD
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'ROOTPASSWORD' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit
Mysql用Iptables开放端口:
/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT
重启服务后,就可以从虚拟机连接到root用户了
资料来源:
https://www.virtualbox.org/
http://www.ubuntu.com/download/server
http://directory.apache.org/
http://www.mysql.com/products/workbench/