最近同事遇到一個虛擬機會發生的實務問題:
他將一個網頁服務架設在Windows Hyper-V的虛擬主機內,他想要讓區域網路上的電腦都可以存在到該服務。
我們都知道Host與虛擬機的Guest間達成網路共享的模式是 NAT(Network Address Translation),他是一種內網穿透外網的一種協議模式,這邊我們就不細究。可以知道的是通常這類型的服務,你會需要知道虛擬機內的IP,再加上服務的埠口才能存取該服務。通常虛擬機的IP往往是內網,例如: 10.xxx.xxx.xxx 或是 172.xxx.xxx.xxx ,這肯定是沒法讓區域網路上的電腦存取,畢竟兩者所處的網段不一樣。
解決思路是這樣的: 通常區域網路上的IP是相同網段的,我能不能將其他電腦存取 Host端的80埠口,通通映射到這台虛擬機呢?
答案當然是肯定的,我們需要修改的是 Host端的 IP Table ,但你會發現 Windows 沒有這個指令,因為對應指令應該是 netsh,具體可以用管理員的身份在命令提示字元或Powershell 這樣下:
// Guest IP: 172.20.21.56
// Port: 9000
// Windows
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=9000 connectaddress=172.20.21.56
// verify the configuration
netsh interface portproxy show all
// remove the configuration,
netsh interface portproxy delete v4tov4 listenport=80 listenaddress=0.0.0.0
以上就大功告成,你可以使用這個網址存取你的服務 http://localhost