
对之前写的那篇文章有兴趣的可以到这里看:
相较现有方案的区别
- 不需要为wsl2的Linux系统配置固定ip
- 不用在Linux系统里创建个脚本配合执行
- Windows下只有一个vbs文件,无需另外的批处理文件配合
- 重启开机自动转发新ip,不需要手动执行
正题
好了,B装完了,进入主题。
这可能是目前最简单的实现wsl2端口自动转发的方法,原理其实也简单,就是vbs文件执行命令获取Linux系统的IP,然后通过得到的IP执行端口转发命令。
下面贴代码:
我不喜欢每次开机登录的时候都弹一下cmd窗口,所以先将linux系统的ip写入的临时文件(vbs隐藏窗口执行cmd命令无法获取到返回值),然后再读取ip,脚本最后会删除记录ip的临时文件。
wslname = "Ubuntu-20.04" '要转发端口的Linux系统名称,可以通过 wsl -l 命令查看
wslport = "80" 'Linux系统里要转发的端口
winport = "80" '转发到Windows上的端口
'以下代码无需修改
If WScript.Arguments.Length = 0 Then
'用于以管理员权限运行,不然没有权限配置端口转发
CreateObject("Shell.Application").ShellExecute "wscript.exe" _
, """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
WScript.Quit
End if
set fso = CreateObject("Scripting.FileSystemObject")
set objShell = CreateObject("WScript.Shell")
writeip = objShell.Run("cmd /c ""wsl -d "+wslname+" -u root hostname -I"">C:\Windows\Temp\wslip.tmp",0,True)
set f = fso.OpenTextFile("C:\Windows\Temp\wslip.tmp", 1)
wslip = f.ReadAll()
f.Close()
command = "cmd /c ""netsh interface portproxy add v4tov4 listenport="+winport+" listenaddress=0.0.0.0 connectport="+wslport+" connectaddress="+wslip
forwarding = objShell.Run(command,0,True)
fso.deleteFile("C:\Windows\Temp\wslip.tmp")
上面的代码根据实际情况修改前面【Linux系统名称】、【Linux系统要转发的端口】、【转发到Windows上的端口】这3个位置即可,然后以vbs后缀保存到 C:\Users\notevm\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\ 目录下,把notevm改成自己的用户名。
或者按win+r
输入shell:startup
再按回车键,就会打开当前用户的启动文件夹。

不过之前在某篇文章上看到说Linux子系统的IP即使不重启电脑隔一段时间也会变化,这个我自己电脑几天不重启都没有出现这个情况,如果真会变化的话添加个任务计划执行这个脚本即可。
最后提一下:由于我并不会vbs,所以这个代码虽然少,但实际上也是花了很多时间查资料,踩了不少坑,试了不少错才折腾出来的,如果转载的话请标明出处:虚拟笔记 https://www.notevm.com/a/6359.html,谢谢!
原创文章,作者:小哆啦,如若转载,请注明出处:https://www.notevm.com/a/6359.html