RSS訂閱

2016年7月11日 星期一

軟體路由器實務 (Software-based router Practice)

許多企業網路環境下均需要路由器來區隔網段以及正確轉送不同網段間的流量,但硬體路由器大多較昂貴,較缺乏部署上的彈性,以作者的虛擬化教學網路環境為例,許多實驗均需要快速的部署路由器來模擬各種網段間的轉送動作,因此在可接受的效能要求條件下,架設軟體路由器經常成為首選,本文將詳細說明如何建置Linux基礎的VyOS路由器和Windows Server RRAS 路由器。

路由基礎 (Routing Basics)

在網路互連環境中,路由(Routing)是一種決定如何將網路封包經由所選擇之路徑而送往外部網路以到達目的地的過程,而網路路由動作通常由路由器(Router)設備負責執行,路由器則是一部用以維護其網路介面的狀態以及包含一份網路流量傳遞的可能來源與目的等資訊的設備,因此,路由器乃依據其所維護的來源與目的路徑資訊來將轉寄流量封包。
硬體 vs. 軟體路由器
路由功能可由專屬的硬體裝置提供 ,也可由軟體基礎的路由器支援,其決定與選擇的主要考量大多是流量負載量、效能需求與成本限制,如果您希望應用於一個負荷較繁重的企業網路環境轉送封包,那麼擁有專屬硬體和專屬系統的硬體路由器較能夠符合效能上的需求,如果您在家庭網路或測試用途的網路環境下並且基於成本上考量,那麼軟體路由器應是在有限成本考量下的選項。
靜態 vs 動態路由
路由器設備依據其所維護的路由表(Routing Table)來決定如何選擇最佳的路徑再予以轉送至下一個轉寄站,而路由表的內容可包括直接連線、手動設定的靜態路徑(static routes)以及透過路由協定(Routing Protocol)動態學習的動態路徑(dynamic routes),而實務上,許多網路均會整合使用靜態與動態路由的技術。
一般而言,由於靜態路由方式需要管理員手動維護路由表內的路徑,因此比較適合應用於小型簡易的網路環境,或是預期網路並不會快速的成長擴充的環境,綜合而言,靜態路由主要的優點為:
  • 小型網路由於路徑不多,因此易於實作。
  • 較為安全,因為不像動態路由需要傳送通知(Advertisements)訊息。
  • 封包傳送路徑為可預測,因為手動輸入的路徑為固定,只要是相同的來源與目的地其轉送的路徑總是一樣。
  • 無需路由演算法和路徑公告與更新,因此較節省CPU、記憶體與頻寬的耗費。
不過靜態路由方式也有一些基本的限制與缺點:
  • 網路延展性不佳,在大型與複雜的網路環境下,不僅實作不易且無效率,況且維護大量的靜態路徑,其管理負荷亦高。
  • 靜態路由無法動態的適應網路拓蹼改變,其備援容錯能力亦差,一旦路徑或網路裝置失效,恐將無法自動重新轉寄網路流量。
另一方面,動態路由則是路由器透過一種路由協定在彼此之間持續的交換網路狀態訊息,然後再藉由這些交換訊息來更新其路徑表,免除了手動設定的負荷和潛在錯誤,因為路由器根據不斷更新與交換的即時網路路徑訊息來選擇轉送封包的最佳路徑,即使網路拓樸快速變動亦能夠適應予以改變轉送路徑,動態路由主要的關鍵在於所採用的路由協定,而路由協定用以指出路由器間如何傳播與交換路由訊息,以及如何選擇最佳路徑來轉送到下一個轉接站。
內部閘道協定(Interior Gateway Protocol)與外部閘道協定(Exterior Gateway Protocol)
一個自治系統(Autonomous System,AS),通常指的是所有列於相同管理網域(Administrative Domain)下的所有網路的集合,而一個管理網域包含了主機、路由器與內部連接網路的集合,而這個集合是隸屬於同樣的管理單位下運作。
若依據路由協定是否運作在同一個自治系統之內或之外,則可以將路由協定分成內部閘道協定(Interior Gateway Protocol)與外部閘道協定(Exterior Gateway Protocol)二種。內部路由協定簡稱為IGP,外部路由協定則簡稱為EGP,常見的屬於內部路由協定的路由協定包含RIPv1、RIPv2、IGRP、EIGRP和OSPF,而屬於外部路由協定的路由協定則有BGP。
距離向量 vs. 連結狀態路由協定
路由設備所採用的路由協定用以決定資料傳送的適當路徑以及如何與其它路由器分享與更新路由訊息,下表列出了各種不同類型的路由協定:
路由協定
定義 類型 說明
支援的網路環境
有級別(Classful)網路* 無級別(Classless)網路** IPv6
內部閘道協定
(interior gateway protocol;IGP)
自主系統(autonomous systems)內部之路由協定 距離向量 (Distance Vector)
  • 距離向量是用方向與所必須經過的轉寄設備數目(Hops)來決定路徑,在此距離代表目的地的計量 (Metrics)
  • 距離向量路由協定的路由器定期通告其相鄰的鄰居其路由表,而接收路由器對於每個網路目的地挑選芳鄰通告之最低的成本(計量),然後將此項目新增或更新到其路由表。
  • 只會與直接連接的相鄰路由器分享整個路由表
RIP、IGRP RIPv2、EIGRP* RIPng、EIGRP for IPv6
連結狀態 (Link State)
  • 只會傳遞少部分更新的路由資料,但這些更新資料會傳遞到自主系統內的每個路由器設備中
  OSPFv2、IS-IS OSPFv3、IS-IS for IPv6
混合 (Hybrid)
一種結合了距離向量與連結狀態特性的協定,冀望兼具二者之優點而避其缺點之設計,亦即允許較快的收斂,卻又無需耗費太多的CPU與記憶資源。
EIGRP
外部閘道協定
(Exterior Gateway Protocol;EGP)
不同的自主系統間的路由協定     EGP BGP BGP for IPv6
* 有級別(Classful)網路表示傳遞路由資訊時,並不會傳遞子網路遮罩的訊息
** 無級別 (Classless)網路代表傳遞路由資訊時會包含子網路遮罩的訊息,因此可以支援變動長度的子網路 VLSM)

主流的Windows與Linux作業系統均可提供並允許設定成為軟體路由器,本文乃以Linux基礎的VyOS發行套件與Windows RRAS為例,分別說明如何設定成為網路路由器。
 

VyOS 簡介


VyOS 為知名的 Vyatta Core 的一個社群分支套件,它是一套以Debian Linux為基礎的網路作業系統,完全免費並開放原始碼,除了支援各種網路路由協定而適合架設專屬的軟體路由器、還支援了防火牆與VPN功能以及一些特定網路服務,本文將利用它在各種實驗環境下架設為路由器。
從歷史淵源而言,VyOS源自於開源碼的Vyatta Core,但從Brocade公司取得Vyatta後,就中斷了開源免費的Vyatta社群版本的提供與更新,VyOS因此於2013年誕生用以取代Vyatta,而VyOS主要是整合了Debian Linux和Quagga路由引擎而來,可允許安裝並執行在32位元與64位元的x86平台上,其主要的特性為:
  • 支援豐富的路由協定(IPv6與IPv4):
    • BGP (IPv4 and IPv6)
    • OSPFv2、OSPFv3 (未完整)
    • RIP
    • RIPn
  • 支援虛擬路由器備援協定 (Virtual Router Redundancy Protocol )
  • 支援狀態檢視防火牆
  • 支援來源和目的網路位址轉譯協定 (Source and destination NAT)
  • 支援虛擬私人網路 (VPN)
    • Site-to-site IPSec VPN:可支援共用金鑰與憑證二種驗證方法)
    • OpenVPN (SSLVPN) 
    • L2TP/IPSec
    • PPTP
  • 提供廣域網路錯誤移轉與負載平衡 (WAN failover and load balancing )能力
  • 支援DHCP伺服服務、快取DNS伺服器
  • 網頁代理與URL篩選支援
  • 提供Telnet與SSH遠端管理連線能力
由上述的功能特性可知,VyOS很適合部署為中小型企業的多功能閘道器,不過在此文中將利用其動、靜態路由功能將其設定為專屬的軟體路由器。

本文軟體路由器實務架構

本文利用底下網路架構來示範如何架設Windows或VyOS軟體路由器,下圖中的 192.168.0.0/24、192.168.1.0/24與192.168.2.0/24 三個內部網段透過二部軟體路由器連接溝通,而最後再利用位於192.168.2.0/24網段上的寬頻路由器(192.168.2.254)連結上網,在某些環境下,如果您並沒有寬頻路由器的管理權限或基於任何理由而無法在寬頻路由器上新增路由協定或路徑,則路由器一還需啟用網路位址轉譯協定(NAT)才能順利讓192.168.0.0/24網段的機器上網。換言之,在下圖例子中,寬頻路由器是否允許新增額外路由路徑,將決定軟體路由器一是否需要啟用NAT。
routerarch

安裝 VyOS

VyOS不僅支援 32位元與64位元的x86平台,還可支援安裝在各種主流的伺服器虛擬化平台,可安裝的平台包括:
  • VMWare (含 open-vm-tools)
  • Hyper-V (含驅動程式)
  • Xen HVM (包括 XenServer 和 EC2)
  • VirtualBox (不過不包含 guest additions)
  • KVM (包含 virtio 驅動程式)
換言之,VyOS可以執行在實體機器或多種虛擬化平台上。
安裝 VyOS系統相當簡單,步驟如下:
  1. 您需要先連至vyos網站 (http://vyos.net/) 下載正確的ISO檔案,然後由光碟機開機。
  2. 開機後,請輸入 vyos帳戶登入,並輸入vyos為密碼。
  3. vyos可以支援系統安裝與映像安裝二種方式 (install image 和 install system),一般建議採用映像安裝方式,以便可以在系統中安裝多個不同版本的映像,提供在啟動時可預見的環境,並允許一旦出了問題可快速恢復至升級前的版本。因此請於命令提示下輸入安裝指令  "install image"。
    installvyos
  4. 接下來的組態設定過程相當直覺,除了建議輸入二次不易猜的管理員密碼外,大部分組態只要直接接受預設值即可(包括自動磁碟分割、映像名稱;拷貝的啟動組態檔案、GRUB變更儲存的磁碟位置),設定項目如下圖所示。
    vyosinstall2
  5. 最後請移除光碟後並重新啟動系統。

VyOS 使用基礎

VyoS系統提供了類似硬體裝置的命令列介面(CLI)操作方式且提供了內建的輔助系統,只要輸入 ? 鍵就可以顯示可用的命令,其命令列介面包括了二種模式:作業模式(operational mode )與設定模式 (configuration mode),操作模式用以執行系統工作並檢視系統與各種服務狀態,例如路由表與防火牆規則,設定模式則是用以編輯修改系統組態,開機登入後預設為作業模式,其提示符號為 $,使用者可以利用 configure 命令進入設定模式 (提示 符號會變更為 # ),然後開始進行編輯設定,欲變更設定,通常使用 set或 delete命令,編輯完成後若要離開設定模式並回到作業模式,需先輸入commitsave命令讓其編輯設定立即生效並儲存組態,最後輸入 exit 即可離開設定模式而回到作業模式,反之,若變更後反悔了而不希望變更先前的組態,則可直接輸入 "exit discard" 離開即可,所以整個VyOS基本設定流程大抵如下:
vyos@vyos $ configure
vyos@vyos # [組態命令]
vyos@vyos # commit
vyos@vyos # save
vyos@vyos # exit
vyos@vyos $

 

Vyos的基礎設定工作包括了:

  • 啟動 ssh 服務
  • 網路介面組態
  • 主機名稱
  • 顯示資訊
  • 還原預設組態檔
  • 備份與還原組態
  • 帳戶及密碼管理

啟動 ssh 伺服服務

為了方便遠端管理,您可以開啟sshd服務以便日後可以遠端登入連線管理,進入設定模式後請輸入下列指令後即可利用ssh用戶軟體(如putty)遠端登入。:

# set service ssh port 22
# commit
# save

下圖為實際操作畫面。

vyossshd_thumb2

設定網路介面組態

路由器上的多個網路介面通常會手動設定規劃的IP位址,並且建議輸入網路介面說明字串以利日後管理維護時易於辨識,指令如下:

set int ethernet eth0 address 192.168.2.1/24
set int ethernet eth0 description DMZ
1.2set int ethernet eth1 address 192.168.1.1/24
set int ethernet eth1 description Subnet1
commit
save

設定完成後,您可以在登入時的非設定模式或設定模式輸入"show int" 指令以顯示並確認是否已成功的完成介面設定。

設定系統資訊-網域、主機名稱和DNS伺服器

系統資訊組態設定並非必要,在此建議設定網域和主機名稱、DNS伺服器,指令如下:

set system domain-name lijyyh.com
set system host-name vyos1
set system name-server 168.95.1.1
set system name-server 208.67.222.222
commit
save

設定時區與NTP伺服器

維護重要伺服器具有準確的時間是重要的,因此建議設定正確的時區、刪除內建的NTP伺服器,然後新增本地的NTP伺服器,其命令如下:

$ config
# set system time-zone 'Asia/Taipei'
# delete system ntp server '0.pool.ntp.org'
# delete system ntp server '1.pool.ntp.org'
# delete system ntp server '2.pool.ntp.org'
# system ntp server 'tock.stdtime.gov.tw'
# system ntp server 'watch.stdtime.gov.tw'
# system ntp server 'time.stdtime.gov.tw'
# commit
# save

顯示有用資訊

您可以在非設定模式下利用 show命令來顯示一些有用資訊,以判斷目前的組態或狀況是否正確無誤或做為診斷之用,常用的顯示資訊為:

  • 顯示網路介面與設定:show interfaces
  • 顯示IP Forwarding狀態(是否啟用;預設安裝為啟用):show ip forwarding
  • 顯示路徑表:show ip route
  • 顯示組態檔內容:show conf
  • 顯示組態命令:show conf command

由於 Vyos 採用單一組態檔-- config.boot (/config目錄下),因此相當易於建立組態檔範本,易於複製、備份還原,底下說明備份還原組態方法。

還原預設組態檔

若您希望恢復Vyos為剛安裝完成後的乾淨空白組態以便重新設定,則重新以load命令戴入預設組態檔,再重新開機即可。

$configure
# load /opt/vyatta/etc/config.boot.default
# commit
# save
# exit
$ reboot

備份與還原組態

由於VyOS的單一組態檔為/config/config.boot,因此最直接的備份方式為拷貝此檔,需要還原組態時就由先前的備份檔案覆寫此檔,再重新開機。

另一個方法則是利用 vyatta-config-gen-sets.pl指令檔備份目前的組態命令,如:

# /opt/vyatta/sbin/vyatta-config-gen-sets.pl > vycmd.txt

然後,可在設定模式下,利用source命令重新執行此備份檔所有命令以還原組態。

# source vycmds.txt

◆ 帳戶及密碼管理

若您基於安全性的考量,希望變更預設的vyos帳戶的密碼,則可在設定模式下,輸入以下指令:

$configure
# set system login user vyos authentication plaintext-password xxxxxxx
# commit  
若您希望新增額外的管理員,則指令群如下: 
$ configure
# set system login user david level admin
# set system login user david authentication plaintext-password xxxxxx
# commit 
若欲刪除某使用者帳戶,請輸入下列指令:
$ configure
# delete system login user vyos
# commit
您可以透過下列指令查看帳戶訊息
# show system login user vyos

靜態路由器

靜態路由是利用手動設定的路徑欄位,而非動態交換的路由訊息來決定最佳封包轉送路徑。由於並無需路由演算法或更新機制,因此不會耗費額外的CPU與記憶體資源,此外,靜態路由亦無路由訊息公告 (Router Advertisement)之傳遞,故較安全且無流量耗費問題,另一方面,靜態路由亦有一些常見的潛在缺點,如易造成管理負戴、人為錯誤的可能及無法因應快速網路變化的網路環境等問題,況且一旦由於路由關係而連線故障,手動介入重設路由可能為必要方法,因此靜態路由通常較適用於小型網路其所需要的路由欄位少且不會輕易變動,除此之外,靜態路由與動態路由亦非相互排斥使用,反倒是經常基於最大路由效率或容錯能力的考量而被設計搭配使用,例如靜態路由可於動態路由失效無法交換路由訊息時提供備援路徑。

設定 VyOS為靜態路由器

VyoS設定路由功能大多利用 "set protocols" 指令,根據上圖的範例,利用二部VyoS系統建立三個子網路的靜態路由功能,通常需要手動新增未直接相鄰網段的路徑,其指令分述如下:

Vyos 路由器一

由於無法直接在寬頻路由器新增192.168.1.0/24和192.168.0.0/24的路徑,因此為了讓這二個子網段的機器可以順利上網,所以需要路由器一啟用NAT位址轉址功能,建立了二個來源NAT的規則,分別針對192.168.1.0/24和192.168.0.0/24網段的機器上網時需由外部介面eth0轉址為192.168.2.1後才能上網。

$ config
# set interfaces ethernet eth0 address 192.168.2.1/24
# set interfaces ethernet eth1 address 192.168.1.1/24
# set system gateway-address 192.168.2.254
# set system name-server 208.67.222.222
# set protocols static route 192.168.0.0/24 next-hop 192.168.1.2 distance 1
# set nat source rule 1
# set nat source rule 1 source address 192.168.1.0/24
# set nat source rule 1 outbound-interface eth0
# set nat source rule 1 translation address masquerade
# set nat source rule 2
# set nat source rule 2 source address 192.168.0.0/24
# set nat source rule 2 outbound-interface eth0
# set nat source rule 2 translation address masquerade
# commit
# save
# exit

下圖則為實際操作畫面。

vyosr1_thumb3

Vyos 路由器二

在本例中,路由器二只需要新增不相鄰的網段192.168.2.0/24之路徑欄位,因此指令如下:

$ config
# set interfaces Ethernet eth0 address 192.168.1.2/24
# set interfaces Ethernet eth1 address 192.168.0.1/24
# set protocols static route 192.168.2.0/24 next-hop 192.168.1.1 distance 1
# set system gateway-address 192.168.1.1
# commit
# save

診斷測試

設定好路由之後,您可以利用 "show ip route"檢視手動新增的路徑是否存在生效,然後再利用"traceroute"與 "ping"來測試流量是否依據所規劃與新增的路徑方向來傳送至目的地。

此外,由於本例中啟用了位址轉譯協定,將內部網段的IP轉換成路由器一的外部介面IP位址以便可以順利上網,因此您可以利用 "show nat source rule"檢視目前的NAT轉換規則是否正確。

shownat_thumb2

RIP路由協定

路由資訊協定(Routing Information Protocol;RIP)為一早期設計(1988)的距離向量路由協定,採用跳躍計數(Hop count)為路徑測量,亦即以通過的路由器數目來做為路徑選擇的依據,RIP利用 UDP 520資料封包以交換路由訊息。通常每隔30秒更新路由訊息(Advertising),若超過180秒未收到路由訊息更新,將會被標示為無效而無法使用,若再經過240秒仍無法收到更新訊息,則將會刪除其路徑欄位。
RIP 有二個版本,1988年的RFC1058文件所提出的一版規格存在許多缺陷,後來經過數次修訂後的RFC2453文件所制定的RIPv2定義了一套有效的改進方案,RIPv2主要的加強與改進是支持變動長度子網路遮罩,支援CIDR,支援群播 (multicast),並且提供了驗證機制
RIP主要的限制為:

  • 跳躍計數不能超過15個,因此無法應用在中大型網路環境
  • 緩慢收斂(slow convergence)

設定Vyos為RIP路由器

使用VyoS為RIP路由器相當簡單,只要利用 "set protocols rip" 命令啟用RIP協定並將其LSA分送至其它介面即可。本例中二部路由器的設定完整命令分述如下。

Vyos 路由器一:

路由器啟用VyoS支援RIP路由協定及相關組態如下:

$ config
# set interfaces ethernet eth0 address 192.168.2.1/24
# set interfaces ethernet eth1 address 192.168.1.1/24
# set system gateway-address 192.168.2.254
# set system name-server 208.67.222.222
# set protocols rip network 192.168.1.0/24
# set protocols rip redistribute connected
# set nat source rule 1
# set nat source rule 1 source address 192.168.1.0/24
# set nat source rule 1 outbound-interface eth0
# set nat source rule 1 translation address masquerade
# set nat source rule 2
# set nat source rule 2 source address 192.168.0.0/24
# set nat source rule 2 outbound-interface eth0
# set nat source rule 2 translation address masquerade
# commit
# save
# exit

Vyos 路由器二:

路由器二也執行相同的設定指令以啟用RIP協定,以便開始讓二部RIP路由器交換路由訊息。

$configure
# set interfaces ethernet eth0 address 192.168.1.2/24
# set interfaces ethernet eth1 address 192.168.0.1/24
# set system gateway-address 192.168.1.1
# set system name-server 208.67.222.222
# set protocols rip network 192.168.1.0/24
# set protocols rip redistribute connected
# commit
# save
# exit

一旦設定完成後,同上述相同的作法,您可利用 show ip route、traceroute、ping 測試其傳送路徑是否正確。

開放最短路由優先協定 (Open Shortest Path First;OSPF)

RIP協定雖然簡單,但有15個跳躍站的限制,並不適合應用在大型網路環境下,因此開放最短路由優先協定 (Open Shortest Path First;OSPF)就成為了解決這個問題最常見的替代路由協定。

開放最短路由優先協定是IETF組織設計的一種基於連結狀態(Link state)的內部自治系統路由協議 (IGP),其透過收集和傳遞自治系統的連結狀態來動態地偵測和傳播路由,詳言之,每一台執行OSPF路由協定的路由器總是將本地網路的連接狀態,(如可用介面資訊、可達鄰居資訊等)用LSA(連結狀態廣播)描述,並播到整個自治系統中去。因而每部OSPF路由器都會收到自治系統中所有路由器的LSA,再藉由這些LSA的集合便組成了LSDB(連結

狀態資料庫)。然後採用最短路徑樹演算法來找出最佳路徑。

OSPF的基本運作過大底如下:

  1. 每部路由器由所有OSPF介面定期透過224.0.0.5多點傳送位址送出「招呼封包」(Hello Packet)給它自己相鄰的路由器,告知自己的存在。
  2. 每部路由器和其相鄰路由器交換一種稱為連結狀態發布(Link State Advertisement;LSA)的封包,而LSA包含了位址/遮罩、測量(metric)、介面的狀態和相鄰清單等資訊(OSPF的連結通常指的是網路介面)。
  3. 每部路由器將LSA儲存在連結狀態資料庫(Link State Database;LSDB),接下來,每部路由器需逐步向外散播LSA,此過程稱之為 Flooding,經由此flooding過程後,每個區域(area)內的路由器擁有一樣的LSDB。
  4. 每個路由器藉由LSDB資訊執行Dijkstra's演算法以選擇最佳路徑 。

ospflow_thumb3

OSPF相較起RIP協定,除了無15個跳躍站的限制之外,還具有二個主要的優點:

  • OSPF 由於採用連結狀態和最短路徑樹演算法,因此為一免於迴路(loop free)的路由協定。
  • OSPF收斂速度快,因此能夠在短的時間內將路由變化傳遞到整個自治系統。

另一方面,OSPF主要的不利之處乃在於複雜和需要耗費較高的記憶體與運算能力,雖然連結狀態與協定的基礎概念不難理解,但面臨大型網路使用OSPF路由協定時路需要了解區域(Area)劃分和網路屬性的複雜性,因此要有較高的網路技術才能管理大型的OSPF網路。

 

設定Vyos為OSPF路由器

設定Vyos為OSPF路由器,需要定義路由器ID和區域,而 OSPF路由器ID的規則為:

  • 假如loopback介面存在並且擁有一個IP位址,則它將被用來做為Router ID (穩定)
  • 假如loopback介面不存在或是存在但並無IP位址,則Router ID將會是所有介面中所設定的最高IP位址 (不建議)
  • 利用子命令手動設定 (set protocols ospf parameters router-id )

本文範例只有簡單的二部路由器區隔成三個子網段,因此只定義一個唯一的區域0.0.0.0而讓二部路由器直接交換路由訊息即可。

Vyos 路由器一:

路由器一除了啟用NAT協定外,也啟用OSPF路由協定、設定路由器ID、定義區域並分送路由訊息,整個設定命令如下:

$configure
# set interfaces ethernet eth0 address 192.168.2.1/24 (設定介面IP)
# set interfaces ethernet eth1 address 192.168.1.1/24
# set interfaces loopback lo address 1.1.1.1/32 (設定loopback 以定義Router ID)
# set system gateway-address 192.168.2.254 (設定預設閘道器)
# set system name-server 208.67.222.222
# set protocols ospf area 0 network 192.168.2.0/24 (啟用OSPF並設定區域0)
# set protocols ospf area 0 network 192.168.1.0/24
# set protocols ospf parameters router-id 1.1.1.1 (手動設定Router ID)
# set protocols ospf redistribute connected
# set nat source rule 1 (設定 SNAT規則一)
# set nat source rule 1 source address 192.168.1.0/24
# set nat source rule 1 outbound-interface eth0
# set nat source rule 1 translation address masquerade
# set nat source rule 2 (設定 SNAT規則二)
# set nat source rule 2 source address 192.168.2.0/24
# set nat source rule 2 outbound-interface eth0
# set nat source rule 2 translation address masquerade
# commit
# save
# exit 

Vyos 路由器二:

路由器二設定為OSPF協定路由器的命令如下:

$configure
# set interfaces ethernet eth0 address 192.168.0.1/24
# set interfaces ethernet eth1 address 192.168.1.1/24
# set interfaces loopback lo address 2.2.2.2/32 
# set system gateway-address 192.168.0.254 
# set system name-server 208.67.222.222
# set protocols ospf area 0 network 192.168.0.0/24
# set protocols ospf area 0 network 192.168.1.0/24
# set protocols ospf parameters router-id 2.2.2.2
# set protocols ospf redistribute connected
# commit
# save
# exit 

一旦設定完成,OSPF路由協定開始運作後,您可以利用 "show ip ospf database"指令來顯示連結狀態資料庫。

vyosshowdb

接下來的內容,將開始說明如何將一部Windows Server 2012 R2設定為軟體路由器。

Windows 路由及遠端存取

Windows Server 從早期的NT時代就內建路由及遠端存取(RRAS)服務支援軟體路由與NAT功能,而目前Windows Server 2012 R2所支援的內部路由功能相當簡單,只支援靜態路由和RIP內部路由協定,不過為了支援雲端混合雲環境,還支援了另一個外部路由協定Border Gateway Protocol (BGP),不過本文將只限於內部路由協定的實作探討,因此不會涉及到外部路由協定BGP。

特別值得一提的是:微軟早期的 Windows Server 2003作業還支援了OSPF這個較佳的內部閘道協定,但從Windows Server 2008版本以後,微軟由於不明的原因和考量,已不再支援OSPF這個內部路由協定,雖然目前唯一支援的動態路由協定RIP第二版比較起傳統的RIP第一版,多支援變動長度子網路遮罩 (Variable Length Subnet Masking;VLSM)、觸發更新(triggered updates)、多點傳送(Multicast)與更新驗證等能力,但OSPF可突破15個跳躍站限制和較快的收斂時間卻仍是RIPv2望塵莫及。

Windows Server 2012 R2作業系統要做為路由器,首先需要先安裝路由及遠端存取(RRAS)服務,安裝的步驟相當簡單,您只需要利用「伺服器管理員」工具內的「新增角色及功能精靈程式」,然後勾選『遠端存取』角色下的『路由』服務進行安裝即可完成。

rras_install_thumb6

 

設定Windows 伺服器為靜態路由器

利用Windows 2012 R2 的路由及遠端存取服務設定為靜態路由器,您需要先啟動和設定NAT,然後再新增必要的靜態路徑,其詳細步驟說明如下:

  1. 開啟『路由及遠端存取』工具。
  2. 以滑鼠右鍵按一下左側伺服器名稱,並在出現的右鍵功能上選擇『設定和啟用路由及遠端存取』選項以啟動「路由及遠端存取伺服器安裝精靈」。
    rraswizard_thumb2
  3. 於「設定」視窗中選取『網路位址轉譯 (NAT)』選項。
    rrasnat_thumb2
  4. 接下來請選取公用介面,亦即用以連接網際網路的介面,也就是轉換的目的地位址之介面。
    rrasnat_pubint_thumb2 
  5. 「名稱及位址轉譯服務」設定頁上選擇下方選項『我將在稍後設定名稱及位址服務』,因為本例純為路由之用途,並不需要啟用DNS代理解析和動態配置IP機制。
    rrasnatdns_thumb2
  6. 完成啟用NAT的設定。
    rrasnatover_thumb2
  7. 接下來,您需要為此路由器一新增其無直接相鄰的網段路徑,本例為192.168.0.0/24,請由「IPv4」下的「靜態路由」右鍵功能表中選取「新增靜態路由」選項,然後在出現的對話方塊中,選擇介面,輸入目的地網路,遮罩、閘道與計量等必要的資訊以新增所欲的靜態路徑
    rrasstaticroute_thumb2
  8. 設定完成後,由工具介面可檢視靜態路由和NAT對應表資訊。
    rrasview_thumb3

Windows Server 路由器二:

Windows Server 設定為本文範例的路由器二,其做法與第一部相似,但更為簡單,因為並無需啟用與設定NAT,只需要安裝路由及遠端存取(RRAS)服務後,執行啟用路由功能和新增靜態路徑即可。

  1. 由『路由及遠端存取伺服器安裝精靈』程式,選取「自訂設定」選項,再按「下一步」。
  2. 接下來,只勾選「LAN 路由」服務後,按「下一步」至次頁,最後按「完成」結束精靈程式。
    rras_lanrouter_thumb3
  3. 接下來只需新增未直接相鄰網段的路徑,本例即是將192.169.2.0/24的封包送至192.168.2.101 即可。
    router2static_thumb5

二部伺服器設定完成後,請利用 route printtracertping 指令測試路徑傳送正確否。

設定Windows伺服器為RIP路由器

設定 Windows Server 2012 R2 為 RIP路由器與前述的靜態路由器之前半段的步驟是一樣的,均是先安裝路由及遠端存取(RRAS)服務,再透過『路由及遠端存取』工具啟用路由功能 (若是第一部路由器還得啟用NAT功能)。但接下來的步驟就略有不同了。

Windows Server 路由器一:

一旦透過「路由及遠端存取伺服器安裝精靈」程式啟動了RRAS 的NAT和路由功能後(等同上節的步驟1~6,接下來的步驟為:

  1. 請由「IPv4-->一般」項目的右鍵功能表,選取「新增路由通訊協定」。
  2. 於畫面所出現的「新增路由通訊協定」列示視窗中,按一下「RIP Version 2 for Internet Protocol」以新增RIPv2路由協定,按下「確定」按鈕後,您就可以在「IPv4」項目下看到新增了一個「RIP」的子項目。
    addripv2pro
  3. 接下來,您需要替RIPv2協定新增使用的網路介面,因此請由上一步驟所新增的「RIP」子項目的右鍵功能表上選取「新增介面」,然後在出現的列示盒上新增欲使用RIP路由協定的網路介面。
    addripint2
  4. 一旦如上述二步驟所述的新增RIP路由協定與網路介面後,您還可以更進一步基於效能、安全或其它任何管理目的的考量來設定路由介面的內容功能。而路由介面的內容共有四個設定頁--「一般」、「安全性」、「芳鄰」和「進階」,這些功能設定說明如下圖所示。
    rrasripgen

     rrasripsec

    rrasripadv

設定完成後,請測試其封包繞送路徑是否如預期般的正確途徑。

再度強調,Windows Server 2012 R2作業系統並不支援 OSPF。

結語

一般而言,軟體路由器擁有相對低成本、實作簡單、易於擴充其它網路功能等優點,但其使用一般用途的CPU以及非專屬的軟硬體則可能在讓其在效能、穩定性與安全上不易滿足許多企業高階上的需求。

本文以Linux為基礎的VyoS系統與 Windows Server的路由及遠端存取服務為實例來說明如何建置軟體路由器的做法,因此網路管理若能夠妥善的規劃設計以避其缺點並且正確的設定,軟體路由器在許多中小型規模的網路環境和測試環境仍能夠發揮其彈性與成本的優勢而達到其使用的目的與用途。

讀者回響 (aohongchen@yahoo.com)