转自:https://blog.csdn.net/u011949148/article/details/54311288

昨天在阿里云上申请了一个云服务器,系统用的是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端口号客户端是如何知道的?
虽然折腾了这多久,结果还是自己这边的问题,但或多或少还是学到了点东西,不虚此行。

解决阿里云无法正常使用samba的问题【转】的更多相关文章

  1. 解决阿里云OSS跨域问题

    解决阿里云OSS跨域问题 现象 本人项目中对阿里云图片请求进行了两次,第一次通过img标签进行,第二次通过异步加载获取.第一次请求到图片,浏览器会进行缓存,随后再进行异步请求,保存跨域失效. 错误信息 ...

  2. 解决阿里云SLB无法添加https证书的问题

    私钥是在Linux中通过下面的openssl命令生成的: openssl req -new -newkey rsa:2048 -nodes -keyout cnblogs.key -out cnblo ...

  3. 解决阿里云服务器3306端口无法访问的问题(windows server 2008r2)

    3306端口一般是指mysql数据的默认端口.郁闷了几天的问题,远程无法连接服务器上的mysql服务.今天终于得到彻底解决. 首先,你要确保在服务器上安装好Mysql,并能本地启动.修改密码(如不知道 ...

  4. 解决阿里云安骑士漏洞警告:wordpress WPImageEditorImagick 指令注入漏洞

    解决:wordpress WPImageEditorImagick 指令注入漏洞 前些天在阿里云服务器上安装了wordpress,阿里云提示有wordpress WP_Image_Editor_Ima ...

  5. 解决阿里云下server 2008中tomcat不能外网访问

    1. 首先这台服务器是别人给到手的服务器, 所有环境跟我讲是全新的, 然后我开始配置tomcat; 开始安装sql 2008 r22. r1安装好之后, 本机内部怎么访问都行( . 和 127.0.0 ...

  6. 解决阿里云OSS The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint的办法

    以前有一个上海节点的存储包,一直使用正常.最近购买了一个全国的存储包,发现在上传文件的时候有这个问题. 尝试了很多办法,还提交了工单,都没有解决. 最后解决办法如下: 1.在阿里云OSS管理控制台下, ...

  7. 解决阿里云专有网络ftp无法远程链接

    配置好ftp后本机测试可用但无法远程连接 网络上找了很多方法,配置防火墙出入站规则均无效 提交阿里云工单,给出解决方法,测试后可用

  8. 踩坑系列《十一》完美解决阿里云vod视频点播无法播放音频和视频点播控制台里的媒资库里面的视频无法播放

    刚开始项目部署的时候,音频还是正常播放,后面直接报了 获取m3u8文件失败(manifestLoadError) 的错误,原因是 我的域名 xxx.com 这个域名没有解析到点播提供的CNAME上,所 ...

  9. 解决阿里云数据库RDS报错The table '/home/mysql/data3015/tmp/#sql_13975_23' is full

    查询任何一条语句都显示 The table '/home/mysql/data3015/tmp/#sql_13975_23' is full 查看了下数据库利用磁盘空间没有满, 阿里云的处理方式: 1 ...

随机推荐

  1. poj3320 Jessica's Reading Problem

    Description Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The fina ...

  2. 每日一问(常用的集合接口和类有哪些【二】)—最常用的集合ArrayList类

    本人在曾经的数年编程生涯中,使用的最多的就是ArrayList类了,原因也非常简单.ArrayList类可以是最直接符合集合这一概念的类了,当然这种说法只是我的个人之见.ArrayList可以说是一个 ...

  3. Educational Codeforces Round 56 Div. 2 翻车记

    A:签到. B:仅当只有一种字符时无法构成非回文串. #include<iostream> #include<cstdio> #include<cmath> #in ...

  4. MT【153】缩小包围圈

    (清华2017.4.29标准学术能力测试3) 集合$S=\{1,2,\cdots,25\}$,$A\subseteq S$,且$A$ 的所有子集中元素之和不同.则下列选项正确的有(      ) A. ...

  5. 【Learning】矩阵树定理 Matrix-Tree

    矩阵树定理 Matrix Tree ​ 矩阵树定理主要用于图的生成树计数. 看到给出图求生成树的这类问题就大概要往这方面想了. 算法会根据图构造出一个特殊的基尔霍夫矩阵\(A\),接着根据矩阵树定理, ...

  6. python学习(20) 网络编程

    原文链接:http://www.limerence2017.com/2018/01/02/python20/ python 网络编程和基本的C语言编程一样,效率不是很高,如果为了封装通信库建议采用C/ ...

  7. GO_05:GO语言基础map与函数

    1. map 1. 类似其它语言中的哈希表活着字典,以 key-value 形式存储数据 2. key 必须是支持 == 或 != 比较运算的类型,不可以是函数.map 或 slice 3. map ...

  8. Tomcat权威指南-读书摘要系列3

    3. 在Tomcat中部署Servlet与JSP Web应用程序 jar命令打包war文件 jar cvf examples.war .

  9. RAC转换传统的通信

    ///////////////////各种机制转信号/////////////////////////////// 1.UI事件 [self.logInButton rac_signalForCont ...

  10. Java锁及AbstractQueuedSynchronizer源码分析

    一,Lock 二,关于锁的几个概念 三,ReentrantLock类图 四,几个重要的类 五,公平锁获取 5.1 lock 5.2 acquire 5.3 tryAcquire 5.3.1 hasQu ...