gpt4 book ai didi

vagrant - 将主机端口转发给 guest

转载 作者:行者123 更新时间:2023-12-04 07:21:27 26 4
gpt4 key购买 nike

我在我的主机上本地运行 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

这会将本地端口 3306 转发到端口 3306 处的远程计算机。

iptables 黑客

我们可以使用 iptables在 guest 上将所有流量转发到 guest 上的本地端口到主机上的远程端口。我们需要确保主机和 guest 具有或多或少的静态 IP 地址,以确保一切正常。我们还需要在主机的防火墙上打开一个端口,以允许 guest 执行此操作。

给访客一个静态IP

在您的 Vagrantfile , 为 guest 设置静态 IP 地址:
config.vm.network "private_network", ip: "10.10.10.10"

现在,当您点击 10.10.10.10 ,您将永远* 打您的客人。

在Guest中配置iptables

发现于 this awesome answer in Server Fault :
$ 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会记住启动时的设置,因此您可能希望将其添加到启动脚本中。

我应该使用哪个?

SSH 确实更容易实现,但是必须加密该端口的流量并将其转发回主机会带来一些性能开销。

iptables 感觉就像是黑魔法,但是一旦你开始使用它,它真的很好而且相当无缝。

关于vagrant - 将主机端口转发给 guest ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28351109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com