ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

WSL Dashboard 端口转发与 Windows 防火墙自动化:netsh portproxy 完整源码解析

WSL Dashboard 端口转发与 Windows 防火墙自动化:netsh portproxy 完整源码解析 WSL Dashboard 端口转发与 Windows 防火墙自动化netsh portproxy 完整源码解析【免费下载链接】wsl-dashboardA GUI manager for WSL featuring a modern UI — a lightweight, low‑memory, high‑performance dashboard to manage WSL instances. Install, list, start, stop, unregister, and configure your WSL distros​ from one place.项目地址: https://gitcode.com/gh_mirrors/ws/wsl-dashboardWSL Dashboard 是一款轻量、低内存占用的 WSL 图形化管理面板可一站式完成 WSL 发行版的安装、启动、停止、注销与配置。它最受开发者欢迎的能力之一是WSL 端口转发把原本需要手敲多条netsh命令、反复应对 UAC 授权、还要自己查询发行版 IP 的繁琐流程压缩成界面上的一次点击。本文基于 WSL Dashboard 源码完整拆解netsh portproxy 端口映射与Windows 防火墙规则是如何被自动化编排的——即使你不写代码也能照着思路手动配置。先认识一下 WSL Dashboard 界面启动后左侧导航就是全部功能入口Home发行版管理、Add an instance、USB devices、Network网络、Task scheduler 等。端口转发就藏在 Network 页面里为什么 WSL 端口转发总是这么麻烦WSL 2 默认运行在 NAT 网络模式下手动配置一次转发至少要做 4 件事查发行版当前 IPwsl -d xxx ip addr用管理员权限执行netsh interface portproxy add v4tov4 ...建映射再建一条 Windows 防火墙入站规则否则连接会被拦截发行版一重启 IP 就变了以上全部重做…… WSL Dashboard 的做法是一条规则 一条 portproxy 映射 一条防火墙规则 IP 自动追踪并且全部命令合并进一次 UAC 弹窗完成。端口转发界面一览一条规则长什么样进入Network → Port Forwarding每条规则卡片显示目标发行版、监听地址:端口 → 目标端口、防火墙开关FW: On与状态圆点底部提供Cancel all rules、Apply all rules、Add Rule三个批量操作。新增时默认端口 8080、防火墙默认关闭避免误开端口规则数据是一个简单的 6 字段结构id、发行版名、监听地址、监听端口、目标端口、是否启用防火墙定义见 src/network/models.rs界面布局定义在 src/ui/views/network/port_forwarding.slint。 注意端口转发仅在 WSL 的NAT 网络模式下生效若你已切换到 mirrored 直连模式Windows 可直访 WSL IP无需映射。核心封装netsh portproxy 的 Rust 实现所有对 Windows 的改动都收敛在 src/network/port_proxy.rs统一执行器所有 netsh 命令都经过execute_netsh()用CREATE_NO_WINDOW标志创建进程全程不弹黑色命令行窗口体验无感语言无关的规则解析get_active_listen_ports()通过netsh interface portproxy show all读取系统中实际生效的映射。它不解析中英文表头而是靠识别-----------分隔线定位数据区兼容任意语言的 Windows。实现见 src/network/port_proxy.rs。这套「按位置而非文字解析」的写法是处理 netsh 输出的实用技巧。Windows 防火墙规则自动生成与精准清理src/network/firewall.rs 不到 25 行生成两条命令操作生成的 netsh 命令添加入站放行netsh advfirewall firewall add rule nameWSL_Dashboard_{发行版}_{端口} dirin actionallow protocolTCP localport{端口} localipany删除规则netsh advfirewall firewall delete rule nameWSL_Dashboard_{发行版}_{端口}两个值得注意的细节规则名带WSL_Dashboard_前缀删除时按名字精确匹配不会误删你手建的防火墙规则监听地址为0.0.0.0时写localipany否则只放行指定网卡 IP暴露面最小化。逻辑见 src/network/firewall.rs。关键设计多步命令合并进一次 UAC修改 portproxy 与防火墙都需要管理员权限每弹一次 UAC 都很烦。add_port_proxy_and_firewall_elevated()把「添加映射 → 删同名旧防火墙规则 → 加新防火墙规则」拼成一个命令序列只触发一次 UACnetsh interface portproxy add v4tov4 listenaddress0.0.0.0 listenport8080 ... netsh advfirewall firewall delete rule nameWSL_Dashboard_backend_8080 netsh advfirewall firewall add rule nameWSL_Dashboard_backend_8080 ...实现见 src/network/port_proxy.rs。同一思路贯穿全模块批量应用apply_port_proxies_elevated()把 N 条 portproxy 命令合并进一次授权发行版未启动时暂时没有目标 IP只先执行add_firewall_rule_elevated()建好防火墙规则启动后再补映射删除规则delete_port_proxy_and_firewall_elevated()一次性物理清理映射和防火墙规则。这就是「新增一条规则只需点一次确定」背后的工程价值 ✅自动获取发行版 IP三级兜底 打分选优映射需要目标 IP而 WSL 的 IP 是动态的。src/network/tracker.rs 的get_distro_ip()用「重试 三级兜底」策略首选ip -4 addr show信息最全能拿到网卡名失败回退ifconfig再失败回退hostname -I最多重试 10 次、每次间隔 1 秒覆盖「刚启动、网卡还没就绪」的时序问题。拿到多个候选 IP 后select_best_ip()按规则打分eth 网卡 100、en 80、wl 60docker/bridge/veth 虚拟网卡 -50以.1/.255/.0结尾的网关、广播地址 -30最终选最高分。选优逻辑见 src/network/tracker.rs。开机自动同步任务计划程序重启后 WSL 重新分配 IP映射必然失效。WSL Dashboard 用 Windows 任务计划程序解决src/network/scheduler.rs 通过schtasks /Create ... /SC ONLOGON /RL HIGHEST注册一个开机触发、最高权限的计划任务任务指向~/.wsldashboard/scripts/task_scheduler.ps1脚本再以隐藏窗口方式拉起wsldashboard.exe /scheduler/scheduler 处理器 汇总三类需处理的发行版有转发规则的、开了自动启动的、USB 开机挂载的后台拉起后等待 5 秒让网卡稳定再逐台执行同步同步采用「先删旧映射 → 有 IP 才加新映射」的幂等策略见 src/network/port_proxy.rs。效果开机后你甚至不用打开 WSL Dashboard端口就已经转发好了。批量管理一键 Apply All / Cancel All对应界面底部两个按钮处理逻辑在 src/ui/handlers/network/rules.rsApply all先用get_active_listen_ports()扫出系统里已生效的映射只对「未生效且发行版正在运行」的规则补映射——已生效的绝不多动Cancel all反向操作批量摘除当前所有生效映射但保留配置随时可以重新 Apply。单条规则的新增/应用/取消流程同样做了完整校验端口限定 1–65534、重复监听检测、发行版未运行时明确提示见 src/ui/handlers/network/rules.rs。附赠同一页面里的 HTTP 代理Port Forwarding 旁边的HTTP Proxy标签页可为 WSL 内服务统一配置代理支持认证与 no_proxy 列表保存后写入发行版环境变量见 src/ui/handlers/network/proxy.rs快速上手3 步体验 WSL 端口转发打开Network → Port Forwarding点Add Rule选择目标发行版填入监听端口与目标端口默认 8080需要局域网其他设备访问时勾选Firewall开关确认后只需一次 UAC 授权在 Windows 浏览器访问http://localhost:8080验证。想让转发开机自动生效按提示初始化计划任务对应 wsldashboard.exe /initialize 命令即可。总结WSL Dashboard 没有发明任何新机制而是把netsh portproxynetsh advfirewall 任务计划程序这三个 Windows 原生工具用最少的 UAC 交互串成了一条自动化流水线模块源码文件职责netsh 封装src/network/port_proxy.rsportproxy 增删查、UAC 批量授权防火墙src/network/firewall.rs入站规则命令生成与精准清理IP 追踪src/network/tracker.rs三级兜底获取发行版 IP 打分选优开机任务src/network/scheduler.rs计划任务注册与检测开机同步src/app/scheduler.rs/scheduler全流程编排规则数据src/network/models.rs转发规则结构定义如果你也受够了手动维护 WSL 端口转发这套「一次点击、一次授权、开机自愈」的实现思路值得仔细一读。【免费下载链接】wsl-dashboardA GUI manager for WSL featuring a modern UI — a lightweight, low‑memory, high‑performance dashboard to manage WSL instances. Install, list, start, stop, unregister, and configure your WSL distros​ from one place.项目地址: https://gitcode.com/gh_mirrors/ws/wsl-dashboard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表