win10实现非标(非445)端口访问samba服务

背景:

  • 由于公司有需求,在某个高性能宿主机节点上起了N多个Docker容器,而每个容器内的/usr1下都挂载了独立的数据卷,这个数据卷还不是宿主机的数据卷,因此需要在每个服务中安装独立的samba服务。

  • samba服务的标准是占用445139端口。容器中可以默认使用445139端口,然后映射到宿主机的随机端口上,实现每个容器都能启动独立的samba服务而不冲突。

  • 那么问题就抛给windows用户了,windows上面想访问某个samba服务,就需要在资源管理器地址中输入\\ip\共享目录,然后就能访问到这个ip对应的445端口上启动的samba服务了,可是一旦服务器上的samba服务没有启动在445端口,通过默认的ip和端口就访问不到samba服务了,因为windows上面访问samba服务是不能指定端口的,只能是445端口。

  • 那如何通过\\ip\共享目录连接到非445端口启动的samba服务呢?

解决办法如下:

1. 启用SMB 1.0协议和Telnet功能

在控制面板>程序>启用或关闭Windows功能中启用SMB 1.0协议和Telnet功能,启用后提示,需要重启电脑才能生效,这里先不重启,等设置好端口转发以后再重启。

image-20231114010123380

image-20231114010322636

  • 启用SMB 1.0协议了后面才能修改通过端口转发访问到samba服务

  • 启用Telnet功能是为了确认你的samba服务是否正常工作,输入如下命令进行确认

    telnet ip 端口
    

    如果没有报无法访问的错误,就表示samba服务工作正常

2. 禁用445端口的默认服务

win+r输入services.msc,在服务列表中停止并禁用Server服务

image-20231114011412905

3. 启动IP端口转发服务

win+r输入services.msc,在服务列表中启动IP Helper服务,并把启动类型设置成自动。

image-20231114011539069

4. 设置IP端口转发规则

netsh interface portproxy add v4tov4 listenport=445 listenaddress=localhost connectport=目标端口 connectaddress=目标IP

例如我要把访问127.0.0.1:445的请求都转发到192.168.3.116:446,命令如下

netsh interface portproxy add v4tov4 listenport=445 listenaddress=localhost connectport=446 connectaddress=192.168.3.11

查看是否设置成功

netsh interface portproxy show all

image-20231114012339209

到此就设置完了,重启下电脑,让SMB 1.0协议和端口转发服务生效

5. 验证IP端口转发规则是否生效

查看端口转发监听是否生效:

netstat -ano|findstr 445

只要显示不是4就是代表成功的意思,否则就是不成功。

image-20231114012534117

这里的6180是进程号,在任务管理器的服务一栏下可以看到这是ip端口转发服务对应的进程号

image-20231114012617958

6. 连接共享服务

如果显示正确,资源管理器的地址栏输入\\localhost,就可以访问到samba服务器的共享目录了。

image-20231114013005906

7. 映射网络驱动器

如果能通过\\localhost访问到samba服务的文件了,那么可以进一步把这个地址映射网络驱动器,效果就是跟C盘、D盘这种系统盘一样方便地访问了,按照截图的步骤操作即可

image-20231114013456006

image-20231114013758059

image-20231114013945884

8. 参考wiki

https://zhizhuo.blog.csdn.net/article/details/129491719

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐