![如何从 VirtualBox 获取传入 IP 地址](https://linux22.com/image/581815/%E5%A6%82%E4%BD%95%E4%BB%8E%20VirtualBox%20%E8%8E%B7%E5%8F%96%E4%BC%A0%E5%85%A5%20IP%20%E5%9C%B0%E5%9D%80.png)
我在 VB 下设置了一个 http 服务器 (apache),并使用 VB 中提供的工具从主机转发端口。我的 VB 网络与主机通过 NAT 连接。
但是,当这样做时,http 的访问日志仅显示每个连接的相同 IP 地址。(从 10.xxx 开始,即主机 IP 地址)。
有没有办法查看真实 IP 地址?我尝试在主机上设置 iptables 日志,但它不显示数据(只有 src、dest.ttl……你知道……)
答案1
在您的设置中,您的虚拟机位于 NAT 后面,您实际上是通过端口转发访问 Web 服务器的,因此您无法仅使用 VirtualBox 来显示客户端的 IP。您可以做的一件事是在您的主机上设置一个轻量级的 Web 服务器(如 nginx 或 lighttpd),它将在您的网络上监听 80 端口,同时以反向代理模式工作到您的转发端口,这样您的虚拟机就可以在此设置中充当后端。要获取客户端 IP 地址,此 Web 服务器应传递一些其他变量,如 、X-Real-IP
、Host
(X-Forwarded-For
以下是 nginx 的示例虚拟主机,假设您的虚拟机将其 80 端口转发到本地 8080):
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_arrd;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
答案2
您可以使用以下方式在虚拟机中设置 NAT
vboxmanage --nataliasmode1 proxyonly
禁用别名并将 NAT 切换为透明模式。
更多详情请参见此处:https://www.virtualbox.org/manual/ch09.html#nat-adv-alias