解决阿里云无法正常使用samba的问题 - Go语言中文社区

解决阿里云无法正常使用samba的问题


昨天在阿里云上申请了一个云服务器,系统用的是ubuntu14.04,由于是免费的(初次使用),配置较低(单核1G内存,40G硬盘),所以在服务器上不方便安装图形界面(默认的系统镜像是没有桌面系统的,毕竟只是服务器),没有图形界面总觉得不是很方便,就想着用samba把远程目录挂载到本地来访问更方便一些,但是其中却遇到了不少问题,记录一下。

(1)我起初的操作

首先在用ssh远程登录到服务器(开始以root账户登录):

创建账户warren:

adduser warren

将warren添加为sudoers:

vim /etc/sudoers

在root    ALL=(ALL:ALL) ALL下面一行添加:

warren  ALL=(ALL:ALL) ALL

保存并退出,则warren账户有了sudo的权限

su warren

sudo apt-get update

sudo apt-get install samba

sudo vim /etc/samba/smb.conf

配置自己的共享目录

[warren]
   comment = warren
   path = /home/warren
   browseable = yes
   read only = yes
   guest ok = no

这样配置好了,执行:

sudo smbpasswd -a warren

输入密码将warren加入samba账户,用于安全登录

sudo service smdb restart

这样samba服务器基本配置完成,本以为大功告成了,谁知道后面却遇到了一大堆问题。

(2)遇到的问题

1.windows下无法挂载

在本地的windows(win7)上试着链接:

打开任何一个文件夹,在地址栏输入

\公网ip地址共享目录,却是死活连不上,

以为是本地防火墙的原因,试着打开了防火墙中关于smb服务的规则,仍然不行

后来有看了网上说开启什么Serser,workstation等服务,还是不行。

后来我开始怀疑是服务器端的配置有问题,为了确定是服务器问题还是客户端问题,我就试着在本地Ubuntu下挂载。

2.Ubuntu下无法挂载

试着挂载命令:
sudo mount -t cifs //公网ip地址/共享目录 /本地挂载目录 -o username=warren,passwd=前面设置的密码
(注意共享目录是warren,而不是路径/home/warren)
结果:
mount error(115): Operation now in progress
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
为了查找原因我决定深入了解一下samba
samba使用了两个服务:
(1)nmbd:端口号137/UDP(Netbios Name Service),138/UDP(Netbios Datagram Service)
(2)smbd:端口号139/TCP(Netbios Session service),445/TCP(Microsoft Naked CIFS)
首先确定服务器上的端口已经开启:
sudo service smbd stop
sudo netstat -ln > netstat-ln-smbd.before
sudo service smbd start
sudo netstat -ln > netstat-ln-smbd.after
diff netstat-ln-smbd.before netstat-ln-smbd.after
可以看到smbd的端口确实是开放的
为了确定服务器端口是正常的,在服务器上执行:
nc -z -w 1 公网ip地址 smbd端口号
发现是正常的,但是在本地Ubuntu上执行:
nc -z -w 1 公网ip地址 smbd端口号
却发现超时了,用wireshark抓包看到

看到tcp一直在链接请求,但是服务器却没有回应!可见smbd的两个端口都是不通的。试试nmbd的端口
nc -v -zu -w 2 公网ip 137
Connection to 112.126.80.71 137 port [udp/netbios-ns] succeeded!
nc -v -zu -w 2 公网ip 138
Connection to 112.126.80.71 138 port [udp/netbios-ns] succeeded!
可见nmbd服务是可以正常连通的。
后来又查了下,发现有人说可能是samba对网卡的绑定可能有问题,这里说一下,我申请的阿里云服务器有两块网卡eth0,eth1
其中eth0是云服务器的内网网卡,对应内网ip,而eth1是云服务器的外网网卡,对应外网ip,但是不知samba默认是所有网卡都监听还是只监听某些网卡,为了确保我修改了smb.conf文件,在interfaces的配置里添加了:
interfaces = eth0 eth1
重启了smbd服务在本地Ubuntu上仍然挂载不上! 看来是路由出了问题!

(3)问题定位

确定了是路由问题,就要定位是哪一个环节出了问题,首先整个网络的框架应该是这样的:

可见双方要想通信,数据包至少要通过两层防火墙,还有 Internet与阿里云端的管控中心,其中有一个环节被限制都会导致通信失败。一般Internet是不会出问题的,问题应该出在防火墙与阿里云端上。

1.配置iptables

Ubuntu下的防火墙就是iptables了,在服务器端:
sudo  iptables -A INPUT -p tcp -m multiport --dports 139,445 -j ACCEPT
sudo iptables -A INPUT -p udp -m multiport --dports 137,138 -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --sports 139,445 -j ACCEPT
sudo iptables -A OUTPUT -p udp -m multiport --sports 137,138 -j ACCEPT
而在客户端:(源端口与目的端口交换)
sudo  iptables -A INPUT -p tcp -m multiport --sports 139,445 -j ACCEPT
sudo iptables -A INPUT -p udp -m multiport --sports 137,138 -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 139,445 -j ACCEPT
sudo iptables -A OUTPUT -p udp -m multiport --dports 137,138 -j ACCEPT

这样双方的防火墙就都已经开放了端口,但是在本地挂载仍是挂载不上,还是TCP链接不上。

2.配置云服务器

在云服务器管理页面设置安全规则:



再次尝试在本地挂载,仍然如故。。。。。。看来应该是阿里云端做了端口限制。

后来打了客户电话咨询,他们说阿里云不会做限制,那就奇怪了,到底是哪里出了问题?突然想到要是能追踪tcp数据包就好了,traceroute可以追踪ip包的路径,但是却不能追踪tcp包,这里明显是端口被限制了,因此traceroute是一直通的,并不能查找问题,于是上网搜了一下可以追踪tcp包(端口)的工具,还真有,就是tcptraceroute,于是就用它试了一下结果发现追踪

tcptraceroute 公网ip地址 22 -n -q 1

22端口是ssh,肯定能通的,事实结果也是如此,但是试了smbd的端口445

tcptraceroute 公网ip地址 445 -n -q 1

结果从第一跳到第三十跳都不通,这样问题就确定了,这应该是我的上层路由器把端口封了,因此数据包第一跳就没通过!想想也应该是,我们是在学校的实验室内部,可能为了保密就把端口限制了!(后来让其他朋友试着挂载,结果他们却能连上,这也更加确定这一点了)

(4)解决办法

1.Ubuntu

既然封了端口,那就只能更换端口了。打开smb.conf,在[global]section中添加:
smb ports = 1315 1314
注意点1.确定指定的两个端口未被使用,2.前面的端口号要大于后面的端口号,我之前试的把小的写前面发现没有生效,用的还是默认的端口。
用前面的方法确认打开的是否是指定的端口。
sudo mount -t cifs //公网ip地址/warren 本地目录 -o username=warren,passwd=密码,port=1315
终于挂载上了。

2.win7

网上搜索了一下,还没找到win7直接访问非标准samba共享的办法,但是有一个思路就是在本地做端口转发,像我这种情况只能在本地将445端口直接转发至1315,具体好像netsh命令可以,但是没有仔细研究,现在做论文忙死了,等以后有时间了好好研究一下。

(5)遗留问题

1.在smb.conf中指定了smbd的两个端口1315 1314,在命令行中只是指定了1315端口,那1314端口号客户端是如何知道的?
虽然折腾了这多久,结果还是自己这边的问题,但或多或少还是学到了点东西,不虚此行。
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u011949148/article/details/54311288
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-16 20:07:03
  • 阅读 ( 1337 )
  • 分类:职场

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢