在Windows和wsl2中互相網絡訪問(轉)

原文:https://blog.csdn.net/zx156955/article/details/135195563

作者:kamjin1996

來源:CSDN

前言
目前在windows與windows的wsl系統之間,還無法通過相對較固定的方式來互相網絡訪問,通常需要使用各自的ip來互相訪問,而ip可能不是很直觀並且可能會有變更,當前教程解決了這個問題,通過hosts映射的方式打通wsl與windows宿主機之間的訪問。
腳本的原理:在linux啓動時或shell加載時,執行一次修改windows和linux上的hosts文件的腳本。爲windows添加wsl的host以及爲wsl添加windows的host,這樣就能做到互相映射。
注:
當前教程演示使用的wsl2環境爲linux ubuntu,故在腳本中使用“ubuntu”來映射wsl2子系統的實際ip,該名稱可以根據需要自行定義。

一、具體步驟
給予當前windows用戶修改hosts文件的權限
快捷鍵win+r,輸入C:\Windows\System32\drivers\etc,或在該文件夾中找到hosts文件,右鍵選擇“屬性” ,選擇“安全選項卡”;

點擊“編輯”,找到當前用戶組(一般是Users),爲其添加完全控制權限,即勾選"完全控制",彈出的對話框確認,確定即可。

編輯腳本
啓動wsl2子系統,在命令行中輸入:

cd ~
vim wsl2_auto_host_to_win.sh

腳本內容如下:

# 爲 win 設置 wsl host
# win hosts 文件路徑
win_hosts_path="/mnt/c/Windows/System32/drivers/etc/hosts"

# !!!爲 wsl2 設置的域名,可以改成自己習慣的名稱,後面使用該名稱來訪問資源
wsl_domain="ubuntu"

# 獲取 wsl2 的 ip
wsl_ip=$(ifconfig eth0 | grep -w inet | awk '{print $2}')
# 判斷是否已存在 wsl2 的域名,如果存在則修改,否則追加
if grep -wq "$wsl_domain" $win_hosts_path
then
    # 此處因爲權限問題沒有直接用 sed 修改 hosts 文件
    win_hosts=$(sed -s "s/.* $wsl_domain/$wsl_ip $wsl_domain/g" $win_hosts_path)
    echo "$win_hosts" > $win_hosts_path
else
    echo "$wsl_ip $wsl_domain" >> $win_hosts_path
fi

# 爲 wsl 設置 win host
wsl_hosts_path="/etc/hosts"

# 爲 windows主機 設置的域名,可以改成自己習慣的名稱,後面使用該名稱來訪問資源
win_domain="win"
win_ip=$(cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}')
if grep -wq "$win_domain" $wsl_hosts_path
then
    wsl_hosts=$(sed -s "s/.* $win_domain/$win_ip $win_domain/g" $wsl_hosts_path)
    echo $wsl_hosts > $wsl_hosts_path
else
    echo "$win_ip $win_domain" >> $wsl_hosts_path
fi
echo "host change ok!"

保存腳本,給予腳本可執行權限

chmod +x wsl2_auto_host_to_win.sh

注意:
如果腳本是在windows編輯過的,可能會有字符轉義的問題,需要通過dos2unix轉義字符後纔可以執行。
安裝dos2unix(可選):

# 如果沒有更新過軟件列表則需要更新
sudo apt-get update
sudo apt-get install dos2unix
  1. 設置腳本自啓

編輯用戶目錄下的.bashrc

cd ~
vim .bashrc

在該文件末尾添加以下內容(具體腳本位置請替換成你放置腳本的實際位置)

sudo /home/user/wsl2_auto_host_to_win.sh

保存後退出shell界面,當再進入wsl2子系統時,輸入當前賬戶密碼,就會自動執行一次腳本,也就完成了windows和wsl2中hosts文件的修改。

如果提示沒有ifconfig需要安裝:

sudo apt-get install net-tools

二、驗證
在windows上打開cmd,執行:ping ubuntu
以及在wsl2子系統中執行:ping win
即可驗證是否已經可以互相訪問。

結語
當前腳本優雅且輕鬆的實現了在wsl2和宿主機windows之間互相通過固定domain訪問的方式,可以爲日常開發工作帶來一定程度的便捷性。

wsl中獲取windows ip參考:https://learn.microsoft.com/en-us/windows/wsl/networking


————————————————
版權聲明:本文爲CSDN博主「kamjin1996」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zx156955/article/details/135195563

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章