我可以使用 iptables 将虚拟机客户机请求转发到主机吗

我可以使用 iptables 将虚拟机客户机请求转发到主机吗

这有点复杂,但我有一个 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/

相关内容