Ubuntu+TailScale+Nginx实现外网家庭nas

基础

要想实现nas很简单,只需要给ubuntu系统装上Samba就能实现在内网环境下,手机访问pc的文件,这个不是今天的重点,如果要想学习,可以自行百度

今天我们要实现的是从外网能够访问的,一个稳定的,速度还不能太慢的,不能限流的轻松访问内网数据

一般解决的方式是使用内网穿透,例如:花生壳、Ngrok、frp等,而这些内网穿透提供商做了各种限制,使用上也总是差强人意而TailScale+nginx的组合就完美解决了这个问题:

安装TailScale

  1. 安装TailScale

    1
    2
    sudo apt update
    sudo apt install tailscale
  2. 启动并登录 Tailscale

    1
    sudo tailscale up

    第一次运行会提示你访问一个 URL 进行登录例如:

    1
    2
    3
    To authenticate, visit:

    https://login.tailscale.com/a/xxxxxx

    在浏览器中打开链接,并且注册登录

    授权设备加入Tailnet

  3. 验证状态

    1
    tailscale status

    出现

    1
    100.x.x.x    your-ubuntu-host   linux   -

    表示已成功接入

  4. 设置开机自启动

    1
    sudo systemctl enable --now tailscaled

至此TailScale已经安装到你的系统但是也仅仅是将你的设备放入了一个vpn网段里面,要想真的实现浏览器访问还需要做一步:

nginx接管访问

在nginx.conf中写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# === 你的网站配置开始 ===
server {
# ✅ 监听所有接口,不要绑定到具体 IP
listen 80;

client_max_body_size 0;

location / {
root /mnt/myhdd;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}

访问资源

如果想要安卓设备访问,下载TailScale的安卓版本,可能需要科学上网在Google store中下载,然后根据指引登录,只要确保在同一个账号下。并且打开开关就可以在浏览器通过ip访问

进阶:让服务器上的图片直接访问nas

我有一个centos上面运行的静态网页,平常图片要上传到服务器才能正常访问,我就想能不能在公网服务器直接访问本地nas的图片省的每次都要登录服务器上传

于是我就想到了TailScale,理论上只要让公网服务器也加入到TailScale中在通过nginx代理一下图片访问路径就能实现访问本地nas图片了

  1. 在centos7上安装TailScale

    1
    sudo yum install tailscale
  2. 启动并登录

    1
    2
    sudo systemctl enable --now tailscaled
    sudo tailscale up
  3. 在浏览器中打开链接登录并同意

nginx代理

本地nas的nginx将要暴露的文件夹通过81端口映射出去

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
# ✅ 监听所有接口,不要绑定到具体 IP
listen 81;

client_max_body_size 0;

location / {
root /static;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}

服务器上把所有访问图片的路径都改成/static

1
2
3
4
5
6
7
location ^~ /static/ {
proxy_pass http://nas的ip:81/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

速度还可以,主要是方便嘛