81 lines
3.1 KiB
PowerShell
81 lines
3.1 KiB
PowerShell
# ================================================
|
||
# 🚀 一键 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"
|