我对网络或 Linux 没什么经验,但我正尝试从家庭网络外部通过 ssh 进入 Ubuntu 虚拟机。Ubuntu 虚拟机 (VirtualBox) 在 Debian 桌面上运行。我做了一些研究,发现我必须将端口 22 从路由器转发到虚拟机。
- 我将虚拟机上的网络设置更改为桥接。
- 我正在将端口转发至虚拟机。
- 我检查了 (http://www.yougetsignal.com/)显示端口为开放。
但是当我尝试连接时它仍然不起作用。ssh 用户名@--连接被拒绝
我需要在虚拟机中执行什么操作才能允许传入连接?或者转发任何端口?
我做错了什么吗?任何帮助都将不胜感激!!
答案1
默认情况下,VirtualBox 以“NAT”模式工作,这意味着它会构建一个“虚拟”网络并转换来自 VM 的网络访问,以便对于外界来说,它们似乎来自您的实际计算机。
VirtualBox 让虚拟机认为它已连接到网络,但实际上 VirtualBox 提供的是网络服务,包括一个小型 DHCP 服务器。然后,VirtualBox“代表”虚拟机进行网络访问,使其看起来像是 PC 上运行的另一个应用程序。
然而这意味着外界实际上并不了解虚拟机并且无法直接访问它。
我认为您执行的端口重定向是从家用路由器到 PC,而不是到 VM。您可能缺少 VirtualBox 方面的某些配置。如果您已经执行了此操作,请原谅,但您的问题对此并不清楚。
基本上,您必须更改虚拟机的网络配置并将其设置为“桥接”。这样做的目的是,它会在您的 PC 上创建一个虚拟接口,并让虚拟机使用该接口访问外部世界;任何进入或前往该接口的信息都会被传输到虚拟机。因此,无论您的 PC 连接到哪个网络,虚拟机都将被视为另一台机器(它甚至有自己的 MAC 地址!)。
然后,根据您的网络配置,虚拟机可能会像连接到路由器的任何其他 PC 一样获得 DHCP 地址,或者您可能需要为其配置静态 IP 地址。这取决于您的网络设置方式。
一旦虚拟机有了“真实”地址,您就可以在路由器上按照找到的说明将端口 22 路由到虚拟机的 IP 地址。这应该会按预期工作。
如果没有的话:
- 查看虚拟机的防火墙配置 (iptables -L -n)。它是否阻止了任何东西?
- 在本地网络上设置另一台计算机,并尝试通过 SSH 连接到虚拟机的 IP 地址。如果可以,则需要仔细检查路由器中的转发配置。如果不能,则需要重新检查虚拟机的 SSH 和防火墙配置。
答案2
据我所知,您的问题出在您的服务器计算机网络上,因为一旦您将虚拟机网络设置为桥接模式,您就可以开始了(ssh <your.vm.ip.number>
在您的服务器命令行上检查 - 而不是在虚拟机中)。
您的服务器位于路由器后面,就像机器中使用 NAT 的虚拟机一样。
您需要联系您的服务器网络管理员,以便他/她可以将您的虚拟机的本地 IP 地址转发到一个端口/端口范围(确保您的虚拟机具有静态 IP 地址)。
如果您拥有服务器网关的权限,您可以自己执行此操作。
可视化一下:
Internet
'---ROUTER (SERVER1 and SERVER2 use NAT on this router)
| (vm1, vm2, vm3, vm4, vm5 need to be forwarded on this router)
|
'--- SERVER1 (vm1, vm2, vm3 use Bridge)
| '---vm1
| '---vm2
| '---vm3
'--- SERVER1 (vm4, vm5 use Bridge)
| '---vm4
| '---vm5
答案3
从你的情况来看,似乎你需要为你的虚拟机配置防火墙 $ sudo ufw allow ssh
答案4
也可以在“NAT模式”下执行此操作,发现Oracle VM Virtualbox具有端口转发功能,
转到 Virtualbox 设置 > 网络 > 适配器 (NAT) > 高级 > 端口转发