適用前提:你的寬頻已經是 IPv4 + IPv6 雙棧(不確定的話先去 IPv6 檢測工具 測一次)
目標:從外網用 IPv6 直接連到家裡的 NAS —— 不做連接埠轉發、不裝 frp、不買中轉
耗時:約 30 分鐘,其中一半時間花在「確認位址到底變不變」上
先把一個誤會說清楚:IPv6 不需要連接埠轉發,但需要防火牆放行
很多人第一次配 IPv6 直連時會卡在同一個地方:路由器裡找了半天「IPv6 連接埠轉發」,結果根本沒有這個選單,於是以為自己路由器不支援。
其實是概念對不上。
IPv4 時代之所以要做連接埠轉發(NAT 轉發),是因為你家裡所有設備共用一個公網 IPv4,路由器必須知道「外面來的 5000 連接埠該丟給哪台機器」:
外網 → 公網 IPv4:5000 → 路由器查 NAT 表 → 192.168.1.100:5000(NAS)
↑ 這一步就是連接埠轉發
IPv6 下每台設備自己就有公網位址,路由器不需要翻譯,只需要決定「這個封包放不放進來」:
外網 → [2408:xxxx:xxxx:xxxx::100]:5000 → 路由器 IPv6 防火牆 → NAS
↑ 只有「放行/攔截」,沒有轉譯
所以:
路由器 IPv6 防火牆預設是「全部入站拒絕」的,這是設計如此、也是應該的。你要做的就是給 NAS 那個位址、那幾個連接埠開一個口子。找選單的時候別找「連接埠轉發」,找 「IPv6 防火牆」。
直連比中轉快在哪
這裡不吹具體倍數(不同線路差別太大,任何統一數字都是編的),只說結構上的差別:
- 走中轉/穿透:你的資料
NAS → 中轉伺服器 → 你,多繞一圈,且上限被中轉節點的頻寬和它的付費方案卡死 - 走 IPv6 直連:
NAS → 你,走電信商骨幹,上限是你家寬頻的上行頻寬
家用寬頻上行通常是 30–50 Mbps(千兆寬頻),這個數字才是你直連看片、拉檔案的天花板。中轉方案往往連這個數字都跑不滿,這才是「直連更快」的真正來源。
第一步:確認你確實是雙棧
打開 17NAS 的 IPv6 檢測,看結果屬於哪一類:
注意一個陷阱:這個測試測的是「你現在這台設備」的出口。手機連 WiFi 測出來有 IPv6,不代表 NAS 也有 —— NAS 可能插在一台不轉發 IPv6 的交換器/軟路由後面,或者本身把 IPv6 關了。所以下一步要單獨確認 NAS。
順帶記住測出來的位址前綴(2408:/240e:/2409: 這些),後面對照 NAS 位址會用到。
第二步:確認 NAS 拿到的是「公網 IPv6」
IPv6 位址不是有就行,得是公網可路由的那一種。三類位址一定要分清:
fe80::fd00:: ~ fdff::2000::/3(即 2xxx: 240e: 2408: 2409: 240c: 等)各平台查看方法
群暉 DSM:控制台 → 網路 → 網路介面 → 選取區域網路 → 編輯 → IPv6,模式選「自動」,下方會顯示取得的位址。
威聯通 QTS:主控台 → 網路和虛擬交換器 → 介面 → 對應網卡 → IPv6。
飛牛 / Linux / 群暉 SSH:
ip -6 addr show scope global
Windows(如果 NAS 是 Windows 或軟路由虛擬機):
ipconfig /all
如果 NAS 只有 fe80:: 開頭的位址,說明路由器沒有向內網下發 IPv6 前綴。回到路由器:
- WAN 埠 IPv6 連線類型:選 DHCPv6 或 SLAAC(國內電信商基本都是 DHCPv6-PD)
- 前綴取得方式:DHCPv6-PD(前綴委派),前綴長度一般
/60或/56 - LAN 埠分配方式:SLAAC 或 SLAAC + 無狀態 DHCPv6
改完等 1–2 分鐘,NAS 上重新查。還是沒有就把 NAS 網卡停用再啟用一次。
第三步(最容易被跳過的一步):讓 NAS 的位址穩定下來
配好之後過兩天突然連不上了,八成栽在這裡。IPv6 位址由兩部分拼成:
2408:8210:1234:5678 : a1b2:c3d4:e5f6:0789
└── 前綴(電信商給) ──┘ └── 介面 ID(設備自己定)──┘
兩部分都可能變,但原因和對策完全不同。
變化一:介面 ID 變(IPv6 隱私擴充)
為了防止被透過固定位址追蹤,很多系統預設啟用「臨時位址/隱私擴充」,介面 ID 每天甚至每幾小時換一次。桌上型電腦上這是好事,NAS 上是災難 —— 你的 DDNS 永遠追不上。
怎麼判斷自己中招了:
ip -6 addr show scope global
輸出裡如果出現 temporary 或 secondary 字樣,就是臨時位址。另一個土辦法:位址中間含有 ff:fe 的是 EUI-64 位址(由網卡 MAC 推導,天生穩定);一串看不出規律又天天變的,就是臨時位址。
關掉它:
Linux / 飛牛 / 群暉 SSH:
# 暫時生效,先驗證
sudo sysctl -w net.ipv6.conf.all.use_tempaddr=0
sudo sysctl -w net.ipv6.conf.default.use_tempaddr=0
# 確認沒問題後寫進 /etc/sysctl.conf 永久生效
echo "net.ipv6.conf.all.use_tempaddr=0" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.default.use_tempaddr=0" | sudo tee -a /etc/sysctl.conf
Windows(管理員 PowerShell / CMD):
netsh interface ipv6 set global randomizeidentifiers=disabled
netsh interface ipv6 set privacy state=disabled
群暉 DSM / 威聯通預設使用 EUI-64,介面 ID 一般是穩定的,但仍建議按上面的方法確認一遍,不同版本行為不一樣。
變化二:前綴變(電信商換 IP)
這個你控制不了。中華電信/遠傳/台灣大等家用寬頻在光貓重撥、線路割接、長時間連線後,都可能換一個新前綴。表現是:位址後半截沒變,前面 4 組變了。
對策只有一個:DDNS(第七步細講)。別想著手動配靜態 IPv6 —— 前綴一變,靜態配的位址立刻作廢。
如果路由器支援「IPv6 介面 ID 手動指定」(OpenWrt、愛快、部分華碩機型有),可以把 NAS 的介面 ID 固定成好記的值比如 ::100,這樣前綴變了也只是位址的前半截改變,排查起來省事很多。
第四步:路由器 IPv6 防火牆放行
核心動作:允許遠端存取 NAS 的完整 IPv6 位址 的 指定連接埠。
先確定要開哪些連接埠。常見的:
能只開一個 443 走反代,就別開一堆。 每多開一個連接埠,就是多一個被掃的入口。
各品牌操作位置
華碩(ASUS)
防火牆 → IPv6 防火牆 → 啟用 IPv6 防火牆 = 是 → 新增規則:
::100)5001TP-LINK
IPv6 設定 → 防火牆 /「IPv6 轉發規則」(不同韌體叫法不一),填 NAS 的 IPv6 位址和連接埠。部分舊韌體只有「IPv6 防火牆 開/關」總開關。
小米 / 紅米
一般路由 → 進階設定 → IPv6 設定,多數機型只有防火牆總開關。若只能關總開關,務必把安全防護做在 NAS 端(第八步)。
華為
更多功能 → 安全設定 → IPv6 防火牆,選「自訂」後新增放行規則;選「關閉」等於全放行,不推薦。
OpenWrt / iStoreOS(最精確,推薦)
SSH 上去執行:
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-NAS-DSM'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].dest='lan'
uci set firewall.@rule[-1].proto='tcp'
uci set firewall.@rule[-1].dest_ip='2408:xxxx:xxxx:xxxx::100'
uci set firewall.@rule[-1].dest_port='5001'
uci set firewall.@rule[-1].family='ipv6'
uci set firewall.@rule[-1].target='ACCEPT'
uci commit firewall
/etc/init.d/firewall restart
其中 dest_ip 換成你 NAS 的實際位址。前綴變了這條規則會失效 —— 更穩的寫法是只匹配介面 ID,OpenWrt 支援用 ::100/::ffff:ffff:ffff:ffff 這種遮罩形式,具體版本差異較大,配完務必用第六步的方法實測。
光貓也可能攔一道
如果你的光貓是路由模式(自己撥號),那麼資料要先過光貓再過路由器,光貓上的 IPv6 防火牆同樣會攔。這種雙層結構非常難調。
強烈建議先把光貓改成橋接、由路由器撥號,只留一層。參考:教你 10 分鐘搞定光貓改橋接。
⚠️ 不要圖省事直接把 IPv6 防火牆整個關掉。 那等於把 NAS 上所有監聽連接埠(包括 SMB、SSH、資料庫、Docker 裡那一堆容器)全部暴露到公網。寧可多點兩下加規則。
第五步:別忘了 NAS 自己的防火牆
路由器放行了,NAS 自己還有一道。這是「路由器規則明明加了卻還是不通」的高頻原因。
群暉 DSM:控制台 → 安全性 → 防火牆。檢查規則裡的「來源 IP」,如果你之前只寫了 IPv4 網段(比如 192.168.1.0/24),IPv6 流量會被預設規則攔掉。需要新增一條允許對應連接埠、來源為「所有」的規則。
威聯通:主控台 → 系統 → 安全性 → 允許/拒絕清單。
Linux(ufw):
sudo ufw allow proto tcp to any port 5001
sudo ufw status verbose
注意 /etc/default/ufw 裡的 IPV6=yes 必須打開(新版預設開),否則規則只作用於 IPv4。
Docker 部署的服務要單獨驗證。容器網路的 IPv6 行為取決於 Docker 版本和 daemon 設定,-p 5001:5001 在有的環境下 IPv6 能通、有的不能,不要憑經驗假設,直接用下一步的方法實測。如果實測不通,兩個常見解法:
- 容器改用
network_mode: host(最省事) - 在
/etc/docker/daemon.json裡開啟 IPv6 支援("ipv6": true配合"ip6tables": true),改完重啟 dockerd
第六步:驗證 —— 從公網真實回連
這一步別用「我在家連一下試試」糊弄過去。內網能通不代表公網能通:你在家存取 NAS 的 IPv6 位址,封包壓根沒出過路由器,防火牆規則有沒有生效完全測不出來。
必須從外部驗證。下面兩條指令直接在 NAS 上(SSH 或群暉的終端機)執行,是最快的辦法:
1. 先確認 NAS 自己有 IPv6 出口,並拿到它的公網位址
curl -6 https://v6.17nas.com
正常會直接回一個位址,比如 2408:8210:1234:5678:a1b2:c3d4:e5f6:789。
- 報錯 / 逾時 → NAS 根本沒有 IPv6 出口,回第二步
- 回來的位址和你在 DSM 裡看到的不一致 → 多半是臨時位址在作怪,回第三步
想連帶看歸屬地和電信商:
curl -6 "https://v6.17nas.com?format=json"
2. 讓公網伺服器主動回連你的連接埠
curl -6 "https://17nas.com/api/tools/port-check.php?port=5001"
這個介面會從 17NAS 的伺服器主動向你剛才那個位址的指定連接埠發起一次 TCP 連線,然後把結果告訴你。回傳類似:
{"success":true,"status":"open","ip":"2408:8210:...","port":5001,"ip_version":6,"latency_ms":24}
status 三種結果,對應三種完全不同的問題:
openrefusedfiltered能區分 refused 和 filtered,就能省掉一半瞎試的時間 —— 前者別再折騰路由器了,後者別再折騰 NAS 了。
注意:這個介面只會回連發起請求的那個位址,不接受指定任意 IP。所以指令必須在 NAS 上跑,在你電腦上跑測的是你電腦。每小時限 30 次。
3. 瀏覽器驗證(記得加方括號)
IPv6 位址裡全是冒號,瀏覽器會把它當連接埠分隔符,必須用方括號包起來:
❌ https://2408:8210:1234:5678::100:5001
✅ https://[2408:8210:1234:5678::100]:5001
用手機關掉 WiFi、走 4G/5G 打開這個位址,這是最貼近真實使用情境的驗證。如果手機電信商網路沒有 IPv6,會打不開 —— 這不是你配錯了,是手機那端的問題。
第七步:位址會變,所以要配 DDNS(AAAA 記錄)
現在能連了,但位址是一串沒人記得住的十六進位,而且前綴隨時會變。解決方案是把網域的 AAAA 記錄(IPv6 用 AAAA,IPv4 才是 A)自動指向目前位址。
方案 A:ddns-go(推薦,圖形介面)
支援 Cloudflare、阿里雲、騰訊雲、DNSPod 等,Docker 一行起:
docker run -d --name ddns-go --restart=always \
--network=host \
-v /opt/ddns-go:/root \
jeessy/ddns-go
存取 http://NAS 內網 IP:9876 設定。關鍵設定:
- 啟用「IPv6」,網域類型選 AAAA
- 取得方式:優先選「透過網卡取得」,然後用正規表示式過濾掉臨時位址
- TTL 設成 60–120 秒,預設的 600 秒意味著前綴變了要等 10 分鐘
方案 B:自己寫腳本(最簡單可靠)
配合前面那個介面,一條 cron 就夠了。以 Cloudflare 為例:
#!/bin/bash
# /opt/ddns6.sh —— 每 5 分鐘同步一次 AAAA 記錄
TOKEN="你的_Cloudflare_API_Token"
ZONE_ID="你的_Zone_ID"
RECORD_ID="AAAA記錄的_Record_ID"
NAME="nas.example.com"
IP6=$(curl -6 -sS --max-time 10 https://v6.17nas.com)
[ -z "$IP6" ] && exit 0 # 取不到就不動,別把記錄清空
LAST=$(cat /tmp/.ddns6_last 2>/dev/null)
[ "$IP6" = "$LAST" ] && exit 0 # 沒變就不發請求
curl -sS -X PUT \
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"AAAA\",\"name\":\"$NAME\",\"content\":\"$IP6\",\"ttl\":120,\"proxied\":false}" \
&& echo "$IP6" > /tmp/.ddns6_last
加執行權限並掛到 crontab:
chmod +x /opt/ddns6.sh
crontab -e
# 加入這行
*/5 * * * * /opt/ddns6.sh >> /var/log/ddns6.log 2>&1
ZONE_ID 在 Cloudflare 網域總覽頁右下角;RECORD_ID 需要先手動建一條 AAAA 記錄,再用 API 列出記錄拿到。
三個容易踩的點:
- 腳本必須跑在 NAS 上,因為
curl -6 v6.17nas.com回傳的是「發起請求那台機器的位址」。跑在路由器上拿到的是路由器的位址,兩者不一樣。 proxied必須是false。開了 Cloudflare 小黃雲,流量就繞回中轉了,直連的意義沒了(而且 5000/5001 這類連接埠小黃雲也不代理)。- 取不到位址時不要更新記錄。上面腳本裡那句
[ -z "$IP6" ] && exit 0就是幹這個的 —— 見過太多人網路抖一下把 AAAA 記錄刷成空值,然後花兩小時排查「網域怎麼突然解析不了」。
第八步:安全 —— 這一步比前面七步加起來都重要
必須清醒地認識到:IPv6 直連意味著你的 NAS 真真切切地站在公網上,沒有 NAT 幫你擋任何東西了。
有個流傳很廣的錯誤安慰是「IPv6 位址空間那麼大,掃不到我」。這在 2018 年也許成立,現在不成立了。攻擊者不再暴力遍歷位址空間,而是從這些地方直接拿到活躍位址:
- 憑證透明日志(CT Log):你用 Let's Encrypt 給
nas.example.com簽了憑證,這個網域當天就會出現在公開的 CT 日志裡,任何人可查 - DNS 記錄爆破:
nas.home.syno.ds.這類子網域是字典裡的頭幾條 - 被動 DNS 資料庫、你自己在論壇貼過的截圖
結論:只要你配了網域,就要假設位址已經公開。 安全必須靠設定本身,不能靠「沒人知道我」。
必做清單
連接埠層面
- 只放行必要連接埠,能用反代收斂到 443 就只開 443
- 絕對不要暴露:
445/139(SMB,勒索軟體的頭號入口)、111/2049(NFS)、3389(RDP)、3306/5432(資料庫)、Docker 的2375 - 管理連接埠(DSM 5000/5001、QTS 8080)改成 10000 以上的非常見連接埠
- SSH 非必要不開;要開就改連接埠 + 停用密碼登入、只用金鑰
帳號層面
- 停用/改名預設管理員帳號(群暉的
admin、威聯通的admin),這是掃描器的第一發子彈 - 管理員帳號開兩步驗證(2FA),這一項的性價比最高
- 密碼 16 位以上,不與其他網站重複
防護層面
- 群暉:控制台 → 安全性 → 帳戶 → 開啟自動封鎖(建議 5 分鐘內失敗 5 次封鎖 IP)
- 開啟通知,登入成功/失敗推送到手機
- 系統和套件保持更新 —— 群暉、威聯通歷史上都出過被大規模利用的遠端漏洞,打補丁比什麼都管用
加密層面
- 一律走 HTTPS,別用明文 HTTP 傳密碼
- 申請憑證優先使用 DNS-01 驗證(在 DNS 裡加一條 TXT 記錄),不需要開放 80 連接埠,也不受「電信商封 80」影響
- 群暉 DSM 內建的 Let's Encrypt 走的是 HTTP-01,需要 80 連接埠可達;如果 80 被封,改用 acme.sh 走 DNS-01
再進一步
- 如果只有你自己和家人用,最穩的做法是不直接暴露 Web 面板,而是只開一個 WireGuard/Tailscale 入口,建立加密組網連線後再存取內網。IPv6 直連在這裡依然有價值 —— 它讓 WireGuard 能直接建立點對點連線,不用中轉
- 定期翻一遍登入日志(群暉:控制台 → 日志中心)
常見問題速查
curl -6 v6.17nas.com 逾時fe80:: 位址filteredrefusedhttp://[位址]:連接埠network_mode: host 或給 dockerd 開 IPv6什麼時候 IPv6 直連不夠用
誠實地說,IPv6 直連有一個硬性前提:存取端也必須有 IPv6。以下情境會翻車:
- 公司/學校內網(大量企業網路至今純 IPv4)
- 部分飯店、公共 WiFi
- 少數還沒開通 IPv6 的寬頻方案
- 需要分享給別人存取,而對方的網路環境你控制不了
這些情況下需要一個「IPv4 落地點」作為補充。常見做法是用 CDN/邊緣節點做 IPv4 到 IPv6 的回源轉換 —— 訪客用 IPv4 存取 CDN,CDN 用 IPv6 回源到你家 NAS。具體可以看:無公網 IPv4 怎麼辦?騰訊雲 EdgeOne + IPv6 實現家庭寬頻內網穿透。
最佳實踐是兩條腿走路:IPv6 直連作為主路徑(快、免費、無限流量),CDN 或 Tailscale 作為兜底。
相關工具與延伸閱讀
設定過程中會用到的檢測工具:
- IPv6 連通性檢測 —— 確認雙棧狀態、查看出口位址與電信商
- 連接埠轉發檢測 —— 從公網回連驗證連接埠是否真的開放
- NAT 類型檢測 —— 如果還要折騰 P2P、遊戲連線、WireGuard 打洞
延伸閱讀:
- IPv6 vs IPv4 深度解析:全平台開啟 IPv6 保姆級教學 —— 各系統開啟 IPv6 的詳細步驟
- 無需公網 IPv4,告別內網穿透!家庭寬頻開啟 IPv6 及路由器防火牆設定教學
- 教你 10 分鐘搞定光貓改橋接 —— 雙層 NAT 是 IPv6 設定失敗的常見根源
最後再強調一遍:第六步的驗證一定要做,第八步的安全一定要做。前者省時間,後者省的可能是你整個 NAS 上的資料。
資料參考:想知道你所在縣市和電信商的 IPv6 普及情況,可以查看 台灣各省 IPv6 可達率統計(近 30 天真實測試樣本,每小時更新)。
