在Virtualbox虛擬機器中運行Ubuntu系統時,有時候需要通過連接埠映射來實現主機pc端和虛擬機器內部鏡像通訊,連接埠和虛擬機器內部的服務相對應。在Virtualbox啟動階段會映射這些連接埠,然而在Windows中部分機器卻出現連接埠映射失敗的情況,那麼,Windows和 Virtualbox連接埠號碼映射失敗該怎麼辦呢?
連接埠映射失敗日誌如下:
00:00:01.125577 NAT: set redirect UDP host 0.0.0.0:6000 =》 guest 10.0.2.15:6000
00:00:01.125748 NAT: can‘t create datagram socket
00:00:01.125763 NAT: failed to redirect UDP 0.0.0.0:6000 =》 10.0.2.15:6000
00:00:01.125774 NAT: set redirect TCP host 0.0.0.0:6555 =》 guest 10.0.2.15:5555
00:00:01.125897 NAT: failed to redirect TCP 0.0.0.0:6555 =》 10.0.2.15:5555
分析:
1.此處的連接埠號碼映射沒有佔用Windows官方分配的連接埠號碼,所有不存在連接埠號碼被Windows服務佔用導致無效映射的問題
2.通過netstat -ano查看所有正在使用連接埠,未發現映射的連接埠號碼被佔用
3.上述兩點都排除了,那就排查Windows系統本身環境的問題,通過驗證發現,可以通過修複工具修複此問題。即是由於Windows本身環境導致的。
具體修複:Repair Winsock & DNS Cache
功能說明如下:
This will clear the stored DNS cache in Windows. When the DNS becomes corrupt you will not be able to get to some sites. Flushing and rebuilding the DNS will fix that problem.
Also resets winsock entries & resets TCP/IP stack.
These extra commands are run on Windows vista and newer.
執行完如下幾條命令然後重啟,即可修複連接埠號碼映射失敗問題,此述不僅僅限於Virtualbox要使用的連接埠映射,其他任何軟體使用到連接埠映射且失敗時可以考慮用如下幾條命令修複:
netsh winsock reset all
netsh int 6to4 reset all
netsh int ipv4 reset all
netsh int ipv6 reset all
netsh int httpstunnel reset all
netsh int isatap reset all
netsh int portproxy reset all
netsh int tcp reset all
netsh int teredo reset all
如上這些命令來源於Windows修複工具中其中一項
如果有其他Windows問題可以嘗試用此工具鏡像修複。