我有一个 Debian 6.x 盒子,需要将其移动到 Azure。在将其移上去之前,我确实确保 SSH 正在监听任何端口,Apache 也是如此。我的 NSG 已打开所有正确的端口(目前为 22、443)。我上传了 VHD,然后使用以下 PowerShell 命令基于 VHD 创建 VM:
$vnet = get-AzureRmVirtualNetwork -Name $VnetName -ResourceGroupName $VnetRG
$subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name "$SubnetName" -VirtualNetwork $vnet
$pip = Get-AzureRmPublicIpAddress -Name "$pipName" -ResourceGroupName $resourceGroupName
$NSG = Get-AzureRmNetworkSecurityGroup -Name "$NSGName" -ResourceGroupName $resourceGroupName
$nic = New-AzureRmNetworkInterface -ResourceGroupName $resourceGroupName -Name $nicName -Subnet $subnet -Location $location -PrivateIpAddress $newVMIP -DnsServer $dnsServer1,$dnsServer2 -PublicIpAddress $pip -NetworkSecurityGroup $NSG
$newVM = New-AzureRmVMConfig -VMName $newVMName -VMSize $newVMSize | Add-AzureRmVMNetworkInterface -Id $nic.Id | Set-AzureRmVMOSDisk -VhdUri $vhdPath -Name $diskname -CreateOption attach -Linux -Caching ReadWrite
New-AzureRMVM -ResourceGroupName $resourceGroupName -Location $location -VM $newVM -DisableBginfoExtension
我可以看到机器正在运行,因为我可以在启动诊断中查看自动登录的桌面。但是,当我尝试 SSH 或尝试通过 22 和 443 访问网站时,它没有返回任何响应。Telnet 超时,并且它表现得像端口根本没有转发一样。
我理解,因为是 Debian 6.x,所以不支持 waagent。但我不需要 waagent 进行端口转发,对吧?根据我对网络的了解以及我在 MSDN 论坛上看到的内容,“端口转发应该对您的终端机器不可见。因为公共端口访问公共端口,而您的 VM 在内部端口接收。”(https://social.msdn.microsoft.com/Forums/en-US/bd93f5cb-a674-4b9c-aa5a-9f6e7b364f2c/port-forwarding-still-broken?forum=WAVirtualMachinesforWindows)
我在 PowerShell 脚本中输入错误或遗漏了某些内容吗? 有什么想法吗?
我尝试删除并重新创建虚拟机,并尝试重新上传 VHD 文件。我确实必须将其从 VHDX 转换为 VHD,但这并不重要,因为它实际上正在启动,而且我在启动诊断中看到了屏幕。
我使用的 NSG 适用于通过门户或 PowerShell 创建的任何其他计算机,但不能用于这台上传的计算机,这让我觉得我在脚本中犯了错误。不过,所有内容都表明它对端口 22 和 443 开放。以下是有效安全规则刀片的屏幕截图: 规则截图
本地机器上的 iptables 为空,如下所示此屏幕截图。
奇怪的是,我也无法从同一虚拟网络上的另一台计算机通过 SSH 连接到它。我尝试执行 https://docs.microsoft.com/en-us/azure/virtual-machines/virtual-machines-linux-debian-create-upload-vhd?toc=%2Fazure%2Fvirtual-machines%2Flinux%2Ftoc.json 中的步骤,但由于它是 Debian 6,因此无法安装 waagent。但同样,我不需要计算机上的代理来实现端口转发。没有其他虚拟化技术需要代理来实现 NAT。
编辑- 有人建议将此问题作为 StackOverflow 的重复问题。我最初在那里问了这个问题,但每个人都建议我在这里发布我的问题。所以我这样做了,将 StackOverflow 的答案标记为答案。
答案1
Debian 6 在 Azure 中无法运行。您必须在 Hyper-V 中使用“旧版网络适配器”,但这在 Azure 中不起作用。或者,您必须重新编译内核以支持 NIC 的 Hyper-V 驱动程序,这也不推荐。看来我必须尝试将数据迁移到新服务器。