Hi 大家好,今天來分享一下如何使用 WireGuard 建立大內網

之前有與大家分享過 在 Linux 系統上安裝 Wireguard,那這次我們要利用 WireGuard 來建立大內網

為什麼要建立大內網?

為什麼筆者稱這次要建立「大內網」呢?
因為筆者也許多不同地方的網路,想藉由這次機會,來把他們都加進同一個局域網 (LAN)

這樣也可以解決一些連線問題,比如筆者常常連線回到家中的電腦
但因為公網 IP 只有幾個,當機器太多時,就需要設定內網穿透

但筆者架設了內網之後,在外面只需要連入VPN,在其他網路區域,就可以存取所有網路設備了(這也類似於一般企業的遠端存取)

情境及架構

那麼,我們一樣需要有一個主伺服器當網關。不過,我們不使用 NAT TO NAT,而是讓 Private 可以直接互連。

我們的情境是這樣:

  • A 辦公室 路由器 10.121.208.254/24
  • B 辦公室 路由器 10.121.209.254/24
  • C 辦公室 路由器 10.121.210.254/24
  • VPN 路由器 10.121.211.254/24

設定 VPN Tunnel 及靜態路由

首先,由於我們這次是純粹架設大內網,以 WireGuard 搭配靜態路由為主。 所以先不講到路由協議。如果你有興趣的話,也可以參考我寫的 透過 BGP 組建不同網段互通

我們需要有一個主路由器,並透過它來連接 A, B, C 辦公室的路由器

所以會變成下面這樣

VPN <-> A  
VPN <-> B  
VPN <-> C

當A的用戶想去 C 時 (10.121.208.1 <-> 10.121.210.2) 路線會變成…

User-A -> 10.121.208.254 -> 10.121.211.254 -> 10.121.210.254 -> 10.121.210.2 (User-C)

也就是 User-A -> A 的路由器 -> VPN Gateway -> C 的路由器 -> User-C

那我們搞懂原理,就來實作啦!

首先,我先先準備好私鑰及公鑰(公鑰是由私鑰算過來的)

A's Public key: WGokwN2HtiX+naa7hdvUaXoXk5tkzXQtMge4v9DKlVw=  
B's Public key: fVNXw6EpC65DmIsY/XsWXL6EXLU9oFW7CL5cZr82Di8=  
C's Public key: ORbEFZlR/IWFWaD42Nh00DfYEpCX2CbNmRy/Hc+crVQ=  
VPN's Public Key: Rxcti9/3jLII4JOscHn9/yp5Z8ZROcYk8tugXn/FRHM=

那我們就在配置中這樣寫…

[Interface]
PrivateKey = <各處的 Private Key>
Address = <各個路由器的 IP,比如說 A 路由器 10.121.208.254/24>

[Peer]
PublicKey = <VPN Gateway Public Key>
Endpoint = <VPN Gateway's EndPoint>
AllowedIPs = 10.121.209.0/24,10.121.210.0/24,10.121.211.0/24
PersistentKeepalive = 10

我們在各節點這樣配,上方例子是 A 路由器的
B 路由器則是這樣

[Interface]
PrivateKey = <各處的private key>
Address = <各個路由器的IP,比如說B路由器 10.121.209.254/24>

[Peer]
PublicKey = <VPN Gateway Public Key>
Endpoint = <VPN Gateway's EndPoint>
AllowedIPs = 10.121.208.0/24,10.121.210.0/24,10.121.211.0/24
PersistentKeepalive = 10

相信 C 路由器大家應該就會配了。

最後,大家只需要在每台路由器上執行指令 wg-quick up <wireguard_網卡名稱> 就可以互通啦!

特別注意:這種網路架構,如果 VPN Gateway 故障的話,那 A, B, C 也就不能彼此互通了。