解決 Win10 Wsl2 IP 變化問題(2021.2.10)

来源:https://www.cnblogs.com/xiaoQQya/archive/2022/05/24/16305264.html
-Advertisement-
Play Games

解決 Win10 Wsl2 IP 變化問題(2021.2.10) Win10 Wsl2 的 IP 地址每次重啟後都會變化,如果經常需要在 Win10 訪問 Wsl2 內的服務的話會比較麻煩,因此筆者尋找一種解決方案併在此記錄。 1. 產生環境 WSL2; Ubuntu 20.04 focal(on ...


解決 Win10 Wsl2 IP 變化問題(2021.2.10)

目錄

Win10 Wsl2 的 IP 地址每次重啟後都會變化,如果經常需要在 Win10 訪問 Wsl2 內的服務的話會比較麻煩,因此筆者尋找一種解決方案併在此記錄。

1. 產生環境

  • WSL2;
  • Ubuntu 20.04 focal(on the Windows Subsystem for Linux);

2. 問題描述

Win10 WSL2 每次重啟後 IP 都會發生變化,經常在 Win10 和 WSL2 之間訪問網路的話比較麻煩。

3. 解決思路

方法一:固定 IP 地址,每次重啟後保持 IP 地址不變;

方法二:每次重啟後更新 hosts 文件,通過功能變數名稱來互相訪問;

經過調研,方法一實現起來比較複雜且不優雅,因此筆者選擇了採用方法二;目前網路上方法二大多數是通過 go-wsl2-host 項目來實現的,其原理是在 Win10 中添加服務自動更新 hosts 文件,但因為筆者對 Win10 服務的編寫不太瞭解,所以受其啟發想到了另一種實現方法:編寫 Shell 腳本在 Wsl2 啟動時自動更新 Win10 和 Wsl2 的 hosts 文件。

4. 實現過程

4.1 準備工作

由於在 Wsl2 中沒有許可權操作 Win10 的 hosts 文件,所以我們需要先解決該問題。

方法一:以管理員身份啟動 Wsl2;

方法二:為當前 Win10 用戶添加修改 hosts 文件的許可權;

因為筆者打算將 Shell 腳本設置成隨 Wsl2 啟動自動執行,方法一每次以管理員身份啟動不方便也不安全,所以筆者選擇了方法二。

  1. 打開C:\Windows\System32\drivers\etc文件夾找到hosts文件,右鍵選擇屬性,找到安全選項卡;

  2. 點擊編輯找到當前用戶組,為其添加完全控制許可權;

  3. 點擊確定,在彈出的提示框中選擇

  4. 此時當前用戶應該可以直接修改 hosts 文件了。

4.2 編寫腳本

筆者對於 Shell 腳本並不是很瞭解,因此腳本還有待優化,如果你有更好的方法也歡迎評論留言。

#!/usr/bin/bash
# 為 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"
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

4.3 設置自啟

Linux 下設置腳本自啟的方式有很多,此處不再詳細贅述,筆者選擇的是將腳本內容添加到 Shell 的配置文件中(較為簡單)。

4.4 測試功能變數名稱

重啟 Wsl2 後功能變數名稱應該就可以使用了,此處我們利用 Python 起一個簡單的 http 服務進行測試。

  1. 在 Wsl2 中啟動服務;

    $ python -m http.server 8888
    Serving HTTP on 0.0.0.0 port 6666 (http://0.0.0.0:8888/) ...
    
  2. 在 Win10 下訪問ubuntu:8888

同理我們在 Win10 下啟用服務,在 Wsl2 內也可以通過win:port進行訪問(port表示服務埠)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Stream操作是Java 8推出的一大亮點!雖然java.util.stream很強大,但依然還是有很多開發者在實際工作中很少使用,其中吐槽最多的一個原因就是不好調試,一開始確實是這樣,因為stream這樣的流式操作在DEBUG的時候,是一行代碼,直接下一步的時候,其實一下就過去了好多操作,這樣我 ...
  • 今天遇到一個很有意思的bug,當程式開發完成後打包到伺服器運行,總是會出現棧溢出異常 ...
  • 目錄 一.簡介 二.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 OpenGL (ES) 學習路 ...
  • 在重新學習java過程中出現的問題進行記錄和總結並分享給大家。 java環境變數配置 註:下載JDK放在英文目錄下 例如: 右鍵我的電腦→屬性→高級系統設置→環境變數 在用戶/系統變數中新建(用戶變數系統變數都可以) 如果用戶變數不行可配置到系統變數 變數值是保存Java的路徑。即在文件夾中找到Ja ...
  • 一 泛型 泛型提供了一種更優雅的方式,可以讓多個類型共用一組代碼。泛型允許我們聲明類型參數化的代碼,可以用不同的類型進行實例化。 也就是說,我們可以用"類型占位符"來寫代碼,然後在創建類的實例時指明真實的類型。 C#提供了5種泛型:類、結構、介面、委托和方法。 二 泛型類 如下代碼聲明瞭一個Some ...
  • .net Core中根據文件路徑和名字將文件轉為流返回給前端提供下載,需要傳入文件路徑(不帶功能變數名稱),和文件名稱(用於下載使用),前端使用<a></a>標簽來進行訪問下載,或者 location.href 來訪問 [ApiController] [Route("[controller]")] publ ...
  • 我們平時在 Linux 中使用 cp 命令時,當把文件從一個目錄複製到另一個目錄,且目錄中具有同名文件時,系統會提示輸入 y 來確認是否覆蓋同名文件。 如果文件少的話,也無關緊要,但文件多的話,要一個一個確認簡直太累了。更要命的是,即使我們加了 -rf 參數,還是會提示。 為什麼會這樣呢? 原因 原 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 群暉NAS設置IPV6公網訪問 最近入手了一個群暉nas,記錄下設置公網訪問的過程。 NAS:群暉NAS220+ 路由器:小米AX3600 1、打開路由器上的IPV6功能。 現在路由器預設的還是使用IPV4,IPV6還是需要手動打開的,再去nas ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...