- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的主机上本地运行 MySQL,并且由于原因™我无法在我的 Vagrant 机器内运行它。我知道有一种方法可以通过 iptables 将所有流量转发到 3306 到主机的 IP 地址和端口来解决这个问题,但这对我来说很复杂,因为我必须玩弄 iptables 规则,可能进入 TCP 伪装,这是很好的避免。
Vagrant (VirtualBox VM) 中是否有办法将主机 TCP 端口转发给 guest ,以便 guest 可以访问 127.0.0.1:3306
并将所有流量转发到 host:3306
无缝?如果没有,我将如何在 iptables 中进行设置?
According to this answer , Docker 提供了一种本地执行此操作的方法,而无需操心 IP 表规则。 VirtualBox 和 Vagrant 是否提供了一种模仿此功能的方法?
最佳答案
我有两种解决方案,一种涉及 iptables hacking,一种更直接地使用 SSH。
通过 SSH 将主机端口隧道传输到 guest
使用 vagrant ssh
连接 guest 时, 将端口作为参数传递:
vagrant ssh -- -R 3306:localhost:3306
iptables
在 guest 上将所有流量转发到 guest 上的本地端口到主机上的远程端口。我们需要确保主机和 guest 具有或多或少的静态 IP 地址,以确保一切正常。我们还需要在主机的防火墙上打开一个端口,以允许 guest 执行此操作。
Vagrantfile
, 为 guest 设置静态 IP 地址:
config.vm.network "private_network", ip: "10.10.10.10"
10.10.10.10
,您将永远* 打您的客人。
$ remote_ip=10.0.2.2
$ mysql_port=3306
$ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $mysql_port \
-j DNAT --to $remote_ip:$mysql_port
$ sudo iptables -N INET-PRIV
$ sudo iptables -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$ sudo iptables -A FORWARD -j drop
$ sudo iptables -A INET-PRIV -p tcp -d $remote_ip --dport $mysql_port \
-j ACCEPT
$ sudo iptables -A INET-PRIV -j DROP
$ echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward
$ sudo iptables-save
/proc/sys/net/ipv4/ip_forward
会记住启动时的设置,因此您可能希望将其添加到启动脚本中。
关于vagrant - 将主机端口转发给 guest ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28351109/
我正在开发一个带有 Facebook 连接的应用程序。我已经使用 API 创建了一些测试用户。现在我想在用户执行某些操作时向用户发送电子邮件。测试用户都有电子邮件地址,但我不确定它们是否有效,也不确定
我的程序遇到了一个奇怪的问题。 我一直在使用 UDP 传输文件,使用标准的 sendto 和 recvfrom。 我在程序中让服务器和客户端多次来回通信。 我刚刚在服务器代码中添加了一个新的 send
我是一名优秀的程序员,十分优秀!