Windows
從 Windows 訪問 Localhost (Ubuntu -VM)
我在我的虛擬機中使用 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
(從螢幕截圖中)它是您的“外部”網路介面,如果不是,請相應地更新規則。