本文记录了个人亲身搭建samba服务的经历,对于软件如何安装之类的内容没有详细讲解,需要各位自行解决软件安装问题,本文主要讲解了Samba服务器外网可访问的拓扑架构以及实现方式。
我的服务器环境描述:
实现的功能:
实现方式:
1. 安装SSH。
2. 搭建Samba服务器,并将相关硬盘分区挂载。
3. 到花生壳 或者 公云 网站申请动态域名,然后进行绑定。
4. 路由器开启端口转发
1. 使用hdparm命令,编写bash脚本,加入开机自动启动实现。
接下来分别说明一下每个功能的具体实现方式
1. Samba服务器搭建
---建议先自行bing搜索Samba搭建方式,资料太多了,我这里仅说明一些特殊的配置点。
a. 安装Samba & SSH
SSH安装:
安装系统时选择SSH组件,或者使用如下命令:
sudo apt install openssh-server -y // 安装SSH
sudo systemctl enable --now ssh // 启动SSH
Samba安装:
sudo apt install samba
b. 在/srv下创建Samba目录,然后在下面创建自己想要分享的目录,我的如下:
ps. /srv目录是最新出来的规范,所有的网络服务相关的数据建议都放在这个目录下。
比如想搭建个网站,则在此目录在新建一个www目录,将相关内容放到此目录。
c. 新建samba用户,此用户必须是ubuntu已存在的用户。
d. 修改 /etc/samba/smb.conf ,对待共享的目录进行配置并添加到此文件末尾。
Samba的配置参数说明如下:
[Shares] | 共享的名字 |
comment = Shares | 一些解释信息,随意 |
path = /mnt/Shares/ | 共享内容的路径 |
create mask = 0777 | 权限 |
directory mask = 0777 | 权限 |
public = yes | 指定该共享是否允许guest账户访问。 |
guest ok = yes | 指定该共享是否允许guest账户访问。 |
writable = yes | 用来指定改共享路径是否可写 |
readonly = no | 是否只能 |
valid users = zenos | 允许访问该共享自研的用户 |
browsable = yes | 用来指定该共享是否可以浏览 |
available = yes/no | 用来指定改共享资源是否可用 |
admin user = 该共享的管理者 | 用于指定该共享的管理员(对该共享具有完全控制权限) 在samba3.0中,如果“security=share"时,此项无效。 多个用户有“,”隔开。 |
invalid users = xxxx | 禁止访问该共享的用户。(root, @workgroup) |
write list = xxxx | 允许写入该共享的用户。 |
e. samba服务的两个操作说明
· service smbd restart --- 重启Samba服务(在ubuntu上执行)
· net use * /del /y --- 结束Win下的网络连接(在window的win+R中执行)
2. 动态域名绑定
--- 释义:家用的IP,隔段时间就会发生变化,我们访问家里的服务器主机是需要知道家
里的IP的,动态域名绑定 即 将家里的IP隔段时间就往指定域名更新绑定一次,
这样我们在外面也能知道家里的IP了。
a. 申请花生壳 或者 公云的账号
--- 申请方式也请大家自行解决啦,建议使用公云,好申请,申请方便。
b. 登陆
i. 花生壳账号登陆一般在路由器上都有。如下图:
ii. 公云的登陆方式有的路由器有,有的没有,我的路由器有可以登陆公云,
但是路由器同步的是我都内网IP(192.168.x.x这种),建议在ubuntu主机上
运行脚本来实现动态同步。
下图是公云官网的介绍,先安装lynx,然后按照下图大红框里的内容执行指令即可,
当然验证成功后,也需要写一个脚本,加入开机启动项目定时执行一次这个指令。
公云自动同步脚本如下:
- #!/bin/bash
-
-
- while [ 1 ];do
-
- lynx -mime_header -auth=@用户名:@密码 "http://members.3322.net/dyndns/update?system=dyndns&hostname=@你申请的动态域名"
-
- sleep 5m
-
-
- done
域名绑定成之后,就可以找到咱们的IP啦,ping一下就能显示(不一定有返回值,和设置有关系),当然有域名之后,IP也不用care啦,后续直接使用域名即可。
3. 路由器端口转发设置
域名绑定之后从外网就可以访问到家里的公网IP啦(光猫上的IP),但是想要进入家里面的服务器,还需要在配置一下路由器的端口,否则 还是连接不到我们的服务器。这是因为各种协议的连接都是要走指定端口的,比如:SSH:22, Telnet:23,远程桌面(mstsc):3389等。
SSH使用Port 22, Samba使用的是445,在路由器上添加相关转发即可。
Samba协议设计多个端口,普通文件共享浏览用的445端口。
我的端口映射,如下图所示:(由于运营商把445端口屏蔽了,所以445端口对应的外部端口我换了一个,如下图红框)
以上: 配置好之后,既可在外网电脑端使用winscp进行登陆,或者使用手机端相关软件(我只验证了iphone的),但是不能用win+r 输入网址登陆(此法使用445端口),因为三大运营商把445端口给封禁了,得另想他法。
winscp登陆如下: 需要使用Port 22端口。
手机端使用如下软件可以成功登陆并使用:使用Port 445端口
如下win+r 方式 暂未搞定:
网络上很多介绍让按照如下方式配置端口转发的,暂未搞定
netsh interface portproxy add v4tov4 listenport=445 listenaddress=127.0.0.1 connectport= xxxx connectaddress=SERVER_IP
4. 硬盘定时进入standby状态
并不是所有的硬盘都支持进入standby模式,可使用的工具有hdparm, hd-idle 和 sdparm,三个工具的使用可以参考此文章:【Linux】硬盘休眠 - Rehtt's Blog
傻瓜时的脚本,每5分钟执行一次
- #!/bin/bash
-
-
- while [ 1 ];do
-
-
- hdparm -y /dev/sda
- hdparm -y /dev/sdc1
- hdparm -C /dev/sda
- hdparm -C /dev/sdc1
-
- sleep 5m
-
- hdparm -C /dev/sda
- hdparm -C /dev/sdc1
-
- done
编辑vi /etc/rc.local,添加相应内容。(末尾的 & 号,一定要加,表示后台运行)
第一个是硬盘自动休眠的,第二个是公云的DDNS自动同步的。
ps. ubuntu 22.04的 rc.local配置跟之前的版本有些不一样,请参考下面文章
“ubuntu22.04设置开启自启动命令脚本_pazzn的博客-CSDN博客”
5. 开机自动挂载硬盘分区
方式:通过UUID来挂载
查看分区的UUID,命令:blkid,样本展示如下:
编辑 /etc/fstab,在末尾添加配置,我都配置如下
- UUID="84D61FEBD61FDC6C" /mnt/Phicomm ntfs nls-utf8,umask-0222,uid-1000,gid-1000,rw 0 0
- UUID="AAD8C305D8C2CF2F" /mnt/Movies ntfs nls-utf8,umask-0222,uid-1000,gid-1000,rw 0 0
- UUID="9092EDE792EDD1B0" /mnt/Seagate ntfs nls-utf8,umask-0222,uid-1000,gid-1000,rw 0 0
- UUID="BE36-53A8" /mnt/Symbols auto nosuid,nodev,nofail 0 0
6. 服务器掉电恢复后自动开机
这个是电脑主板的功能,需要在BIOS界面配置,我的电脑是华硕的,以华硕为例:
BIOS--Advanced--APM选项里有如下几个选项:
第三项WOL打开,还能支持网络唤醒开机(WOL: Wake On Lan)
其它说明:
初稿完结。