WSL2设置自动端口转发,无需配置固定IP,重启自动转发新IP!

前几天写了个wsl2端口映射的方法,不过后面发现每次重启后Linux的ip都会变化,如果每次开机都要查一下Linux的ip然后手动执行一次转发命令的话太麻烦了,网上搜的解决方案都是给Linux跟Windows各分配一个同网段的固定ip,不过我不喜欢这样子弄,于是就折腾了这个玩意出来。

WSL2设置自动端口转发,无需配置固定IP,重启自动转发新IP!

对之前写的那篇文章有兴趣的可以到这里看:

相较现有方案的区别

  • 不需要为wsl2的Linux系统配置固定ip
  • 不用在Linux系统里创建个脚本配合执行
  • Windows下只有一个vbs文件,无需另外的批处理文件配合
  • 重启开机自动转发新ip,不需要手动执行

正题

好了,B装完了,进入主题。

这可能是目前最简单的实现wsl2端口自动转发的方法,原理其实也简单,就是vbs文件执行命令获取Linux系统的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)
'wscript.sleep(1000)'延时1秒,避免上面的命令未执行完成导致读取到错误的ip地址或者空内容
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改成自己的用户名。


WSL2设置自动端口转发,无需配置固定IP,重启自动转发新IP!

不过之前在某篇文章上看到说Linux子系统的IP即使不重启电脑隔一段时间也会变化,这个我自己电脑几天不重启都没有出现这个情况,如果真会变化的话添加个任务计划执行这个脚本即可。

原创文章,作者:小哆啦,如若转载,请注明出处:https://www.notevm.com/a/6359.html

(0)
上一篇 2022年9月5日 08:36
下一篇 2022年9月6日 15:39

相关推荐