Synology – Site to Site VPN?!

筆 者 之 前 在 本 站 也 討 論 過 使 用 VPN 的 好 處 。Synology 的 NAS,除 了 VPN Server 之 外 ,其 實 也 內 建 了 VPN Client。於 是 ,我 們 可 以 直 接 的 用 VPN 由 一 台 Synology 連 線 到 另 一 台 Synology。VPN 連 好 線 之 後 ,兩 台 NAS 之 間 做 資 料 備 份 、資 料 夾 同 步 等 等 ,傳 遞 的 資 料 都 是 被 加 密 的 。

但 如 果 只 用 預 設 的 設 定 ,這 條 VPN 的 連 線 只 能 連 通 兩 台 Synology。如 果 我 們 進 一 步 的 ,在 Synology 的 VPN Client 的 進 階 設 定 ,勾 選 了 「允 許 其 它 網 絡 裝 置 透 過 這 台 Synology 伺 服 器 的 網 絡 連 線 來 連 線 」的 話 ,Client Side 那 邊 的 子 網 絡 就 可 以 看 得 到 Sever Side 的 子 網 絡 了 ( 當 然 ,Client Side 的 網 路 要 額 外 加 一 點 點 設 定 ,而 且 ,Server Side 的 子 網 絡 還 是 看 不 到 Client Side 的 ,這 樣 的 VPN 設 定 叫 做 host to site )。

VPN Client Settings

VPN Client Settings

那 如 果 我 們 想 讓 兩 台 Synology 兩 邊 的 子 網 絡 都 能 夠 互 通 呢 ?可 惜 ,Synology 的 VPN Server 並 沒 有 給 我 們 這 個 選 項 。不 過 ,既 然 Synology 本 身 支 援 OpenVPN Server,而 OpenVPN 又 支 援 Site to Site VPN,我 們 就 一 於 自 己 去 設 定 好 了 。

要 自 己 設 定 Site to Site VPN,可 能 會 有 一 點 點 複 雜 ,所 以 ,我 們 首 先 來 溫 習 一 些 網 絡 的 基 本 知 識 吧 。

首 先 ,我 們 的 Server Side 會 有 自 己 的 子 網 絡 ,按 我 的 例 子 ,就 是 192.168.19.0 / 255.255.255.0。而 Client Side 那 邊 也 有 自 己 的 子 網 絡 ,例 子 中 是 192.168.2.0 / 255.255.255.0。這 兩 個 部 分 是 無 關 VPN 的 ,不 過 ,要 建 立 Site to Site VPN,兩 邊 的 子 網 絡 是 不 能 相 同 的 。所 以 ,如 果 你 兩 邊 的 子 網 絡 剛 好 是 一 樣 的 話 ,就 要 先 改 正 好 ( 這 部 分 說 易 不 易 ,說 難 不 難 ,要 看 你 兩 邊 的 電 腦 數 量 、網 絡 設 定 是 如 何 ,要 是 真 不 能 改 ,那 你 就 死 心 吧 ,什 麼 都 不 用 做 下 去 了 )。

第 二 樣 我 們 要 重 溫 的 ,叫 做 routing。網 絡 上 的 每 一 個 封 包 何 去 何 從 ,都 是 由 每 一 台 機 器 自 己 的 routing table 來 決 定 的 。在 你 的 電 腦 有 電 腦 自 己 的 routing table,在 你 的 路 由 器 會 有 路 由 器 自 己 的 routing table。在 建 立 Site to Site VPN 的 時 候 ,由 於 我 們 增 加 了 一 條 額 外 的 通 道 ,所 以 一 般 我 們 都 要 在 每 邊 的 Default Gateway 增 加 一 條 固 定 路 由 ,指 令 某 些 封 包 經 過 新 的 通 道 去 到 達 目 的 地 。這 個 部 分 ,不 管 你 是 用 Synology,還 是 請 寬 頻 公 司 建 立 一 條 lease line,都 是 要 設 定 的 。( 只 有 在 Default Gateway 和 VPN Gateway 是 同 一 台 裝 置 的 時 候 ,它 才 會 自 動 幫 你 設 定 好 )

在 我 的 例 子 中 ,Server Side 的 Default Gateway ( 就 是 router ) 是 192.168.19.1,Server Side 的 Synology ( 作 為 VPN gateway ) 是 192.168.19.5。Client Side 的 Default Gateway 是 192.168.2.1,Client Side 的 Synology 就 是 192.168.2.251。

於 是 ,在 Server Side 的 Gateway ( 就 是 router ) 就 要 加 上 一 條 static route ( 在 某 些 裝 置 上 亦 叫 destination route )。意 思 就 是 把 目 的 地 是 子 網 絡 192.168.2.0 / 255.255.255.0 的 所 有 封 包 ,都 轉 送 到 192.168.19.5 ( 就 是 Sever Side 的 VPN Gateway )。

Add static route to server side router

Add static route to server side router

至 於 在 Client Side,也 是 一 樣 。下 面 的 意 思 就 是 把 目 的 地 是 子 網 絡 192.168.19.0 / 255.255.255.0 的 所 有 封 包 ,都 轉 送 到 192.168.2.251 ( 就 是 Client Side 的 VPN gateway )。

add route to client side router

add route to client side router

大 家 可 以 看 到 ,不 同 的 Router 會 有 不 同 的 設 定 方 式 ,不 過 萬 變 不 離 其 中 。你 只 要 搞 清 楚 兩 邊 的 子 網 絡 和 VPN Gateway 的 IP 就 可 以 了 。

好 了 ,現 在 我 們 可 以 回 到 Synology 身 上 。首 先 在 Server Side 安 裝 好 VPN Server 套 件 ,並 且 啟 動 OpenVPN server。OpenVPN 預 設 是 使 用 UDP 1194,所 以 相 應 的 要 到 Server Side 的 Router 設 定 好 port forwarding ( 按 我 的 例 子 就 是 forward UDP 1194 到 192.168.19.5 )。記 得 要 在 VPN Server 套 件 的 權 限 裡 面 設 定 至 少 一 位 使 用 者 給 使 用 OpenVPN。在 我 的 例 子 ,這 位 使 用 者 的 名 稱 叫 做 VPN_Hosley ( 這 個 一 會 兒 是 會 使 用 到 的 )。

OpenVPN Server

OpenVPN Server

我 們 也 要 在 OpenVPN server 匯 出 設 定 檔 一 次 ,這 個 設 定 檔 是 給 OpenVPN client 使 用 的 。它 是 一 個 zip 檔 ,裡 面 的 ca.crt 在 設 定 Synology 的 VPN client 的 時 候 會 用 到 。同 時 ,我 們 也 記 一 下 OpenVPN server 的 IP,在 我 的 例 子 是 10.8.0.0。

然 後 我 們 可 以 打 開 Client Side 的 Synology,在 控 制 台 裡 面 會 有 VPN client。我 們 新 增 一 條 OpenVPN 的 連 線 ;Server address 就 是 你 的 server side 的 public IP,又 或 者 是 DDNS 的 地 址 ( 例 如 myoffice.synology.me / myhome.dyndns.org 之 類 );Username 和 Password 當 然 就 是 你 自 己 之 前 設 定 的 ;Certificate 就 要 選 前 面 說 的 ca.crt。

OpenVPN Client

OpenVPN Client

下 一 頁 ,就 記 得 要 勾 選 「允 許 其 它 網 絡 裝 置 透 過 這 台 Synology 伺 服 器 的 網 絡 連 線 來 連 線 」。

VPN Client Settings

VPN Client Settings

確 定 之 後 ,我 們 先 測 試 一 下 連 線 ( 如 果 此 時 連 線 不 成 功 ,就 並 不 關 site to site 設 定 的 問 題 ,因 為 尚 未 開 始 設 定 也 。這 部 分 大 家 自 己 慢 慢 搞 ,因 為 牽 涉 範 圍 太 廣 ,筆 者 也 幫 不 上 忙 )。如 果 能 成 功 連 線 ,就 代 表 Client Side 的 設 定 完 全 正 確 了 ( 其 實 Client Side 是 不 需 要 特 別 設 定 的 )。這 時 我 們 可 以 先 把 VPN 連 線 斷 開 。

回 到 Server Side,我 們 先 打 開 Server Side Synology 的 SSH 連 線 ,再 用 putty / pietty 之 類 的 SSH 連 線 程 式 登 入 Server Side 的 Synology ( 記 得 使 用 root 帳 號 登 入 ,密 碼 和 admin 一 樣 )。

OpenVPN server 的 config 檔 的 位 置 如 下 :
/usr/syno/etc/packages/VPNCenter/openvpn/openvpn.conf

首 先 打 開 config 檔 ,一 般 的 話 可 以 用 vi。
vi /usr/syno/etc/packages/VPNCenter/openvpn/openvpn.conf

我 們 在 檔 案 的 尾 端 加 入 四 行 :
push "192.168.19.0 255.255.255.0"
push "10.8.0.0 255.255.255.0"
client-config-dir ccd
route 192.168.2.0 255.255.255.0

Server Config File

Server Config File

push 那 兩 行 的 意 思 ,就 是 要 告 訴 每 一 個 連 線 進 來 的 client 我 們 Server Side 的 子 網 絡 。

client-config-dir ccd 就 是 指 定 子 目 錄 ccd 為 存 放 client config file 的 目 錄 。每 一 個 client 都 會 要 有 一 個 自 己 的 client config file。client config file 只 需 要 存 在 於 server 上 。

至 於 route 那 行 ,就 是 client side 的 子 網 絡 。由 於 筆 者 有 兩 個 client,所 以 有 兩 行 route,大 家 可 以 根 據 自 己 的 實 際 情 況 加 減 。

存 檔 和 結 束 vi 之 後 ,我 們 就 可 以 新 增 子 目 錄 ccd,以 及 新 增 client config file。

mkdir /usr/syno/etc/packages/VPNCenter/openvpn/ccd
touch /usr/syno/etc/packages/VPNCenter/openvpn/ccd/VPN_Hosley

Client config file 和 client 的 username 要 一 樣 ,所 以 是 VPN_Hosley。就 是 你 在 設 定 OpenVPN Client 時 的 「使 用 者 名 稱 」。

再 用 vi 打 開 client config file,裡 面 應 該 是 空 白 的 ( 因 為 它 是 我 們 剛 才 用 touch command 建 立 的 )。在 client config file 加 入 以 下 兩 行 。
iroute 192.168.2.0 255.255.255.0
push "route 10.8.0.0 255.255.255.0 vpn_gateway"

client config file

client config file

iroute 那 行 ,同 樣 是 client side 的 子 網 絡 。每 一 個 client config file 代 表 一 個 client,而 每 一 個 client 只 會 有 一 個 子 網 絡 ,所 以 這 裡 是 只 會 有 一 行 的 。然 後 push 那 行 就 是 用 OpenVPN server 的 IP。

如 果 有 多 於 一 個 client,就 要 在 ccd 子 目 錄 裡 面 為 每 一 個 client 建 立 一 個 client config file。

都 完 成 之 後 ,我 們 就 可 以 重 新 啟 動 OpenVPN Server 一 次 ( 在 VPN 套 件 裡 面 關 上 再 開 啟 就 可 以 了 )。重 啟 之 後 ,就 讓 Client 再 連 線 一 次 。此 時 ,Site to Site VPN 就 正 式 接 通 了 。

現 在 我 們 可 以 試 試 在 Server Side 的 電 腦 去 Ping Client Side 的 Default Gateway,成 功 。

Server Side Ping Client Side

Server Side Ping Client Side

再 到 Client Side 那 邊 ,Ping 一 下 Server Side 的 Default Gateway,也 成 功 。呵 呵 ,那 我 們 的 Site to Site VPN 就 測 試 成 功 了 。

ping from client to server

ping from client to server

接 通 了 site to site VPN 之 後 ,兩 邊 就 可 以 完 全 互 通 了 。例 如 ,我 可 以 在 家 裡 登 入 公 司 的 所 有 Server,也 可 以 在 公 司 直 接 登 入 家 裡 的 所 有 Server;可 以 直 在 家 裡 的 電 腦 mount 公 司 的 network drive,反 之 亦 然 。( 例 如 在 家 裡 直 接 用 192.168.19.5 去 打 開 公 司 synology 的 登 入 網 頁 )

當 然 ,大 家 也 關 心 OpenVPN 的 實 際 傳 輸 速 度 吧 。OpenVPN 由 於 都 是 靠 Synology 的 CPU 來 運 算 ,所 以 Synology 的 平 貴 應 該 最 影 響 速 度 。筆 者 這 次 用 了 一 台 DS411+ ( Server ) 和 一 台 DS211j ( Client ),兩 邊 都 是 香 港 寬 頻 100Mb。實 際 速 度 可 以 達 到 穩 定 的 2MB/s 左 右 ( 大 概 可 以 當 成 是 用 到 寬 頻 的 20Mb 吧 ),算 是 不 過 不 失 。相 信 這 次 的 瓶 頸 是 在 DS211j 的 CPU 那 裡 。

OpenVPN Speed

OpenVPN Speed

最 後 ,介 紹 兩 篇 相 關 的 文 章 給 大 家 ,都 是 關 於 使 用 OpenVPN 來 設 定 Site to Site VPN 的 。

Expanding the scope of the VPN to include additional machines on either the client or server subnet (openvpn.net)
How To Set Up a Site-to-Site VPN with OpenVPN (smallnetbuilder.com)

範 例 :
====================================================================================
Server Side
Subnet: 192.168.19.0 / 255.255.255.0
Router: 192.168.19.1
Synology: 192.168.19.5
OpenVPN Server: 10.8.0.0
OpenVPN User: VPN_Hosley
Add static route to router: 192.168.2.0 mask 255.255.255.0 gateway 192.168.19.5
Edit the OpenVPN server config file
Create client config directory (ccd)
Create client config file (VPN_Hosley)
====================================================================================
Client Side
Subnet: 192.168.2.0 / 255.255.255.0
Router: 192.168.2.1
Synology: 192.168.2.251
OpenVPN Client User: VPN_Hosley
Add static route to router: 192.168.19.0 mask 255.255.255.0 gateway 192.168.2.251
====================================================================================

補 充 : ( 2014-01-10 )

筆 者 發 覺 ,有 時 候 客 戶 端 斷 線 之 後 ,會 再 連 不 上 線 。死 因 是 ccd 裡 面 的 config file ( 按 上 例 就 是 VPN_Hosley ) 被 改 變 成 只 得 一 行 iconfig-push 的 模 樣 。要 人 手 改 回 原 來 的 設 定 ,才 能 再 次 連 得 上 線 。

再 爬 了 一 下 openvpn 的 forum,發 現 原 來 是 radius plugin 的 問 題 。radius plugin 的 位 置 在 openvpn 的 server config file 裡 面 就 有 。

openvpn.conf

openvpn.conf

打 開 了 radius plugin 的 config file ( radiusplugin.cnf ) 之 後 ,把 overwriteccfiles 設 定 為 false 就 可 以 了 。

radiusplugin.cnf

radiusplugin.cnf

 

ctleung張 先 生 ,男 性 ,肖 龍 。
職 業 :I.T. Consultant
簡 介 :不 好 好 讀 書 ;七 尺 差 五 寸 ,手 長 過 膝 ,雙 耳 垂 肩 ;性 寬 和 ,寡 言 語 ,喜 怒 不 形 於 色 。據 說 少 時 曾 斬 白 蛇 於 鳳 凰 山 下 ……
This entry was posted in Computer & Network and tagged , , , . Bookmark the permalink.

6 Responses to Synology – Site to Site VPN?!

  1. steve says:

    板主你好,我用Putty輸入 vi /usr/syno/etc/packages/VPNCenter/openvpn/openvpn.conf 之後,發現檔案是 Readonly。請問如何修改好? 另外輸入四行之後,如何儲存及離開呢? 謝謝

    • C.T. Leung says:

      1. 如果真係 readonly,咁你應該無 root 權限,這部分無解(雖說在 linux 自己改 root 密碼也不是什麼難事…)。但我很有點懷疑,是不是你不會用 vi,所以以為自己是 readonly??

      2. vi 呢,雖說不上十分好用,但卻是必須要學的 (就像在 windows 你用 chrome 用到曉飛,但你還是必須要會一點點 IE)。儲存和離開的 command 是 :wq。但你可能要先離開 edit mode,那是用 Esc。

  2. Roger Heckly says:

    Hi
    Thank you very much for your article.
    I tried to do the same
    From my client Synology I can connect via OpenVPN to my server synology. But I cannot ping from my server windows pc the standard gateway in client network or any other device in client network.
    When I make a tracert to the client device I end in the synology box in my server network.
    So I think the routing in the synology bos is not forwarding to the VPN tunnel. I created everything – also the ccd for the suer which is connected as you descriped.
    Question: what do you mean with push route…. VPN_GATEWAY – is this a name I have to change or is this a general name?

    Thank you for an answer
    Roger

    • C.T. Leung says:

      Well, first of all, I have switched to VPN Routers long time ago. Which means I have not been using my Synology as my VPN gateway for over a year. Both Synology DSM and the OpenVPN package were upgraded several times during this period, so I cannot guarantee this would still work for now.

      But I believe the commands in OpenVPN have not changed that much.

      Inside the follow conf file sample:
      http://ftp.linux.org.tr/slackware/slackware_source/n/openvpn/openvpn.conf.sample

      # You can set routes to specific networks. In the sample below, “vpn_gateway”
      # is an internal OpenVPN alias to your VPN gateway – leave it as is.
      # This will enable you to talk with the networks behind your VPN server.
      # Multiple routes can be specified.
      #
      # +————+ – – +————+
      # | Network1 |—| VPN1 |–[10.1.2.0/24]–| VPN2 |—| Network2 |
      # +————+ +——+ +——+ +————+
      # 192.168.0.0/24 192.168.2.0/24
      #
      # The sample below shows how VPN1 server can reach Network2
      #route 192.168.2.0 255.255.255.0 vpn_gateway

      I think it explains much better than I can ever do.

      Try to focus more on the smallnetbuilder.com article I shared, I basically followed most from it.

      Besides, did you check the following in your Client Synology ??
      “Allow other network devices to connect through this DiskStation’s Internet connecton”

  3. Kelvin says:

    你好,按照你的詳細教學,我已成功將兩個network用openVPN連接:Server side的電腦跟Client side的電腦可以互相ping到。只是就只能ping到,並不能在server side電腦打開client side的router頁面(port 80)或nas頁面(port 5000),或如上所述掛載磁碟機。檢查過兩邊router我都開放了5000等port,請問最大可能是哪裡設定錯誤呢?

    Server side
    router 192.168.2.1
    nas (vpn gateway) 192.168.2.101

    Client side
    router 192.168.1.1
    nas (vpn gateway) 192.168.1.100

    謝謝您!

    • C.T. Leung says:

      超簡單而言,ping 到就應該用得到。

      例如:電腦 A ( 192.168.1.150 ) 能 ping 得通 NAS B ( 192.168.2.101 ),那電腦 A 就絕對 ( 99.99% ) 能 map 得到 NAS B 上的 shared folder。
      \\192.168.2.101\shared_folder

      但依你結果而言,我是比較懷疑你根本 ping 唔通的,嘿嘿嘿。硬是要我亂估的話,我傾向相信你兩邊的 routers 無設定好 routing rules (static route)。

      順帶一提,用了 VPN 就等於你是在 LAN side,所以兩邊 router 都絕對唔需要做 port forwarding ( 亦即你所說的開放 ) 的。

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>