我有一台 Windows 7 主机,它使用 nat 处理 VirtualBox Debian 客户机。此客户机正在运行一些可通过端口重定向从外部访问的 Web 服务。
我需要通过 url 提供对这些服务的外部访问,但我不能依赖正确的 dns 解析,因此我必须将主机 IP 传播到来宾环境。我怎样才能在对主机影响最小的情况下做到这一点?
一些澄清: “外部”、“外部访问”是指与主机处于同一级别的网络浏览器,即。他们不能只依赖主机地址。
一图胜千言:
+--------------+ External
| Windows Host | network +---------------------+
| +----+ | | Web client |
| | | NAT | +----------------+ |
| | ------------------------> Page generated | |
| | | | | |by VM with URLs | |
| | VM | | | |to host | |
| | | | | +--------|-------+ |
| | | FWD | | |
| | <--------------------------------+ |
| | | | +---------------------+
| +----+ |
+--------------+
答案1
实现这一目标的一种方法是像这样的网站背后的技巧Whatsmyip.com。您所需要的只是网络中的一个 Web 服务器,它将接收请求的 IP 地址发送回客户端。
请记住,由于您使用的是 NAT,因此服务器会将 NAT 路由器的地址(在本例中为虚拟机主机)视为原始地址。
whatsmyip.php
要实现此目的,您可以在 Web 服务器的 Web 根目录中创建一个 php 脚本(即),例如
//whatsmyip.php
<?php
//Gets the IP address
$ip = getenv("REMOTE_ADDR") ;
Echo "$ip;
?>
并从您的客人处访问它,例如http://webserver/whatsmyip.php
(来源:Thoughtco.com )
现在您只需要在您的服务中评估该答案
答案2
考虑到guntbert的回答,这涉及到:
- 使用“外部”网络中的第三方 Web 服务器来托管远程地址响应程序,如给定答案中所述。
- 在VM初始化阶段(和/或根据网络上下文定期),浏览它以获取Windows主机的外部地址
- 在构建页面时使用检索到的地址伪造 URL。