我有一个非平凡的应用程序,由驻留在 Vagrant 图像中的许多 Web 和数据库服务器组成。
主机上已启用端口转发(使用 iptables),以便我可以通过连接到 Vagrant 主机来访问应用程序及其服务。(应用程序的开发 URL 在 /etc/hosts 中维护;我们团队中的每个开发人员都有一个 Vagrant 映像实例。因此,开发期间使用的 URL 无法通过 DNS 获得。)
我需要从我的 Android 模拟器访问该应用程序进行测试;avd 位于我用来托管 Vagrant 映像副本的同一台机器上。
我已将应用程序的条目添加到模拟器的 /etc/hosts 文件中,将它们指向 10.0.2.2(主机),但数据包未被转发;我怀疑这与 Android 模拟器的路由方式有关。不幸的是,我没有在文档这可能会有帮助。
以下是我使用 iptables 设置端口转发的方法,适用于物理设备:
#!/usr/bin/env bash
VAGRANT_IFACE=vboxnet1
VAGRANT_GUEST=192.168.50.43
FWDING_PORT=80
PORT_TO_FWD=80
echo "Forwarding port ${FWDING_PORT} to ${VAGRANT_GUEST}:${PORT_TO_FWD} on ${VAGRANT_IFACE}"
iptables -I FORWARD -d ${VAGRANT_GUEST} -m comment --comment "Accept to forward traffic" -m tcp -p tcp --dport ${PORT_TO_FWD} -j ACCEPT
iptables -I FORWARD -m comment --comment "Accept to forward return traffic" -s ${VAGRANT_GUEST} -m tcp -p tcp --sport ${PORT_TO_FWD} -j ACCEPT
iptables -t nat -I PREROUTING -m tcp -p tcp --dport ${FWDING_PORT} -m comment --comment "redirect pckts to virtual machine" -j DNAT --to-destination ${VAGRANT_GUEST}:${PORT_TO_FWD}
echo 1 > /proc/sys/net/ipv4/ip_forward
如有任何建议,我们将不胜感激。
答案1
这不是一个理想的解决方案 - 而且我不完全确定有什么区别 - 但可以通过使用 ssh 而不是 iptables 进行端口转发来解决,即:
ssh -L :80:192.168.50.43:80 -N 127.0.0.1