背景

家中有一台 CentOS 7 服务器作为 NAS 运行,并运行了 Samba 服务,且具有电信宽带公网IP,但是445端口和80、443一并被封,虽然 Samba 协议下可以修改445端口,但是这样一来家里的 Windows 访问共享就不方便了,毕竟 Windows 访问 SMB 共享时不支持自定义端口。但我又需要在公司内访问家中的 SMB 共享存放文件。


SSH隧道

关于 SSH 隧道原理网上文章很多就不重复了,具体隧道创建及SMB挂载方式如下:

  1. 首先创建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端口

  2. 查看本地SSH隧道监听是否建立:(主要查看Local Address:Port这一列是否有本地445端口监听)

    ss -tnl

  3. 创建本机挂载点:

    sudo mkdir -p /home/bink/NAS

  4. 通过 id 命令查看本机用户及用户组ID,用于挂载后的权限设置。

    1
    2
    bink@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)
  5. 通过 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上行 宽带的网速下,访问共享感觉不到延迟,文件拷贝速度也还能接受。