前段时间花了点钱买了台星际蜗牛当NAS使,内网用起来还是挺爽的,内网千兆传输速度还是很快的。
也是因为上面存了点东西,想在外面访问NAS的时候却没办法了,就想搞个内网穿透,这样在外面也能访问到我在局域网内的NAS了。
因为我这里网络环境比较特殊,路由器外面还有一台天翼网关,没办法获取到公网的IP,也就意味着不能使用DDNS,就只能另辟蹊径了。
于是我便找到了frp,使用frp的前提是你有一台拥有公网IP的服务器,我阿里云的学生机还有挺长时间到期的。
(下文文件路径有所修改,图片未替换,请以文字为准)
为了方便,下文将我的服务器称为Server,局域网的NAS就称为NAS
首先我们需要在这两台设备上都下载frp:https://github.com/fatedier/frp/releases
根据自己的硬件下载对应的文件。
我的两台设备都是centos 64位的,所以我下载的是 frp_0.33.0_linux_amd64.tar.gz
下载文件
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
下载完成后解压,执行命令
tar -xzvf frp_0.33.0_linux_amd64.tar.gz
进入解压后的文件夹
cd frp_0.33.0_linux_amd64
Server(服务端)需要的文件是frps,NAS(客户端)需要的文件是frpc。
只需要保留frps和frps.ini文件即可,为了方便操作,将其移动到指定位置,移动文件操作非必须。
mkdir /etc/frp
mv frps /usr/bin/frp/
mv frps.ini /etc/frp/
cd /etc/frp/
然后编辑配置文件
vi /etc/frp/frps.ini
编辑配置文件
# frps.ini
[common]
#监听端口,客户端通过此端口连接服务器
bind_port = 7000
#token口令 可选
token=token
启动服务端
frps -c /etc/frp/frps.ini
同样将需要的文件拷贝至指定目录
mkdir /etc/frp/
mv frpc /usr/bin/frp/
mv frpc.ini /etc/frp/
cd /etc/frp/
vi frpc.ini
编辑配置文件
重点来啦!
frpc配置按照端口划分,每一个端口对应每一节配置。
假设我需要通过服务器远程连接到我的NAS,需要将NAS的本地22端口映射到服务器上,此时需要指定一个服务器上的端口,这里设置为6000。
# frpc.ini
[common]
server_addr=你的服务器公网IP
#server_port与服务器上设置一致
server_port=7000
# 如设置了token 此处也需要配置
token=token
[ssh]
# 本地端口
local_port=22
# 服务器端口 如不设置默认与本地端口一致
remote_port=6000
如此一来ssh的配置就完成了。
启动客户端连接服务器
.frpc -c /etc/frp/frpc.ini
打开cmd
ssh -oPort=6000 root@服务器IP
此处的-oPort即是frpc.ini中配置的remote_port
其他配置同理,如,我在本地的nas中搭建了aria2,开启了rpc,我希望能通过浏览器插件ariaNg连接到NAS上的aria2,添加配置
[jsonp]
local_port=6800
remote_port=6801
再次启动即可
然后通过插件连接到服务器的6801端口
最后提醒一下,不要忘记开启服务器安全组的端口!
这里推荐使用systemctl控制启动,这个方法非常方便
以服务端为例,找到之前下载frp解压出来的文件夹,进入其中的systemd目录
将frps.service拷贝至 /lib/systemd/system/下并编辑
服务端拷贝frps.service,客户端拷贝frpc.service
cp frps.service /lib/systemd/system/
cd /lib/systemd/system/
vi frps.service
如果ExecStart的路径无法对应上就需要修改
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target
然后使用systemctl启动服务
systemctl start frps.service
systemctl status frps.service
systemctl enable frps.serivce
客户端同理,就不再赘述。