作者: DWDROME
維護時間: 2025-03-22
參考文章:Windows子系統(WSL)通過橋接網絡實現被外部局域網主機直接訪問
WSL 環境橋接與雷達通信配置筆記
環境說明
- Windows 11 專業版(啟用 Hyper-V)
- WSL2 Ubuntu 20.04
- 物理網線(連接 Livox 雷達)
- WSL 使用橋接方式訪問物理網段,設置靜態 IP 與雷達同網段
實現方法
思路就是將 WSL2 自建的虛擬 NAT 網絡橋接到 Windows 主機網卡(以太網 2)上,再通過腳本為 WSL 配置靜態 IP,從而實現與雷達設備通信。
1、開啟 Hyper-V
橋接功能依賴 Hyper-V 組件,僅在 Windows 10/11 專業版中提供。開啟方法如下:
- 打開控制面板 → 程序 → 啟用或關閉 Windows 功能;
- 勾選 Hyper-V 相關項;
- 重啟電腦生效。
2、橋接網絡
WSL2 默認采用 NAT 網絡,不利于局域網通信,需將其橋接到物理網卡(如以太網 2)。
操作步驟:
- 啟動一次
wsl
,確保 Hyper-V 為其創建虛擬交換機; - 管理員身份打開 PowerShell,執行
Get-NetAdapter
查出網卡名稱; - 使用以下命令橋接網卡:
Set-VMSwitch "WSL (Hyper-V firewall)" -NetAdapterName "以太網 2"
3、手動修改 WSL 網絡
進入 WSL,配置 IP 與路由,保持與雷達在同一網段:
ip addr del ...
ip addr add ...
ip route add ...
nano /etc/resolv.conf
若步驟繁瑣,可參考下方自動腳本配置。
4、一鍵橋接腳本說明
為了簡化配置,建議編腳本:
(1)WSL 網絡配置腳本 set_eth0.sh
作用:在 WSL 內配置 eth0 的 IP、路由和 DNS。
內容如下(請自行填寫):
#!/bin/bash
# 設置 eth0 的靜態 IP 以連接 Livox 雷達new_ip=192.168.1.50
brd=192.168.1.255
gateway=192.168.1.1
nameserver=192.168.1.1
net_dev=eth0# 獲取當前 IP
current_ip=$(ip addr show $net_dev | grep 'inet\b' | awk '{print $2}' | head -n 1)# 刪除舊 IP(如果存在)
if [ -n "$current_ip" ]; thenecho "檢測到當前 IP 為 $current_ip,正在刪除..."echo "YourPassword" | sudo -S ip addr del "$current_ip" dev $net_dev
elseecho "未檢測到已有 IP,跳過刪除。"
fi# 添加新 IP 和網關
sudo ip addr add $new_ip/24 broadcast $brd dev $net_dev
sudo ip route add 0.0.0.0/0 via $gateway dev $net_dev# 設置 DNS
sudo sed -i "\$c nameserver $nameserver" /etc/resolv.conf
(2)PowerShell 橋接腳本 wsl-bridge-on.ps1
作用:以管理員權限運行,橋接虛擬交換機,并調用 WSL 中的配置腳本。
內容如下(請自行填寫):
# wsl-bridge-on.ps1
# 自動橋接 WSL 到物理網卡(以太網 2)并配置 WSL 靜態 IP
$currentWi = [Security.Principal.WindowsIdentity]::GetCurrent()
$currentWp = [Security.Principal.WindowsPrincipal]$currentWi
if (-not $currentWp.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {$boundPara = ($MyInvocation.BoundParameters.Keys | foreach { '-{0} {1}' -f $_, $MyInvocation.BoundParameters[$_] }) -join ' '$currentFile = $MyInvocation.MyCommand.Definition$fullPara = $boundPara + ' ' + $args -join ' 'Start-Process "$psHome\pwsh.exe" -ArgumentList "$currentFile $fullPara" -verb runasreturn
}Write-Host "`n正在檢測并準備 WSL 網絡..."
wsl --cd ~ -e ls$switchName = "WSL (Hyper-V firewall)"
$netAdapter = "以太網 2"if ((Get-VMSwitch).Name -contains $switchName) {Write-Host "`n檢測到交換機已存在,跳過創建。"
} else {Write-Host "`n未檢測到交換機,正在創建..."New-VMSwitch -Name $switchName -NetAdapterName $netAdapter -AllowManagementOS $true
}Write-Host "`n執行橋接配置..."
Set-VMSwitch $switchName -NetAdapterName $netAdapterWrite-Host "`n正在配置 WSL 靜態 IP..."
wsl bash -c "/home/dw/set_eth0.sh"Write-Host "`ndone"
pause
(3)PowerShell 橋接腳本 wsl-bridge-off.ps1
取消橋接腳本,同時重啟wsl
# 檢查并以管理員身份運行 PS 并帶上參數
$currentWi = [Security.Principal.WindowsIdentity]::GetCurrent()
$currentWp = [Security.Principal.WindowsPrincipal]$currentWi
if (-not $currentWp.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {$boundPara = ($MyInvocation.BoundParameters.Keys | foreach { '-{0} {1}' -f $_, $MyInvocation.BoundParameters[$_] }) -join ' '$currentFile = $MyInvocation.MyCommand.Definition$fullPara = $boundPara + ' ' + $args -join ' 'Start-Process "$psHome\pwsh.exe" -ArgumentList "$currentFile $fullPara" -verb runasreturn
}echo "正在解除 WSL 橋接..."
Set-VMSwitch "WSL (Hyper-V firewall)" -SwitchType Internalecho "正在重啟 WSL..."
wsl --shutdown
wsl --cd ~ -e lsecho "`ndone"
pause
6、啟用 PowerShell 腳本執行權限
默認 Windows 禁止執行 .ps1
腳本,需手動啟用:
管理員 PowerShell 中執行:
Set-ExecutionPolicy RemoteSigned
輸入 Y
確認。
7、使用方法
- 執行橋接:雙擊
wsl-bridge-on.ps1
,等待執行完成; - 執行取消橋接:雙擊
wsl-bridge-off.ps1
。
如需修改打開方式:右鍵
.ps1
→ 選擇pwsh.exe
打開,并設為默認。
8、補充說明
- 使用過程中若出現多個
vEthernet
接口,建議刪除無效網卡并重建交換機;