如何在 OpenWRT 路由器上手動設定 NordVPN

NordVPN 支援 OpenWrt 嗎?

有消息指出,具備 OpenWRT 韌體的路由器支援 NordVPN 等 VPN。但請注意,NordVPN 員工尚未測試以下設定,而是由我們出色的客戶分享並測試出來的流程。 NordVPN 在此特別感謝 OpenWRT 社群的活躍成員 Unwind,感謝這名成員持續協助並提供我們最新的 OpenWRT 說明。 若您想使用 nordvpnlite 設定 NordVPN,請參閱我們的指南

GUI 操作說明

本指南將介紹透過 LuCI 網頁介面,如何使用 OpenWrt 韌體的路由器設定 NordVPN 連線。 

  1. 在網際網路瀏覽器輸入 OpenWrt 路由器本機 IP 位址並登入,即可存取其 LuCI 介面。 預設 IP 位址為 192.168.1.1,而使用者名稱為 root



    注意:系統預設未設定密碼,因此您可以將此項留空。 不過登入時,您會收到要求設定密碼的系統訊息。



    為此,請按一下「系統」>「管理」,即可在此設定密碼。
     
  2. 登入後,選擇「系統」分頁,並選擇「軟體」


     
  3. 按一下「更新清單」按鈕,等待流程完成,並按一下「忽略」
     
  4. 「篩選」欄位輸入以下套件的名稱,並按一下「安裝…」即可。
     
    1. openvpn-openssl
    2. ip-full
    3. luci-app-openvpn


       
  5. 按一下「儲存並套用」,並重新整理路由器頁面。 您現在應能看到名為「VPN」的新分頁。 按一下該分頁,並從下拉式選單中選擇「OpenVPN」
     
  6. 現在需下載 OpenVPN 用戶端設定檔。 隨後,您可以透過您的 NordAccount 連線至推薦的伺服器。
    請按照以下步驟查找用於手動連線設定的服務憑證
    1.  
      1. 登入您的 Nord 帳戶,按一下 NordVPN,然後在手動設定下按一下服務憑證0>。 您將找到您的使用者名稱密碼,手動連線時需要用到它們。


         
      2. 現在必須下載 OpenVPN 用戶端設定檔。

        請按照以下步驟為您的連線尋找首選伺服器:
        1. 登入您的 Nord 帳戶,然後按一下 NordVPN


           
        2. 向下捲動至進階設定,並按一下手動設定 NordVPN


           
        3. 選擇推薦伺服器分頁。 我們的演算法將根據您的位置推薦最適合的伺服器。


           
        4. 按下進階篩選條件,就可以選擇伺服器類型安全通訊協定來自訂推薦的伺服器。





           如欲選擇特定的伺服器,請按照以下步驟操作:
          1. 手動設定 NordVPN中,選擇OpenVPN 設定檔**。


             
          2. 使用搜尋列或向下捲動,可以找到想要連線的伺服器。 然後,您就可以按一下下載 UDP下載 TCP



            在本指南中,我們將使用 us5104.nordvpn.com 伺服器。
  7. 上傳 OVPN 設定檔區段中,於執行個體名稱欄位命名 VPN 連線(我們命名為「nordvpn_us")。 然後,按一下選擇檔案,尋找已下載好的伺服器檔案,再按一下上傳


     
  8. OpenVPN 執行個體區段中,按一下已建立執行個體旁邊的編輯按鈕。


     
  9. 在下方欄位中,分行輸入 NordVPN 服務憑證的使用者名稱和密碼。

    使用者名稱
    密碼

    您可以在 Nord 帳戶儀表板中找到您的 NordVPN 服務憑證(使用者名稱和密碼)。

     

  10. 現在,複製包含憑證欄位正上方提供的憑證檔案路徑,並將其貼至上方設定檔區段中的「auth-user-pass」行旁邊。

    畫面應如下所示:auth-user-pass /etc/openvpn/nordvpn_us.auth


     
  11. 如欲連線至 VPN 伺服器,請按一下已啟用核取方塊,然後按一下已建立 NordVPN 執行體旁的開始按鈕。


     
  12. 按一下位於底部的儲存並套用按鈕。
     
  13. 在導覽選單頂部,將滑鼠停在系統,並按一下重新啟動。 畫面上將開啟另一個頁面。 按一下執行重啟按鈕,然後必須重新登入。
     
  14. 將滑鼠停在頁面頂部的網路分頁,並選擇介面

    1. 按一下新增介面
    2. 在名稱部分,輸入 nordvpntun
    3. 按一下通訊協定並選擇未管理
    4. 在介面下拉式選單中,在底部的 --自訂-- 欄位中輸入名稱 tun0,然後按 Enter 鍵。


     
  15. 按一下建立介面儲存
     
  16. 選擇頂部的網路分頁,並前往防火牆部分。
     
  17. 按一下新增按鈕,並按如下方式進行調整:
     
    1. 將其命名為「vpnfirewall」
    2. 將「輸入」選項設定為「拒絕」。
    3. 將「輸出」設定為「接受」,並將「轉發」設定為「拒絕」。
    4. 勾選「偽裝」選項。
    5. 勾選「MSS 鉗制」選項。
    6. 從「已覆蓋網路」下拉式選單中選擇「nordvpntun」。
    7. 在「允許從來源區域轉發」下拉式選單中,選擇「lan」。
    8. 按一下「儲存」按鈕。


       
  18. 區域區段中,找到名為 Lan 的區域,並按一下編輯按鈕。


     
  19. 允許轉發至目的地區域下拉式選單中,選取 NordVPN 項目。


     
  20. 再次按一下位於頁面頂部的網路,然後從下拉式選單中選擇 DHCP 與 DNS
     
  21. 一般設定標籤中找到「DNS 轉發」選項,並填入 NordVPN 的 DNS 地址。 地址為:103.86.96.100 and 103.86.99.100


     
  22. 切換至「resolv 和 hosts 檔案」標籤,勾選「忽略 resolv 檔案」核取方塊,然後按一下「儲存並套用」按鈕。


     
  23. 返回 VPN > OpenVPN分頁。
     
  24. 在「OpenVPN 執行個體」部分,勾選清單中 NordVPN 選項旁邊的「啟用」選項,然後按一下「儲存並套用」按鈕。


     
  25. 再次按一下開始按鈕,即可連上 VPN 伺服器。

CLI 操作說明

如果您期望看到更進階的教學,請按照本指南進行操作。 為了在 OpenWrt 上享有 VPN 的各項好處,您需要一台同時具備 OpenWrt 韌體且啟用 OpenVPN 用戶端的路由器。 該韌體的首頁是 https://openwrt.org/。 

  1. 首先,您必須使用 SSH 的區域網路 (LAN) IP 位址存取路由器。 預設情況下,IP 位址為 192.168.1.1,使用者名稱為 root;不過,如果您變更了任何預設值,IP 位址可能會有所不同。
     
  2. 路由器的預設韌體映像檔中並無 OpenVPN 套件。 如欲安裝此套件,請執行以下指令:

    opkg update
    			opkg install openvpn-openssl
    			opkg install ip-full

    此外,您也可以安裝 OpenVPN 設定的 LuCI 元件,不過此元件為選擇性安裝。 執行這串指令即可進行安裝:

    opkg install luci-app-openvpn
  3. 安裝好 OpenVPN 套件後,若希望套件在路由器開機時自動啟動,可執行以下命令:

    /etc/init.d/openvpn enable
  4. 接著,您將需要下載伺服器設定檔。 請按照以下步驟操作:
    1. 登入您的 Nord 帳戶,然後按一下 NordVPN


       
    2. 向下捲動至進階設定,並按一下手動設定 NordVPN


       
    3. 選擇推薦伺服器分頁。 我們的演算法將根據您的位置推薦最適合的伺服器。


       
    4. 按下進階篩選條件,就可以選擇伺服器類型安全通訊協定來自訂推薦的伺服器。





       如欲選擇特定的伺服器,請按照以下步驟操作:
      1. 手動設定 NordVPN中,選擇OpenVPN 設定檔**。


         
      2. 使用搜尋列或向下捲動,可以找到想要連線的伺服器。 然後,您就可以按一下下載 UDP下載 TCP


         
  1. 在本指南中,我們使用了伺服器 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 伺服器的特有檔案。
     

  2. 每當 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 服務憑證(使用者名稱和密碼)。

  3. 以下兩種方式均可使用下載好的設定檔設定 OpenVPN:
     
    1. 將檔案的副檔名從 .ovpn 變更為 .conf,這麼一來,OpenVPN 就能透過副檔名自動找到檔案。

      為此,可以使用 mv 指令:

      mv /etc/openvpn/uk2054.nordvpn.com.udp.ovpn /etc/openvpn/uk2054.nordvpn.com.udp.conf

       

    2. 使用以下的「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 僅會透過該設定檔啟動一次。
       

  4. 請執行以下指令,建立新網路介面:

    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 
  5. 透過執行以下指令建立新防火牆區域,並新增從區域網路轉發至 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 行,其中包含前面的字串。

  6. 現在必須設定 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 通道斷線時,如欲避免流量外洩,請按照以下步驟操作:

  1. 使用文字編輯器開啟防火牆檔案:

    sudo nano /etc/firewall.user
  2. 新增以下內容:

    # 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
  3. 執行這串指令,在「/etc/hotplug.d/iface」資料夾建立名為「99-prevent-leak」的檔案:

    nano /etc/hotplug.d/iface/99-prevent-leak
  4. 在指令碼中新增以下內容:
     

    #!/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 通道無法正常運作,請按照下列步驟操作。

  1. 編輯自訂防火牆規則檔案:

    sudo nano /etc/firewall.user
  2. 寫入此功能:

    # 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
  3.  接著需要建立自動啟用 Kill Switch 的 hotplug 指令碼:

    sudo nano /etc/hotplug.d/iface/99-prevent-leak
  4. 將以下內容寫入指令碼:

    
    			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 的指令碼,請按照以下步驟操作:

  1. 使用文字編輯器開啟「/etc/rc.local」檔案:

    sudo nano /etc/rc.local
  2. 新增以下字串:

    /etc/openvpn/reconnect.sh &
  3. 執行這串指令,在「/etc/openvpn」目錄中建立「reconnect.sh」檔案:

    sudo nano /etc/openvpn/reconnect.sh
  4. 請在檔案中輸入以下指令碼:

    #!/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
本文是否有幫助?

仍遇到問題嗎?

  • 即時聊天

  • 電子郵件表格

點擊「與客服人員洽談」即表示您同意我們的服務條款,並確認已閱讀我們的隱私權政策。 聊天功能仰賴 Cookie。 開始聊天,即表示您同意使用 Cookie。 如欲進一步了解,請參閱我們的 Cookie 政策.