【Frp-Mount-Windows-Share】将Windows下面的磁盘挂载到linux服务器
本地磁盘文件挂载到服务器
大致思路:使用Frp【一个内网穿透工具】来实现本地【windows】和服务器【linux】创建连接,再让本地【windows】的共享目录挂载到服务器。
说人话,先让这两台机器在一个内网,服务器再访问windows开了共享的文件
后面还有实现个人云盘搭建,是借助Frp来完成
挂载储存
实现了frp后,只是说明服务器与本地可以相互连接上,但还没实现挂载功能
本地配置Smb服务
具体配置看这篇文章 https://os.51cto.com/article/658846.html
里面还讲了如何“创建新用户”与“打开共享文件”
本地配置好后,继续执行下面的
安装cifs工具包
ubuntu输入下列命令
1 | apt-get install cifs-utils |
centos输入下列命令
1 | yum install cifs-utils |
安装过程中有提示Y/N的输入y回车
创建要挂载到的目录
先创建一个目录为你要挂载到的目录,例如我要挂载到/mnt/driver目录下
1 | mkdir /mnt/driver |
执行挂载
命令如下
1 | mount -v -t cifs //127.0.0.1/目录名 /mnt/driver/ -o 'port=服务器frp监听端口,username=win用户名,password=win密码,vers=3.0' |
举例
1 | mount -v -t cifs //127.0.0.1/test /mnt/driver/ -o 'port=4500,username=lthero,password=sssss,vers=3.0' |
注意
- 127.0.0.1 对应frpc.ini中local_ip,因为服务器与本地机子连接了,可以使用这个地址
- /test 表示:本地机子共享的目录,比如:我共享三个目录,并挂载test这个目录到服务器
- port 是frpc.ini中remote_port,是将本地数据【本地数据通过local_port】转发到服务器时,服务器监听的端口
- username 是刚刚创建的windows下的用户,password是对应密码【建议windows下创建个新用户】
- vers 如果不加这个参数,默认用1.0版本,死活不能成功……在tensflow上找到了答案,修改成3.0可以
vers=3.0这个参数坑了我两个小时……
成功
取消挂载
到此挂载就完成了,如果需要解除挂载ssh终端输入下列命令即可
1 | umount /挂载目录 |
例如上面我的,则我输入
1 | umount /mnt/driver |
如果提示umout:/mnt:target is busy的话可以使用以下方法取消挂载【提示busy往往是有应用使用这个目录,或着当前正处于这个目录,cd退出就能解决
】
这里以取消挂载/mnt/driver为例
安装fuser
ubuntu安装fuser命令
1 | apt-get install -y psmisc |
centos安装fuser命令
1 | yum install -y psmisc |
查看是谁在使用挂载目录
1 | fuser -cu /mnt/driver |
强制卸载
1 | fuser -ck /mnt/driver |
强制卸载
1 | umout -f /mnt/driver |
验证
1 | df -h |
Frp内网穿透
原理:使用Frp协议让服务器开放个7000端口与本机连接,再将内容映射到7500端口允许公网访问
注意,以下有两个端口都要在服务器放开!
1、本机与服务器连接,端口默认为7000【如本机与服务器的7000端口建立Frp连接】
2、公网访问服务器时,端口默认为7500【如最终访问123.123.132.132:7500】
还有一个本地应用服务的端口,【如本地windows的frp应用的端口地址】
3、local_port = 445
1.1 服务器下载frp
github下载对应版本的frp程序,点击下载,如果访问不了github我也贴心的准备了国内下载地址,点击下载。
下面这个是amd64版本的下载方式,tar解压,mv修改名字【使用uname -a查询服务器架构】
1 | wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_amd64.tar.gz |
frp目录下面有一些文件,分别是服务端文件和客户端文件
打开frps.ini【表示服务端配置文件】
1 | [common] |
服务器启动frp服务端
1 | 启动frps |
1.2 客户端配置frp
windows下载对应windows版本的frp点击下载
下载后解压,修改frpc.ini【表示frp客户端配置文件】
1 | [common] |
windows再启动frpc.exe,此时就可以通过外网访问本地服务
搭建云盘
到这还没结束,下一步,可以在服务器上运行个
可道云盘
,解决了服务器磁盘容量小的问题,但需要服务器宽带以及本地上传速度要大。
装可道云盘有两种方案,在本地安装可道云 或 在服务器安装可道云
在本地安装可道云
方案1参考:https://www.zhaoyabo.com/?p=6584#1
安装好后,只用上面的Frp
功能【不需要挂载存储】,将本地服务
穿透到服务器即可,服务器不需要很大的配置,服务器只做转发操作
- 本地服务器默认用
80
端口,所以需要将frpc.ini的local_port修改成80,其它的无需修改【下面有使用https的方案】
在服务器安装可道云
方案2:https://kodcloud.com/download/
安装好后,按上面的操作,使用Frp
和挂载
,也可以实现。但这种方案的速度可能会更慢,并且对服务器占用较大
我最终采用“在本地安装可道云再穿透到服务器”,但……校园网上传速度太慢,效果一般。
FRP使用HTTPS
参考:
- https://www.bilibili.com/read/cv13684403
- https://cloud.tencent.com/developer/article/1748214
- https://www.ioiox.com/archives/78.html
上面的过程完成后,只能使用ip+端口进行访问,下面,使用域名+tls加密访问
步骤1、服务器修改frps.ini配置
1 | [common] |
步骤2、服务器配置nginx文件
在nginx的conf.d这个目录下面,添加一个文件【文件名设置为要访问的域名】,用来让nginx作反向代理。比如创建文件
1 | vim /etc/nginx/conf/conf.d/amz.lthero.cn.conf |
【反向代理我的理解:当用户访问driver.lthero.studio这个地址时,nginx监听到并与frp协作,将frp的数据转发到7000这个端口】
只要修改下面有注释的行,并复制到amz.lthero.cn.conf
- proxy_pass http://127.0.0.1:8080; 只要修改**“8080”**成
vhost_https_port = 8080
- proxy_pass http://127.0.0.1:8080; 中的 HTTP ,请勿写成 HTTPS .
- proxy_set_header Host $host:80; 注意需加上80端口,否则会无限循环301跳转,导致网页打不开提示重定向次数过多
1 | server { |
重启nginx,服务器就配置好nginx了
1 | systemctl restart nginx |
另外,需要在DNS解析的提供商那边,把
driver.lthero.studio
和服务器ip
绑定
步骤3、服务器打开frp
使用systemctl来控制启动
1 | sudo vim /lib/systemd/system/frps.service |
把下面内容写到frps.service
1 | [Unit] |
使用方法:
1 | 启动frps |
有一些网站会免费提供frp服务,比如:https://www.ioiox.com/frp.html
步骤4、修改客户端frp配置
打开客户端的frpc.ini
1 | [common] |
注意
- 如果服务器的
frps.ini
没有配置subdomain_host
主域名,那么客户端的frpc.ini
中域名参数需使用custom_domains = driver.lthero.studio
需填写完整的域名 - 如果服务器的
frps.ini
配置了subdomain_host
主域名,那么客户端的frpc.ini
中域名参数需使用subdomain = driver
,不用写完整的域名
步骤5、客户端修改phpstduy
客户端打开phpstudy【就是本地安装php并运行网站的那个应用】,打开某个网站的修改
,可以看到使用https
的选项
在phpstudy使用driver.lthero.studio
域名,并点击https
后,需要输入证书,就和上面配置nginx
时对应的证书和公钥一样即可
随后完成创建,但需要打开本地hosts
文件,删除127.0.0.1 driver.lthero.studio
这条记录,否则电脑端访问driver.lthero.studio时,会被定位使用本地的进程
【当然,也可以使用ping driver.lthero.studio
这个命令来判断,如果解析的ip不是本地127地址就可以了】
如图,第一次ping我没删除hosts文件对应的那条记录。第二次ping时,则删除了这条记录,就可以访问到服务器了
这个步骤只是修改本地web服务,如果用java服务或其它php服务,道理是一样的,只要设置好本地服务端口,再直接运行客户端frpc.exe即可
步骤6、启动客户端frp
正常启动frpc.exe即可
步骤7、访问
用手机、电脑都访问http://driver.lthero.studio
测试
搭建流媒体平台
效果图
借助jellyfin这个软件,一键搭建自己的流媒体平台,大体过程为
- 下载jellyfin,本地安装后运行【安装教程:https://www.kflyo.com/tutorial-of-installing-and-configuring-jellyfin/】
- 让Jellyfin扫描文件,查找影视等
- 使用frp做内网穿透【下面的设置】
适应jellyfin的frpc.ini设置如下
1 | #配置jellyfin |
- 本地端口修改为8096:是jellyfin默认的端口。
- 远程端口和之前一样使用7500。
- 这里就不用https协议了【因为我没成功……】,使用普通的
ssh远程端口转发
即可
[^]: ssh 远程端口转发文章:https://blog.lthero.cn/2022/06/17/Frp-Mount-Windows-Share/
注意
- phpstudy创建好网站后,如果使用了
域名和Https
的方案,在本地文件hosts里面,会将127.0.0.1与域名
绑定。如果在phpstudy添加了域名和https后,一定要将hosts里面【127.0.0.1与域名】这一条记录删除,否则本地访问这个域名会被定位到本地的进程,而不是服务器
小结
-
有这次内网穿透+磁盘挂载+云盘搭建的经验,我感觉离拥有个人NAS又近了一步。
-
同时,体会到frp功能的强大,之前使用ssh命令做内网穿透,有些服务还是无法映射到外网,如果以后有机会,可以尝试用frp。
-
在上述的记录中,肯定有很多不完善,或着步骤不清楚的地方,望指教。
参考资料
Linux使用mount挂载Windows共享文件夹 https://cloud.tencent.com/developer/article/1404159
frp内网穿透,公网服务器vps挂载内网openwrt Samba共享文件,实现aria2下载资源到本地 https://imold.wang/resource/goodsshare/723.html
frp内网穿透,本地内网samba共享目录挂载到远程VPS中教程 https://iant.work/blog/787.html
https://askubuntu.com/questions/1162199/mount-cifs-fails-with-mount-error2-no-such-file-or-directory
windows打开SMB服务 https://blog.csdn.net/qq_41429510/article/details/104858471