gitops/scripts/network-config/windows/start-wsl-bridge.ps1
2025-05-23 21:19:18 +08:00

81 lines
3.1 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ================================================
# 🚀 一键 WSL2 桥接 + 静态 IP 设置 + 开机自启注册
# 文件名start-wsl-bridge.ps1
# 请使用【管理员身份】运行!
# ================================================
# -------------------------------
# 配置区:按需修改
# -------------------------------
$InterfaceAlias = "Ethernet" # 你的宿主机物理网卡名
$WSLStaticIP = "10.253.0.2"
$WSLGateway = "10.253.0.1"
$WSLInstance = "Ubuntu-22.04" # wsl -l -v 可查看
$BridgeRepo = "https://github.com/sakai135/wsl2-network-bridge.git"
$BridgeFolder = "$env:USERPROFILE\wsl2-network-bridge"
$TaskName = "StartWSLBridge"
$ScriptPath = "$PSScriptRoot\start-wsl-bridge.ps1"
# -------------------------------
# 权限检查
# -------------------------------
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
Write-Warning "❗ 请用【管理员身份】运行此脚本!"
exit 1
}
# -------------------------------
# 安装 wsl2-network-bridge
# -------------------------------
if (-not (Test-Path $BridgeFolder)) {
Write-Host "🔧 克隆 wsl2-network-bridge..."
git clone $BridgeRepo $BridgeFolder
} else {
Write-Host "✅ 已存在 wsl2-network-bridge 工具目录。"
}
# -------------------------------
# 启动网络桥接
# -------------------------------
Write-Host "🌐 正在启动网络桥接..."
& "$BridgeFolder\bridge.ps1" -InterfaceAlias $InterfaceAlias
# -------------------------------
# 设置 WSL 静态 IP
# -------------------------------
Write-Host "📡 设置 WSL 的静态 IP 为 $WSLStaticIP ..."
wsl -d $WSLInstance -- bash -c "
sudo ip addr flush dev eth0;
sudo ip addr add $WSLStaticIP/24 dev eth0;
sudo ip link set eth0 up;
sudo ip route add default via $WSLGateway || true;
"
# -------------------------------
# 添加开机自启计划任务
# -------------------------------
Write-Host "🗓️ 正在添加计划任务 [$TaskName],用于开机自动运行此脚本..."
# 如果任务已存在,先删除
if (Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue) {
Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
Write-Host "🔄 已删除旧任务 $TaskName"
}
# 创建任务
$Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File `"$ScriptPath`""
$Trigger = New-ScheduledTaskTrigger -AtLogOn
$Principal = New-ScheduledTaskPrincipal -UserId "$env:USERNAME" -LogonType Interactive -RunLevel Highest
Register-ScheduledTask -TaskName $TaskName -Action $Action -Trigger $Trigger -Principal $Principal
# -------------------------------
# 完成提示
# -------------------------------
Write-Host "`n✅ 一切就绪!"
Write-Host "📌 静态 IP$WSLStaticIP"
Write-Host "📌 WSL实例$WSLInstance"
Write-Host "📌 下次登录将自动执行此桥接脚本。"
Write-Host "`n✨ 现在可以在局域网使用以下命令登录:"
Write-Host " ssh <your-username>@$WSLStaticIP"