在我们公司的防火墙之外,我使用脚本通过 SSH 建立隧道,并将我们的内部 wiki 暴露给我的 OSX 机器。建立隧道时,是否有命令临时告诉 OSX 解析到我的本地端口?
我希望使用的顺序是:
- 打开隧道
ssh -f external-proxy.example -L 8001:internal-wiki.example:8000 -N
[在这里做点什么]
在我的浏览器中输入 URL internal-wiki.example:8000会导致它透明地查看localhost:8001
其他详情:
- 我可以编辑/etc/hosts但这将是一个持久的变化。我只想在外面使用这个
- 我们没有使用 SSL 或证书。
我有一个解决方案,将您的 ssh 命令包装到 bash 脚本中:
解释:
/etc/hosts
/etc/hosts
当您按 ctrl-c 时,函数会启动并使用瞬态条目进行清理如果这不足以回答问题,我深表歉意,我没有足够的代表在这里发表评论。
我认为/etc/hosts可能是最好的选择。我不知道您的拆卸过程是什么,但您可以添加删除
/etc/hosts
条目作为其中的一部分。另外我认为端口更改不适用于
/etc/hosts
解决方案。你能映射localhost:8000
到internal-wiki.example:8000
吗?然后,您可以像这样在停止隧道时添加类似的内容并删除该行:(
127.0.1.1 internal-wiki.example
当然,在实时运行之前一定要对其进行测试)。/etc/hosts
sed -i '' '/127.0.1.1 internal-wiki.example/d'
这应该允许您
http(s)://internal-wiki.example:8000
在浏览器中使用。这不是一个完美的解决方案,但我认为任何更好的解决方案(例如端口映射)都需要在本地运行一个 http 代理。
值得一提的是,添加和删除主机条目是 Parallels 使 VM 可通过主机名寻址的方式。这是
/etc/hosts
在我的xu17
VM 运行时添加到我的:172.20.10.112 xu17.shared xu17 #prl_hostonly shared
当然,运行nginx 代理会很好地处理这个问题,但它可能比你想要的设置更多?
一个更简单的 netcat 选项可能会根据 Web 应用程序起作用。
然后当你关闭隧道时,你可以杀死
nc
进程并删除/tmp/proxy.pipe
创建临时主机条目:
删除临时主机条目(并返回持久主机文件):
或重新启动或关机。
在您的 Mac 上运行负载平衡 Web 服务器,在 localhost 转发和配置为首选 localhost 转发地址的 wiki 的真实地址之间进行平衡。
当 ssh 连接断开时,负载均衡器会注意到并将您的连接定向到常规 wiki 地址。
将您的 Web 浏览器配置为通过负载平衡器为 wiki 代理连接。
有点像大锤敲碎坚果。
名称服务(DNS、ldap、/etc/hosts)不“解析端口”,它们解析主机名。这种说法并不完全正确,但在这一点上的适当解释是无关紧要且耗时的。
由于 OSX 使用 BSD 内核,我想它也可能从那里“借用”许多其他代码。文件 ns 解析器默认从 /etc/hosts 读取,但这可以在 Linux 和 BSD 上通过设置 HOSTALIASES 环境变量(在您启动浏览器的 shell 中)来覆盖,但这仅在没有 '.' 时才有效。在名字里。如果您可以使用不带 . 名义上,这将解决您的问题。
或者,您可以运行一个脚本来配置端口重定向,以将地址为 xxx.xxx.xxx.xxx:8000 的数据包重新路由到 127.0.0.1:8001,反之亦然在传入的数据包上。但这是一个相当笨拙的解决方案。
或者,您可以安装 squid 并使用自定义 url 重定向器来重写请求(如果您开始使用 https 也可以 - 但很棘手)。
一个更简洁的选择是在 ssh 上运行适当的隧道连接。我相信 osx 开箱即用不支持这一点,但有适用于 osx 的 openvpn 兼容插件
如果是我,我会设置脚本来交换主机文件,将所有流量保持在一个端口上,并确保在启动时和 ssh 连接结束时交换默认配置。