使用场景:
SMB的标准端口是445,这个端口在Windows系统上是固定的。但是,Linux上的samba服务是允许设置445以外的端口的,或者出于各种原因,SMB服务被映射到了其他端口,这时候就没办法在Windows系统的资源管理器里直接挂载了。
这里介绍一种方式,用本地端口转发的方式将非445端口转发到445。
创建本地环回网卡
这一步是为了在本地挂载多个SMB服务。如果只挂载一个SMB,直接把端口映射到本地的127.0.0.1就可以了。但是这样做有两个问题,
你就只能挂载这一个了,即使没有打开文件夹共享,本地也默认有一个SMB服务在445端口运行。你需要在服务里把它关掉,端口映射才会起作用。
所以这里再额外添加一块虚拟的网卡,用来承载445监听端口。
Step 1 创建硬件
在“运行”里输入hdwwiz打开“添加硬件”窗口。或者从设备管理器->操作->添加过时硬件打开,但是在Windows11中已经没有这个选项了。在打开的窗口里,选择下一步->安装我手动从列表选择的硬件->网络适配器,然后找到Microsoft->Microsoft KM-TEST 环回适配器
选择下一步,安装。
用管理员运行Powershell或CMD,输入命令
ipconfig /all
这个命令会列出设备上的所有网卡,包括刚才添加的那个。注意这个网卡的名字,默认显示的是“以太网 2”,给这个网卡指定一个ip地址:
netsh interface ip add address "以太网 2" 1.10.0.2 255.255.255.0
如果你需要挂载多个SMB,可以用如上方法给这个网卡再添加几个IP地址。Windows的端口转发
WIndows的端口转发命令为:netsh interface portproxy add v4tov4 listenaddress=监听地址 listenport=监听端口 connectaddress=连接地址 connectport=连接端口
即将连接地址上的连接端口(这个端口上正运行着SMB服务),映射到监听地址的监听端口。假设127.0.0.1上有一个端口号为20445的SMB服务,我们要把它映射到1.10.0.2(刚刚添加的网卡的地址)的445端口。
netsh interface portproxy add v4tov4 listenaddress=1.10.0.2 listenport=445 connectaddress=127.0.0.1 connectport=20445
转发示例:
netsh interface portproxy add v6tov6 listenport=5445 listenaddress=:: connectaddress=localhost connectport=445netsh interface portproxy delete v6tov6 listenaddress=:: listenport=5445
netsh interface portproxy show all
在运行里输入\\\1.10.0.2\[共享名],看能否正常访问。删除Windows的端口转发
示例:
netsh interface portproxy delete v4tov6 listenaddress=1.10.0.2 listenport=445