背景
家中有一台 CentOS 7 服务器作为 NAS 运行,并运行了 Samba
服务,且具有电信宽带公网IP,但是445端口和80、443一并被封,虽然 Samba 协议下可以修改445端口,但是这样一来家里的 Windows 访问共享就不方便了,毕竟 Windows 访问 SMB 共享时不支持自定义端口。但我又需要在公司内访问家中的 SMB 共享存放文件。
SSH隧道
关于 SSH 隧道原理网上文章很多就不重复了,具体隧道创建及SMB挂载方式如下:
首先创建SSH隧道:(在本地监听445端口,并且打通NAS服务器上的445端口连接)
ssh -f -N -L 445:127.0.0.1:445 root@mynas.yourdomain.com -p 2222
注:
mynas.yourdomain.com
修改为你自己NAS的域名或公网IP,-p 2222
修改为你自己NAS的SSH端口查看本地SSH隧道监听是否建立:(主要查看
Local Address:Port
这一列是否有本地445端口监听)ss -tnl
创建本机挂载点:
sudo mkdir -p /home/bink/NAS
通过
id
命令查看本机用户及用户组ID,用于挂载后的权限设置。1
2bink@bink-desktop:~$ id
uid=1000(bink) gid=1000(bink) 组=1000(bink),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)通过
mount
命令创建挂载:1
sudo mount -t cifs //127.0.0.1/Lan_Samba /home/bink/NAS/ -o username=samba,password=sambapwd,uid=1000,gid=1000
Lan_Samba
是我 NAS 共享中的一个共享的名称;
username=samba,password=sambapwd
指定共享挂载的用户帐号;
uid=1000,gid=1000
这里是指定挂载后的目录权限,1000
是第四步中得到的指定用户和用户组GUID,如果不指定,则以当前用户权限进行挂载,很可能出现挂载后的目录属于root而无法操作的情况。
结束
现已可以通过本地主目录直接访问家中 NAS 的 SMB 共享文件夹了,在家里 200M下行/30M上行
宽带的网速下,访问共享感觉不到延迟,文件拷贝速度也还能接受。