2021年11月13日星期六

在windows上连接一个非445端口的smb服务的一些尝试

 本文用于记录搭建一个可在windows以及其他操作系统下访问的远端smb网盘服务。

开始部署一个linux上的samba
安装samba

apt-get install samba -y

配置一个共享,放出参考,编辑/etc/samba/smb.conf,并在大概在注释Share Definitions部分添加:

[smb_share]
comment = share
path = /root/smb-share
public = yes
browseable = yes
public = yes
read only = no
valid users = root
create mask = 0777
directory mask = 0777
force user = root
available = yes

这一段例子表示,共享一个共享名为smb_share的目录,目录地址为/root/smb-share并且用户为root(就是登录服务的用户),并且强制使用系统的root用户进行操作(这样不用考虑那么多权限问题)
为叫root的smb账户并设置密码

smbpasswd -a root

按照提示完成密码的设置,这个密码就是后续客户端访问要输入的密码。
重启smbd服务

service smbd restart

这样,服务就搞好了。

外网访问设置:
打开路由器设置一个映射把445端口映射为4455,或者把samba服务端口改为445端口

考虑到这里,查了一下谷歌,发现原来445端口大部分运营商是不给用的,接着我就由在路由器加了一个映射,也就是446转445,前面的图也可以看到。访问时多加了446端口,于是成功了:

我还用手机一款叫FX的文件管理器创建了这一个一样的连接,这软件也是可以选择自定义smb端口的。

重点来了,在windows上并没有办法访问非445端口的smb服务!
经过谷歌等学习,在windows上,是不可能做到修改这个访问端口的,那我们要如何折腾,答案是有很多的,最终,我使用了如下方案,在本地Linux虚拟主机上运行nginx并代理445端口。

开始一波操作:

打开hyper-v,创建了一个linux,并且配置了最低的性能,然后使用桥接模式的网络,完成后安装安装nginx软件,

apt install nginx

添加关于stream模块的配置:
在配置目录的根配置文件nginx.conf中添加:

stream {
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
# 统一放置,方便管理
include Conf/*.conf;
}

这里意为Conf目录下的配置文件都是关于stream的配置,接着我们创建这个目录,并添加具体的规则。

在Conf下创建xxx.conf,写入:

plaintextCopy successfully
upstream smbd_445 {
server xxx.xxx.xxx.xxx:4455; #需要反向代理的地址以及端口
}

server {
listen 445;
proxy_connect_timeout 8s;
proxy_timeout 24h;
proxy_pass smbd_445;
}

这样就是将这台机的445转发到目标4455的反向代理了。

重新加载nginx,运行:

nginx -s reload

大功告成,查看端口,

netstat -tunlp

445已经在运行:

再回到windows的资源管理器中,对了,要给这个虚拟机设个固定ip比如我这里192.168.16.5,然后,直接映射这个ip,终于可以了,到这里,就实现了在windows上连接一个非445端口的smb服务。