原理

由于外网的445端口经常被封,所以有时候我们会将samba服务设置在非445端口上。但是windows又无法指定端口来访问samba服务。本文不讨论服务器的端口设置或frp转发之类,仅讨论windows如何访问非445端口的samba服务。

其原理就是在127.0.0.1上将外网的samba端口映射到445端口上,本机访问外网samba服务时,直接访问127.0.0.1的445端口即可。

假设

  • 外网IP:example.com
  • 外网samba端口:28888
  • 共享文件夹名称:share

步骤

空出本机的445端口

查询445端口的占用情况

netstat -ano | findstr 445

如果有反馈显示,且PID是4,则一般是局域网发现服务占用了

关闭局域网发现服务

  • 运行services.msc
  • 找到Server服务(服务名称是LanmanServer)禁用并关闭
  • 重启电脑

验证445端口的占用情况

再次运行netstat -ano | findstr 445确认445端口是否已经空出(无返回信息)。

端口转发

设置端口转发

netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=445 connectaddress=example.com connectport=28888

确定端口转发是否成功

netsh interface portproxy show all

验证端口转发

再次运行netstat -ano | findstr 445确认445端口是否转发成功(返回PID不是4)。

挂载磁盘

访问\\127.0.0.1\share即可访问到外网的samba共享。

其他操作

设置开机启动

上述的端口转发,在机器重启后又会实效,所以只能把设置端口转发的命令写成一个脚本放到shell:start启动文件夹下。

@echo off
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=445 connectaddress=example.com connectport=28888

删除端口转发

netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=445

重置所有端口转发

netsh interface portproxy reset

参考资料