NordVPN 支援 OpenWrt 嗎?
有消息指出,具備 OpenWRT 韌體的路由器支援 NordVPN 等 VPN。但請注意,NordVPN 員工尚未測試以下設定,而是由我們出色的客戶分享並測試出來的流程。 NordVPN 在此特別感謝 OpenWRT 社群的活躍成員 Unwind,感謝這名成員持續協助並提供我們最新的 OpenWRT 說明。 若您想使用 nordvpnlite 設定 NordVPN,請參閱我們的指南。
GUI 操作說明
本指南將介紹透過 LuCI 網頁介面,如何使用 OpenWrt 韌體的路由器設定 NordVPN 連線。
- 在網際網路瀏覽器輸入 OpenWrt 路由器本機 IP 位址並登入,即可存取其 LuCI 介面。 預設 IP 位址為 192.168.1.1,而使用者名稱為 root。
注意:系統預設未設定密碼,因此您可以將此項留空。 不過登入時,您會收到要求設定密碼的系統訊息。
為此,請按一下「系統」>「管理」,即可在此設定密碼。
- 登入後,選擇「系統」分頁,並選擇「軟體」。
- 按一下「更新清單」按鈕,等待流程完成,並按一下「忽略」。
- 在「篩選」欄位輸入以下套件的名稱,並按一下「安裝…」即可。
- openvpn-openssl
- ip-full
- luci-app-openvpn
- 按一下「儲存並套用」,並重新整理路由器頁面。 您現在應能看到名為「VPN」的新分頁。 按一下該分頁,並從下拉式選單中選擇「OpenVPN」。
- 現在需下載 OpenVPN 用戶端設定檔。 隨後,您可以透過您的 NordAccount 連線至推薦的伺服器。
請按照以下步驟查找用於手動連線設定的服務憑證:-
-
登入您的 Nord 帳戶,按一下 NordVPN,然後在手動設定下按一下服務憑證0>。 您將找到您的使用者名稱和密碼,手動連線時需要用到它們。
- 現在必須下載 OpenVPN 用戶端設定檔。
請按照以下步驟為您的連線尋找首選伺服器:-
登入您的 Nord 帳戶,然後按一下 NordVPN。
- 向下捲動至進階設定,並按一下手動設定 NordVPN。
- 選擇推薦伺服器分頁。 我們的演算法將根據您的位置推薦最適合的伺服器。
- 按下進階篩選條件,就可以選擇伺服器類型和安全通訊協定來自訂推薦的伺服器。
如欲選擇特定的伺服器,請按照以下步驟操作:- 在手動設定 NordVPN中,選擇OpenVPN 設定檔**。
- 使用搜尋列或向下捲動,可以找到想要連線的伺服器。 然後,您就可以按一下下載 UDP 或下載 TCP。
在本指南中,我們將使用 us5104.nordvpn.com 伺服器。
- 在手動設定 NordVPN中,選擇OpenVPN 設定檔**。
-
登入您的 Nord 帳戶,然後按一下 NordVPN。
-
登入您的 Nord 帳戶,按一下 NordVPN,然後在手動設定下按一下服務憑證0>。 您將找到您的使用者名稱和密碼,手動連線時需要用到它們。
-
- 在上傳 OVPN 設定檔區段中,於執行個體名稱欄位命名 VPN 連線(我們命名為「nordvpn_us")。 然後,按一下選擇檔案,尋找已下載好的伺服器檔案,再按一下上傳。
- 在 OpenVPN 執行個體區段中,按一下已建立執行個體旁邊的編輯按鈕。
-
在下方欄位中,分行輸入 NordVPN 服務憑證的使用者名稱和密碼。
使用者名稱
密碼您可以在 Nord 帳戶儀表板中找到您的 NordVPN 服務憑證(使用者名稱和密碼)。
- 現在,複製包含憑證欄位正上方提供的憑證檔案路徑,並將其貼至上方設定檔區段中的「auth-user-pass」行旁邊。
畫面應如下所示:auth-user-pass /etc/openvpn/nordvpn_us.auth
- 如欲連線至 VPN 伺服器,請按一下已啟用核取方塊,然後按一下已建立 NordVPN 執行體旁的開始按鈕。
- 按一下位於底部的儲存並套用按鈕。
- 在導覽選單頂部,將滑鼠停在系統,並按一下重新啟動。 畫面上將開啟另一個頁面。 按一下執行重啟按鈕,然後必須重新登入。
- 將滑鼠停在頁面頂部的網路分頁,並選擇介面:
1. 按一下新增介面。
2. 在名稱部分,輸入 nordvpntun。
3. 按一下通訊協定並選擇未管理。
4. 在介面下拉式選單中,在底部的 --自訂-- 欄位中輸入名稱 tun0,然後按 Enter 鍵。
- 按一下建立介面並儲存。
- 選擇頂部的網路分頁,並前往防火牆部分。
- 按一下新增按鈕,並按如下方式進行調整:
- 將其命名為「vpnfirewall」。
- 將「輸入」選項設定為「拒絕」。
- 將「輸出」設定為「接受」,並將「轉發」設定為「拒絕」。
- 勾選「偽裝」選項。
- 勾選「MSS 鉗制」選項。
- 從「已覆蓋網路」下拉式選單中選擇「nordvpntun」。
- 在「允許從來源區域轉發」下拉式選單中,選擇「lan」。
- 按一下「儲存」按鈕。
- 在區域區段中,找到名為 Lan 的區域,並按一下編輯按鈕。
- 在允許轉發至目的地區域下拉式選單中,選取 NordVPN 項目。
- 再次按一下位於頁面頂部的網路,然後從下拉式選單中選擇 DHCP 與 DNS。
- 在一般設定標籤中找到「DNS 轉發」選項,並填入 NordVPN 的 DNS 地址。 地址為:103.86.96.100 and 103.86.99.100
- 切換至「resolv 和 hosts 檔案」標籤,勾選「忽略 resolv 檔案」核取方塊,然後按一下「儲存並套用」按鈕。
- 返回 VPN > OpenVPN分頁。
- 在「OpenVPN 執行個體」部分,勾選清單中 NordVPN 選項旁邊的「啟用」選項,然後按一下「儲存並套用」按鈕。
- 再次按一下開始按鈕,即可連上 VPN 伺服器。
CLI 操作說明
如果您期望看到更進階的教學,請按照本指南進行操作。 為了在 OpenWrt 上享有 VPN 的各項好處,您需要一台同時具備 OpenWrt 韌體且啟用 OpenVPN 用戶端的路由器。 該韌體的首頁是 https://openwrt.org/。
- 首先,您必須使用 SSH 的區域網路 (LAN) IP 位址存取路由器。 預設情況下,IP 位址為 192.168.1.1,使用者名稱為 root;不過,如果您變更了任何預設值,IP 位址可能會有所不同。
-
路由器的預設韌體映像檔中並無 OpenVPN 套件。 如欲安裝此套件,請執行以下指令:
opkg update opkg install openvpn-openssl opkg install ip-full此外,您也可以安裝 OpenVPN 設定的 LuCI 元件,不過此元件為選擇性安裝。 執行這串指令即可進行安裝:
opkg install luci-app-openvpn -
安裝好 OpenVPN 套件後,若希望套件在路由器開機時自動啟動,可執行以下命令:
/etc/init.d/openvpn enable - 接著,您將需要下載伺服器設定檔。 請按照以下步驟操作:
-
登入您的 Nord 帳戶,然後按一下 NordVPN。
- 向下捲動至進階設定,並按一下手動設定 NordVPN。
- 選擇推薦伺服器分頁。 我們的演算法將根據您的位置推薦最適合的伺服器。
- 按下進階篩選條件,就可以選擇伺服器類型和安全通訊協定來自訂推薦的伺服器。
如欲選擇特定的伺服器,請按照以下步驟操作:- 在手動設定 NordVPN中,選擇OpenVPN 設定檔**。
- 使用搜尋列或向下捲動,可以找到想要連線的伺服器。 然後,您就可以按一下下載 UDP 或下載 TCP。
- 在手動設定 NordVPN中,選擇OpenVPN 設定檔**。
-
登入您的 Nord 帳戶,然後按一下 NordVPN。
-
在本指南中,我們使用了伺服器 uk2054.nordvpn.com;不過,您應當使用網站建議的伺服器。
若要下載伺服器設定檔,請選擇您希望連線的國家/地區,按一下「顯示可用通訊協定」,以滑鼠右鍵按一下「OpenVPN TCP」或「OpenVPN UDP」對應的「下載設定」,然後選擇「複製連結位址」。
隨後,返回您的 SSH 連線階段,並執行以下指令:wget -P /etc/openvpn https://downloads.nordcdn.com/configs/files/ovpn_udp/servers/uk2054.nordvpn.com.udp.ovpn
不過,請記得使用為特定伺服器檔案所複製的連結。 這串指令會將設定檔下載至 /etc/openvpn 目錄,方便快速存取。
也可以將伺服器設定檔下載至不同的裝置上,並使用 SCP 或 SFTP 通訊協定等替代方式,將其轉移至 OpenWrt 路由器。
針對較舊的 OpenWrt 版本:
您只需在此處下載封存檔案:https://downloads.nordcdn.com/configs/archives/certificates/servers.zip。 在下載好的檔案中,您會找到 .crt 和 .key 副檔名的對應檔案。 這些是每個 VPN 伺服器的特有檔案。
-
每當 OpenVPN 啟動時,NordVPN 的 OpenVPN 設定會要求您輸入 NordVPN 服務憑證的使用者名稱和密碼。 不過,我們將進行一些調整,以便自動提供憑證。
為了讓流程更加簡便,請先執行以下指令來安裝 nano 文字編輯器:opkg install nano或者,您也可以使用內建的 vi 文字編輯器。 如需獲取有關文字編輯器的更多資訊,請參閱這篇文章。
現在,請使用 nano 文字編輯器開啟下載好的伺服器設定檔。 在本範例中的指令為:nano /etc/openvpn/uk2054.nordvpn.com.udp.ovpn然後,將單字「secret」(不含引號)添加至字串「auth-user-pass」尾端。 最後整串指令應如下所示:
auth-user-pass secret您必須建立一個新的密鑰檔案來儲存 NordVPN 服務的憑證。 為此,請執行以下指令:
nano /etc/openvpn/secret此操作將使用 nano 文字編輯器建立並開啟新檔案。
在檔案的第一行中,請輸入 NordVPN 服務使用者名稱,並於第二行輸入 NordVPN 服務密碼。您可以在 Nord 帳戶儀表板中找到您的 NordVPN 服務憑證(使用者名稱和密碼)。
- 以下兩種方式均可使用下載好的設定檔設定 OpenVPN:
-
將檔案的副檔名從 .ovpn 變更為 .conf,這麼一來,OpenVPN 就能透過副檔名自動找到檔案。
為此,可以使用 mv 指令:mv /etc/openvpn/uk2054.nordvpn.com.udp.ovpn /etc/openvpn/uk2054.nordvpn.com.udp.conf -
使用以下的「uci」指令,將檔案名稱指定為「/etc/config/openvpn」:
uci set openvpn.nordvpn=openvpn uci set openvpn.nordvpn.enabled='1' uci set openvpn.nordvpn.config='/etc/openvpn/uk2054.nordvpn.com.udp.ovpn' uci commit openvpn之後,「/etc/config/openvpn」的檔案結尾應已新增以下字串:
config openvpn 'nordvpn' option enabled '1' option config '/etc/openvpn/uk2054.nordvpn.com.udp.ovpn'如欲進行確認,請執行這串指令:
tail /etc/config/openvpn您也可以將檔案的副檔名從 .ovpn 改為 .conf,並於「/etc/config/openvpn」檔案中指定該副檔名。但若是這種情況,OpenVPN 僅會透過該設定檔啟動一次。
-
-
請執行以下指令,建立新網路介面:
uci set network.nordvpntun=interface uci set network.nordvpntun.proto='none' uci set network.nordvpntun.ifname='tun0' uci commit network「/etc/config/network」檔案的檔案結尾現在應已新增以下字串:
config interface 'nordvpntun' option proto 'none' option ifname 'tun0'如欲進行確認,請執行這串指令:
tail /etc/config/network -
透過執行以下指令建立新防火牆區域,並新增從區域網路轉發至 VPN 的規則:
uci add firewall zone uci set firewall.@zone[-1].name='vpnfirewall' uci set firewall.@zone[-1].input='REJECT' uci set firewall.@zone[-1].output='ACCEPT' uci set firewall.@zone[-1].forward='REJECT' uci set firewall.@zone[-1].masq='1' uci set firewall.@zone[-1].mtu_fix='1' uci add_list firewall.@zone[-1].network='nordvpntun' uci add firewall forwarding uci set firewall.@forwarding[-1].src='lan' uci set firewall.@forwarding[-1].dest='vpnfirewall' uci commit firewall如果步驟執行正確,「/etc/config/firewall」檔案結尾應已新增以下字串:
config zone option name 'vpnfirewall' option input 'REJECT' option output 'ACCEPT' option forward 'REJECT' option masq '1' option mtu_fix '1' list network 'nordvpntun' config forwarding option src 'lan' option dest 'vpnfirewall'如欲進行確認,請執行這串指令:
tail -13 /etc/config/firewall這將顯示最後 13 行,其中包含前面的字串。
-
現在必須設定 DNS 伺服器。 最直接的方法是使用 NordVPN DNS 作為路由器的廣域網路 (WAN) 介面。 若要新增 NordVPN DNS,請執行以下指令:
uci set network.wan.peerdns='0' uci del network.wan.dns uci add_list network.wan.dns='103.86.96.100' uci add_list network.wan.dns='103.86.99.100' uci commit
注意:如果在執行 uci del network.wan.dns 指令後收到錯誤資訊「uci: Entry not found」,您可以忽略該資訊。
檔案「/etc/config/network」應包含「wan」區段,並附上以下三行字串:config interface 'wan' <...> option peerdns '0' list dns '103.86.96.100' list dns '103.86.99.100'
您可以透過執行該指令,並在輸出中查找「wan」介面來進行確認:cat /etc/config/network您也可以透過執行以下指令,新增不同的 DNS 位址(例如 Google 的 DNS):
uci set network.wan.peerdns='0' uci del network.wan.dns uci add_list network.wan.dns='8.8.8.8' uci add_list network.wan.dns='8.8.4.4' uci commit附加的字串應與之前的字串相似。
(選用)適用 OpenWRT 22.02 或舊版 (iptables) 的 Kill Switch
在 VPN 通道斷線時,如欲避免流量外洩,請按照以下步驟操作:
-
使用文字編輯器開啟防火牆檔案:
sudo nano /etc/firewall.user -
新增以下內容:
# This file is interpreted as a shell script. # Put your custom iptables rules here, and they will be executed with each firewall (re-)start # Internal uci firewall chains are flushed and recreated on reload, so # put custom rules into the root chains, e.g. INPUT or FORWARD, or into the # special user chains, e.g. input_wan_rule or postrouting_lan_rule. if (! ip a s tun0 up) && (! iptables -C forwarding_rule -j REJECT); then iptables -I forwarding_rule -j REJECT fi -
執行這串指令,在「/etc/hotplug.d/iface」資料夾建立名為「99-prevent-leak」的檔案:
nano /etc/hotplug.d/iface/99-prevent-leak -
在指令碼中新增以下內容:
#!/bin/sh if [ "$ACTION" = ifup ] && (ip a s tun0 up) && (iptables -C forwarding_rule -j REJECT); then iptables -D forwarding_rule -j REJECT fi if [ "$ACTION" = ifdown ] && (! ip a s tun0 up) && (! iptables -C forwarding_rule -j REJECT); then iptables -I forwarding_rule -j REJECT fi
(選用)適用 OpenWRT 22.03 或新版 (nftables) 的 Kill Switch
如果 VPN 通道無法正常運作,請按照下列步驟操作。
-
編輯自訂防火牆規則檔案:
sudo nano /etc/firewall.user -
寫入此功能:
# when tun0 interface is down and within nftables no chain "forwarding_rule" exists, then do the following. if (! ip a s tun0 up) && (! nft list chain inet fw4 forwarding_rule; then # add new chain named forwarding_rule nft add chain inet fw4 forwarding_rule # add rule within chain forward to jump to chain forwarding_rule nft add rule inet fw4 forward jump forwarding_rule # add rule within chain forward_rule to reject all traffic nft add rule inet fw4 forwarding_rule reject fi -
接著需要建立自動啟用 Kill Switch 的 hotplug 指令碼:
sudo nano /etc/hotplug.d/iface/99-prevent-leak -
將以下內容寫入指令碼:
if [ "$ACTION" = ifup ] && (ip a s tun0 up) && (nft list chain inet fw4 forwarding_rule | grep -q 'reject'); then nft flush chain inet fw4 forwarding_rule fi # if action ifdown is triggered, interface tun0 is not up and the nftables chain "forwarding_rule" does not contain text "reject", then add a rule to that chain in order to reject all traffic. if [ "$ACTION" = ifdown ] && (! ip a s tun0 up) && (! nft list chain inet fw4 forwarding_rule | grep -q 'reject'); then nft add rule inet fw4 forwarding_rule reject fi
自動重新連線指令碼
OpenVPN 連線有時可能會當掉,而連線日誌中會出現類似「無法解析主機… (couldn’t resolve host…)」的內容。 VPN 通道在這種情況下仍持續存在,但是 VPN 會斷線。 如欲建立能重新連上 VPN 的指令碼,請按照以下步驟操作:
-
使用文字編輯器開啟「/etc/rc.local」檔案:
sudo nano /etc/rc.local -
新增以下字串:
/etc/openvpn/reconnect.sh & -
執行這串指令,在「/etc/openvpn」目錄中建立「reconnect.sh」檔案:
sudo nano /etc/openvpn/reconnect.sh -
請在檔案中輸入以下指令碼:
#!/bin/sh n=10 while sleep 50; do t=$(ping -c $n 8.8.8.8 | grep -o -E '[0-9]+ packets r' | grep -o -E '[0-9]+') if [ "$t" -eq 0 ]; then /etc/init.d/openvpn restart fi done
連線狀態
按照以上說明操作後,路由器應能透過已完成的連線設定成功連線。 若要確認是否成功,請造訪 NordVPN 首頁 — 頁面頂部的狀態應顯示為「受保護」。
如果您希望中斷 VPN 連線,且此前是按照 GUI 步驟進行操作的,請按一下「VPN」>「OpenVPN」>「OpenVPN 執行個體」部分中 NordVPN 選項旁邊的「停止」按鈕。 不過,若想中斷 VPN 連線,也可執行以下指令:
service openvpn stop