小時候常常為了家中的網路管理而困擾。

舉例來說,我家有三個樓層、三台路由器。並讓三個路由器後的設備可以互通,但是如果我三台路由器都打開 DHCP Server 的話,三台將會是獨立的網段而不互通。

後來發現如果使用 bridge(橋接)的方式將一台路由器當作 DHCP Server,其他的當作 AP 或 Switch,就可以達到網段相同且可以互通了!

不過,這次我們要做的是跨 L3 的「異地組網」,沒辦法去做到使用同一個的 DHCP Server 來連接,所以就會有兩個網段。

那之前有跟大家分享過 FRRouting 安裝教學,所以我們也可以透過 BGP 及 VPN Tunnel 來組建不同區域網段互通。

事前準備

路由器須為 Linux 系統,或是可以使用 BGP 功能的路由器。
e.g. RouterOS, Cisco IOS, Junos, etc.

Linux 路由套件,這邊推薦以下兩種:

Router:

  • R1
  • R2

以 FRRouting 來做 BGP 互連

本篇將以 FRRouting 作為示範。

PS. 雙方路由器必須支持 BGP,否則只能使用 NAT 設備來進行互通了

設定路由器 IP 地址

我們先在雙方路由器配置好路由器 IP

R1:

  • 10.0.1.1/24
  • DHCP 分配 10.0.1.2 - 10.0.1.254

R2

  • 10.0.2.1/24
  • DHCP 分配 10.0.2.2 - 10.0.2.254

那我們在路由器 A 向 B 宣告 network 10.0.1.0/24
相對應的,路由器 B 向 A 宣告 network 10.0.2.0/24

確認狀態

當雙方 BGP Session 通了之後,我們檢查系統路由表 ip route

應該就會看到下方這樣的路由:
10.0.1.0/24 via 對方的隧道 IP dev tun0 proto bgp metric 20 

接著就可以嘗試使用 mtr 或 ping 看對方路由器後的網段設備是否有連通囉!

設定檔

R1

Current configuration:
!
frr version 7.3.1
frr defaults traditional
hostname gateway-tw
log syslog informational
service integrated-vtysh-config
!
router bgp 209557
 neighbor 10.121.1.22 remote-as 209557
 neighbor 10.121.1.22 description JP-Gateway
 !
 address-family ipv4 unicast
  network 10.0.1.0/24
 exit-address-family
!
line vty
!
end

R2

Current configuration:
!
frr version 7.3.1
frr defaults traditional
hostname gateway-tw
log syslog informational
service integrated-vtysh-config
!
router bgp 209557
 neighbor 10.121.1.21 remote-as 209557
 neighbor 10.121.1.21 description TW-Gateway
 !
 address-family ipv4 unicast
  network 10.0.2.0/24
 exit-address-family
!
line vty
!
end

完成後,效果會類似這樣唷!

後續

如果你不想使用 BGP 或是 OSPF 的方式的話,也可以使用 ip route 的指令直接新增一條 Static Route。

ip route add 10.0.1.0/24 via peer_tunnel_ip dev tunnel_interfaces