大家好,我是羊刀仙(長文警告?)
公網(wǎng)IP對于咱們NAS用戶來說是非常重要的,現(xiàn)在公網(wǎng)IPv4越來越難獲取,公網(wǎng)IPv6雖然也是可用方案,但目前普及度并不算廣而且也不是想搞就能搞得到,若你的寬帶是雙棧那在群里便可力壓群雄,是可以裝X的~
其實各家NAS廠商基本都有自己的外網(wǎng)方案,就拿我最常用的威聯(lián)通來說,可以通過官方提供 myQNAPcloud Link 外網(wǎng)訪問設備,但畢竟用戶基數(shù)龐大,每個人能分配得到的帶寬有限,并不能很好地滿足所有需求。我也試過 Zerotier ,不過還是有些局限性在里面。
本篇我會介紹利用 VPS 和 Nginx Proxy Manager ,以Docker部署方式通過frp做內網(wǎng)穿透,完美實現(xiàn)通過域名訪問NAS上搭建的服務。整個過程也比較簡單,一步步來即可。
準備一個主域名(建議)和一個VPS服務器(必須)。關于VPS,因為443端口(國內需備案)還有Docker被墻問題,更推薦使用海外VPS輕松實現(xiàn)無端口號訪問,海外VPS作用也不僅于此,還可拿來搭建docker鏡像加速服務等,后續(xù)有時間我也會出相關教程~文末會放置服務器推薦。。
如果追求極致速度,不在乎端口號,則選擇國內VPS;追求速度和美觀,則建議國內VPS備案。
什么是frp
我認為有必要先提前介紹一下:
frp(fast reverse proxy),是國內大佬專注于內網(wǎng)穿透的高性能的反向代理應用
frp支持 TCP、UDP、HTTP、HTTPS 等多種協(xié)議,且支持 P2P 通信??梢詫染W(wǎng)服務以安全、便捷的方式通過具有公網(wǎng) IP 節(jié)點的中轉暴露到公網(wǎng)。
frp通過go語言寫的,支持跨平臺,僅需下載對應平臺的二進制文件即可執(zhí)行,沒有額外依賴。
frp服務端(搭建于VPS)和客戶端(搭建于內網(wǎng)設備) UI 頁面。
通過frp可以把原來不能在互聯(lián)網(wǎng)上訪問的內網(wǎng)服務,以安全、便捷的方式通過具備公網(wǎng) IP 的節(jié)點中轉發(fā)布到公網(wǎng)。這樣一來,就可以在外面隨時訪問家里設備上搭建的服務。
準備工作
??域名解析
這里建議準備一個專用的主域解析到服務器上。這里以阿里云為例。
打開阿里云主頁,找到域名解析,點擊解析設置
。
解析1.png
添加兩條解析記錄,如下圖所示,記錄類型為A,主機記錄為主域名和泛域名,記錄值為VPS服務器的公網(wǎng)IP。
其它不用管,保存后解析工作完成。
??VPS基礎配置
VPS購買平臺不同,一些設置項或功能名稱可能有略微不同,請自行辨別。阿里云比較有代表性,就也以它為例吧~
購買完等待VPS系統(tǒng)初始化后,首先要設置的就是安全組(防火墻),阿里云分了出/入方向(很多服務商不做區(qū)分),我們一般情況僅需添加下圖框內的兩類,如果你擔心安全問題,可以根據(jù)需求逐個開放TCP協(xié)議端口(我直接1~66535全部開啟)。
接下來,要初步啟用服務器有幾件必須做的事情。本篇以我的 Debian 10 為例,其它系統(tǒng)例如Ubuntu也大差不差。
通過SSH連接進入控制臺,類似于NAS,利用工具在控制臺輸入以下命令:
ssh root@106.45.22.34 # 不同系統(tǒng)賬戶名不同,IP為外網(wǎng)或公網(wǎng)IP,這個要注意 sudo -i # debian一般不需要,默認給root apt update # 更新軟件包列表,讓系統(tǒng)知道有哪些軟件包可以更新 apt upgrade --only-upgrade # 安裝所有可用的軟件包更新 apt install wget curl sudo vim git -y # 安裝常用軟件,Debian一般來說需要這步
接下來安裝Docker,接著輸入命令:
wget -qO- get.docker.com | bash # 非大陸服務器安裝docker docker -v # 確認是否安裝成功及查看版本 systemctl enable docker # 設置開機自動啟動 apt install docker-compose # 安裝docker-compose docker-compose --version #查看docker-compose版本
這些工作做完,就可以直接開搞!
部署配置frp服務
??部署并配置frp服務端(VPS)
還是在咱們的VPS服務器上。
大佬牛人就是多,能用docker-compose部署就非常舒服。輸入以下命令:
mkdir -p /root/data/docker_data/frps # 創(chuàng)建安裝目錄 cd /root/data/docker_data/frps # 進入該目錄下 vim docker-compose.yml # 創(chuàng)建并編輯docker-compose.yml文件
具體代碼如下
version: '3' services: frps: image: stilleshan/frps container_name: frps restart: always network_mode: host volumes: - ./frpc.toml:/frp/frpc.toml
英文輸入狀態(tài)下,按i
即可進行修改。修改完畢后,按下esc
,再同時按下shift
+:
,英文狀態(tài)輸入wq
并回車,即可保存。
接著輸入以下命令,創(chuàng)建并配置frps.toml
服務端的配置文件:
vim frps.toml
將以下代碼修改,復制粘貼進去后,保存并退出,操作類似。
這里強調,所有涉及 .toml 相關的配置文件內容,務必刪除所有注釋內容!
bindAddr = "0.0.0.0" bindPort = 7000 quicBindPort = 7000 # 以下兩項注釋變量不在本文最終代碼內,需要折回刪除 # 如果僅需要域名http訪問可去掉井號,取消注釋 # 手動配置自簽/常規(guī)的TLS/SSL證書也可保留 # 但需要進行額外配置,請參考下面引用部分官方手冊 # vhostHTTPPort = 80 # vhostHTTPSPort = 443 webServer.addr = "0.0.0.0" webServer.port = 7500 # frps的web管理端口,公網(wǎng)IP:7500 webServer.user = "admin" webServer.password = "admin" webServer.pprofEnable = false auth.method = "token" auth.token = "12345678"
若按照本文來,則無需參照這個:
為本地HTTP服務啟用HTTPS:https://github.com/fatedier/frp?tab=readme-ov-file#enable-https-for-a-local-https-service
關于TLS設置:https://github.com/fatedier/frp?tab=readme-ov-file#tls
接著輸入命令搭建運行:
docker-compose up -d
??部署并配置frp客戶端(NAS)
打開你需要外網(wǎng)訪問的內網(wǎng)設備,我的這臺為威聯(lián)通NAS。
同樣的,要創(chuàng)建并配置frpc.toml
文件。通過威聯(lián)通的 Text Editor文本編輯器 ,創(chuàng)建一個文本文件,將以下代碼粘貼進去。
serverAddr = "xxx.xxx.xxx.xxx" serverPort = 7000 auth.method = "token" auth.token = "12345678" [[proxies]] name = "web_nas" type = "http" localIP = "192.168.200.110" localPort = 5000 customDomains = ["nas.xxx.com"] # 這是上面解析好的域名,本文最終會換成端口號,請往下看
這個配置有規(guī)律可循,類似的,如果有其它應用往上累加就行。
填寫完畢后,另存新檔命名為frpc.toml
,保存在/share/Container/frpc
目錄下,各位也可自定保存位置。
接著打開威聯(lián)通官方的 Container Station容器管理工具 即可。創(chuàng)建新的應用程序。
代碼如下,注意文件映射路徑:
version: '3' services: frpc: image: snowdreamtech/frpc container_name: frpc restart: always network_mode: host volumes: - /share/Container/frp/frpc.toml:/etc/frp/frpc.toml
查看docker日志,跑起來了,沒啥問題。登陸frpc服務器端面板(公網(wǎng)IP:7500),可以看到已經有內容,因為配置的是http域名訪問,根據(jù)之前frpc配置(vhostHTTPPort = 80),使用80端口,一切都對。
我之所以做frp穿透,原因就是公司有專屬內網(wǎng)嘛,屏蔽了太多東西訪問很不方便(IT震怒哈哈哈),這下直接可以通過域名訪問嘍,但是http顯示不安全。
回歸標題,實現(xiàn)HTTPS域名無端口訪問
??更改配置,改變訪問方式
在frpc客戶端的配置文件做改動,如果全部按照官方文檔來,我認為比較麻煩。
僅需對客戶端(NAS)的配置文件frpc.toml
改動。結果如下:
serverAddr = "xxx.xxx.xxx.xxx" serverPort = 7000 auth.method = "token" auth.token = "12345678" [[proxies]] name = "web_nas" type = "tcp" # http改成tcp localIP = "192.168.200.110" localPort = 5000 remotePort = 9898 # 把二級域名換掉
也就是說,原本web輸入nas.xxx.com
訪問NAS,更改配置后就變成了輸入公網(wǎng)IP:9898
。
修改配置文件后,我們將其保存,NAS端重新部署一下frpc客戶端即可。
此時web端再輸入 公網(wǎng)IP:9898 ,成功訪問,依然http顯示不安全。
??部署Nginx Proxy Manager
過去在威聯(lián)通NAS部署的攻略:https://blog.ydxian.xyz/archives/npm
但這次我們要部署在VPS上。
SSH連接,接著上面的步驟,輸入以下命令:
mkdir -p /root/data/docker_data/npm # 創(chuàng)建安裝目錄 cd /root/data/docker_data/npm # 進入該目錄下 vim docker-compose.yml # 創(chuàng)建并編輯docker-compose.yml文件
將下面代碼粘貼進去:
version: '3' services: nginx-proxy-manager: container_name: nginx-proxy-manager image: jc21/nginx-proxy-manager:latest ports: - '80:80' # 作為反代工具,三個端口皆不建議修改。 - '81:81' # 國內VPS 酌情修改,下同 - '443:443' volumes: - "./data:/data" # 冒號左邊可改路徑,./表示當前路徑下 - "./letsencrypt:/etc/letsencrypt" # 同理 restart: unless-stopped
英文輸入狀態(tài)下,按i
即可進行修改。修改完畢后,按下esc
,再同時按下shift
+:
,英文狀態(tài)輸入wq
并回車,即可保存。
接著我們輸入以下命令開始部署。
docker-compose up -d
部署完畢后,web輸入VPS服務器公網(wǎng)IP:81
并回車即可訪問 Nginx Proxy Manager 的管理界面。
初始賬號密碼如下:
admin@example.com changeme
進去會先彈出界面,填寫你自己的郵箱及更換密碼,設置一個好記憶的,以后繼續(xù)出VPS玩法教程,咱們還會頻繁用它。
按照下圖箭頭所指進行操作。
填寫相關信息,域名不必多說,nas.xxx.com/qb.xxx.com/jellyfin.xxx.com, 在主域名前加前綴,好記為主;關于IP,默認都是172.17.0.1
,不放心的可以SSH輸入ip addr show docker0
查詢;端口號就是VPS對應服務的監(jiān)聽端口號,參考下圖
需要注意的是,如果你的 Nginx Proxy Manager 部署于其它服務器,IP這里就要填寫 frps 所在的服務器公網(wǎng)IP!
接著換到SSL一欄,如下圖進行勾選,最后點擊Save進行保存:
等待自動配置,可能要稍微等會兒,配置填對問題都不大,結果如下。
web再次輸入域名嘗試訪問威聯(lián)通NAS,可以看到:域名、無端口、HTTPS,最終目的達成。
后續(xù)也可以把 Nginx Proxy Manager 自己也反代上,端口號就填81,反正基本啥服務都能代代~
最后
一般來說公網(wǎng)ipv4是最優(yōu)選,用公網(wǎng)ipv6也完全足夠,本文主要是為實在沒轍的朋友提供解決辦法。
如果大伙兒覺得本篇內容還不錯,別忘了三連支持下,能點點關注就更好了!后續(xù)我還會持續(xù)分享各類教程以及有趣好玩的項目。
個人不太喜歡花精力擼免費VPS,也不太放心~本期成本:8+139≈150RMB/年
??性價比還不錯的國內云服務商:
Ucloud-筆者自用(目前建議:2核2G 60GB 峰值帶寬30Mbps 流量包600GB/月 139RMB/年 續(xù)費同價)。
該內容正在參與「夏日挑戰(zhàn)賽」征稿活動,分享你的夏日日常,看看誰最會過夏天,贏大額現(xiàn)金,2萬金幣!查看詳情→
,