Winows通过非445端口远程访问公网Samba
本人家里用的软路由,PVE下虚拟安装了CentOS,并安装了Samba服务,在家庭局域网访问和共享文件很方便,如果想在公司电脑和手机也能随时随地访问资源,就需要实现公网访问,但 Samba 的默认端口是445,公网因为 smb1 漏洞等安全原因445端口全部封了; Windows 系统默认不提供非445端口的samba访问,所以需要用端口转发实现访问。
前提
有内建 Samba 的服务器(电脑),有公网IP,路由器做了端口转发,并对域名做好DDNS,也可以直接IP访问,但一旦路由器重新拨号,IP变化之后,需要重新设置;没有公网IP的需要用到其他内网穿透如frp等,本文暂不涉及。
假设
1、内网samba服务端口:445
2、公网IP:123.123.123.123
3、公网端口:44500
4、做好DDNS的域名:smb.domain.com
流程
1、用管理员账号打开CMD,以下命令查询445端口占用情况
netstat -ano | findstr 445
可以看出是pid为4的进程进行监听,从任务管理器上看是名叫System,备注"NT Kernel&System"。
2、本地 Windows 电脑打开:控制面板-所有控制面板选项-Windows工具-服务-Server,启动类型改为“禁用”,并停止服务,如下图:
3、重启机器,再次用步骤1种命令查看445端口占用情况,应该是无占用信息(没有返回信息)。
4、利用 Windows 自带的端口转发 netsh interface portproxy 命令,修改端口转发(如果使用IPV6网络,也需要进行端口转发,具体的参照 netsh interface portproxy 使用帮助)
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=445 connectaddress=smb.domain.com connectport=44500
5、用以下命令查询端口转发是否设置成功(IPV6 同理)
netsh interface portproxy show all
应该可以看到相关转发信息,说明转发成功。
6、用步骤1中命令,查看445端口占用情况,此时的进程ID应该不是4,说明成功了。
7、磁盘挂载(注意,IP地址为本机地址127.0.0.1)。
8、删除端口转发:
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=445
9、重置所有端口转发:
netsh interface portproxy reset
解决重启失效
以上方法在Win10,Win11电脑上有个缺陷,目前还没有好的解决方法,就是电脑重启失效,查看的话,转发是存在的,但就是无法实际转发,所以,没办法,只能自己写个批处理命令,每次重启以后运行一次或加入计划任务里自动运行。