NAS下公网ip这样用才安全

2025-03-21
nginx
公网
nas
ddns

NAS 一般部署在家里,但是在外使用极为不方便,如果有公网 IP 那就好很多,但是公网 IP 暴漏总归不安全,而且大多数公网 ip 都是动态的,虽然可以走 ddns,但是又不能对外提供服务(web 页面)。
我的宽带是走路由器拨号上网的,一开始有 ipv6 公网的,但是路由器对于 ipv6 有防火墙要么全开要么全关,关了就不安全,虽然 ipv6 是动态的,但是关了防火墙,相当于所有内网设备暴漏。
于是我又申请了公网 ipv4,这下方便多了,需要外网的设置端口转发,暴漏指定端口,公网 ipv4 是动态的,就用了 ddns,而且不提供 web 服务,我是这么做的,已 mt-photos 为例:
路由器对外端口 4456 转发到 nginx 服务 4453,然后 nginx 反代到 mt-photos,mt-photos 端口为 8063,nginx 相关配置片段如下:

 1upstream mtphotos_upstream {
 2    ip_hash;
 3    server 192.168.1.111:8063;
 4}
 5server
 6{
 7    listen 4453 quic reuseport;
 8    listen 4453 ssl;
 9    server_name nas.mydomain.com;
10    add_header Alt-Svc 'h3=":$server_port"; ma=86400';
11
12    ssl_certificate /etc/nginx/ssl/nas.mydomain.com.pem;
13    ssl_certificate_key /etc/nginx/ssl/nas.mydomain.com.key;
14
15    ## 关键在这里配置,判断允许访问的相关设备,具体可以通过nginx日志来判断,先都允许,然后用使用设备使用一下,就可以看到调用日志,然后根据日志内容限制
16    set $flag 0;
17    if ($http_user_agent ~ "^okhttp/") {
18        set $flag 1;
19    }
20    if ($http_user_agent ~ "MT Photos App/") {
21
22        set $flag 1;
23    }
24    if ($http_user_agent ~ "^Dalvik/") {
25        set $flag 1;
26    }
27
28    if ($http_user_agent ~ "MtPhotosApp/") {
29        set $flag 1;
30    }
31    if ($http_user_agent ~ "mtphotos/") {
32        set $flag 1;
33    }
34    ## 如果符合以上调用,才放行,否则返回444
35    if  ($flag = 0) {
36        return 444;
37    }
38
39    location / {
40        proxy_pass http://mtphotos_upstream; ##反代到mp-photos服务
41        proxy_set_header Host $host;
42        proxy_set_header X-Real-IP $remote_addr;
43        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
44    }
45
46    # 其他配置……
47
48}

上面的配置生效后,只能通过手机 app 进行访问,其他方式访问就会返回 444,什么也看不到,
然后配置好 mt-photos 两地址,
一个为内网地址 http://192.168.1.111:8063
一个为外网地址 https://nas.mydomain.com:4456
这样就可以随时随地正常使用 mt-photos,而且外网直接访问 https://nas.mydomain.com:4456 也是无法访问的。
当然 lucky 也可以通过界面操作配置已达到相同效果