Windows

從 Windows 訪問 Localhost (Ubuntu -VM)

  • April 15, 2019

我在我的虛擬機中使用 Ubuntu,並從那裡開始我的程式碼項目。這些項目在活動時可以在localhost:3000.

現在,當我在 Ubuntu 中執行時,ifconfig我得到以下結果:

螢幕

如果我嘗試 ping 標記的地址,我會收到回复(來自 Windows)。但不知何故,我無法從瀏覽器訪問http://192.168.145.129:3000>我也嘗試了主機名<http://ubuntu:3000。我認為這是因為我的 Windows 中的一些防火牆設置。

我在公司代理後面工作。因此能夠在虛擬機中瀏覽網際網路。從我的 VM-Network-Settings 開始,我使用 NAT(用於共享主機 IP 地址)。

有人知道如何從 VM 訪問本地主機嗎?

我還檢查了tcpdump -i ens33 port 3000我是否收到任何包裹,我收到了。

編輯 netstat -tnlp 的結果

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:63342         0.0.0.0:*               LISTEN      3087/java           
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      3378/node           
tcp        0      0 127.0.0.1:3128          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:6942          0.0.0.0:*               LISTEN      3087/java           
tcp6       0      0 ::1:631                 :::*                    LISTEN   

netstat輸出中可以看出,您的服務僅在監聽localhost

[snip]
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      3378/node           
[snip]

你永遠不會從“外部”到達它。

解決這個問題的最好方法肯定是依賴於服務的。例如,對於一個簡單的 PHP 伺服器,您可以使用php -S 0.0.0.0:3000它使其監聽所有介面,而localhost不僅僅是監聽。

但作為一種快速解決方法,您可以使用 轉發埠iptables,例如:

iptables -t nat -I PREROUTING -p tcp -i ens33 -d 192.168.145.129 --dport 3000 -j DNAT --to-destination 127.0.0.1:3000

不要忘記啟用到本地主機的路由:

sysctl -w net.ipv4.conf.ens33.route_localnet=1

我已經使用ens33(從螢幕截圖中)它是您的“外部”網路介面,如果不是,請相應地更新規則。

引用自:https://serverfault.com/questions/963087