这肯定是可以做到的。我搜索过,发现很多答案都声称可以做我想做的事,但我似乎无法将它们整合在一起。所以...
我在 Mountain Lion 下运行 Linux 虚拟机。VM 运行 Apache。我需要将到达主机端口 80 的所有流量重定向到客户机的端口 80。我可以使用以下命令从主机访问 VM 的网站:
http://192.168.100.2/
我还可以使用以下命令从本地网络上的其他机器访问默认的 Mountain Lion Apache 服务器:
http://10.0.42.22/
(证明主机上的 80 端口是开放的。是的,我试过关闭 Mac OS 上的 Apache 安装,但没有成功)
我需要网络上的其他机器能够通过后一个地址(http://10.0.42.22/
)访问在 VM 下运行的服务器。
我已经从主机尝试过 ipfw:
ipfw add 100 forward 192.168.100.2,80 ip from any to any 80 in
在我执行上述操作之后,本地网络上的机器尝试连接时超时,http://10.0.42.22/
而不是到达 Mac OS“它起作用了!”屏幕,这告诉我发生了“某些事情”,但不幸的是,某些事情并不是转发给客户机的工作。
我还尝试添加到 /etc/pf.conf:
rdr on en1 inet proto tcp from any to any port 80 -> 192.168.100.2 port 80
其次是:
pfctl -f /etc/pf.conf
输出结果如下:
No ALTQ support in kernel ALTQ related functions disabled
这与我使用默认配置重新加载 pfctl 时得到的结果相同。这没有影响(本地网络上的机器会收到 Mac OS Apache 默认的“它工作正常!”屏幕)。我也尝试过同时使用上述两种方法,结果与仅使用 ipfw 技巧相同。
我已经阅读并尝试了 ipfw 和 pfctl 的许多组合,但没有一个得到任何不同的结果,或者看起来比我上面提到的更正确。
近二十年来,我一直使用 BSD 和各种 Linux 作为主机,但似乎无法让它与 Mac OS 主机配合使用。我希望我忽略了一些愚蠢和/或简单的事情,希望有人能指出它是什么。
答案1
您是否尝试过关闭 Mountain Lion Apache 实例并设置远程控制隧道例如
sudo bash
nohup ssh -L 80:192.168.100.2:80 -N -i ~someUser/.ssh/id_dsa [email protected] &
或者,也可以使用 Mountain Lion Apache 实例将代理请求反向发送到虚拟机,例如
ProxyRequests Off
ProxyPass / http://192.168.100.2/
ProxyPassReverse / http://192.168.100.2/
<Proxy *>
Order Deny,Allow
Allow from all
</Proxy>
将以上内容粘贴到您的:/private/etc/apache2/httpd.conf 并重新启动 Apache。
答案2
我来晚了一点才回答你的问题。你的 ipfw 解决方案应该可以工作,但不是像你写的规则那样,而且由于你没有提供很多有关配置的信息,我猜你漏掉了几件事:
- 您是否将 scopedroute 设置为 0(使用 sysctl)
- 您是否将转发设置为 1(使用 sysctl)
- 你激活了防火墙吗
- 你在两个网络之间进行 nat
- 你应该只转发来自本地网络的数据包,但目的地的 IP