Encryption

如何使用 MikroTik 路由器設置加密的 L2 隧道?

  • January 13, 2016

我想達到什麼

我想將現有的內部子網安全地分佈在多個建築物上。這意味著我有兩個位置的虛擬機需要位於同一子網中。這個想法是虛擬機(具有靜態 IP)可以從一個位置遷移到另一個位置。

(物理)主機連接到每個位置的交換機。因此,如果沒有任何安全或成本問題,我只需用網線連接兩個交換機:

$$ Machines $$—$$ Switch A $$<—- 長電纜 —>$$ Switch B $$—$$ Machines $$ 我想要的是用兩個不需要關心IP地址或路由的網關用加密隧道替換這條長電纜,只需將任何傳入數據包加密並通過加密隧道將它們發送到另一個網關。然後另一個網關解密數據包並將它們發送到遠端交換機。這在物理上看起來像這樣:

$$ Machines $$—$$ Switch A $$—$$ GATEWAY A $$<– 網際網路–>$$ GATEWAY B $$–$$ Switch B $$—$$ Machines $$ 我想避免網關需要子網內的任何 IP 地址。規則應完全基於埠:

  • 埠 1的傳入數據:通過隧道介面路由
  • 隧道介面的傳入數據:通過埠 1路由

兩個網關將有一個靜態的、可路由的 IP 地址來建立隧道。加密應該是強大的(至少 AES128、SHA256、DH2048;共享密鑰很好),簡單的 PPP 類型的隧道不支持。因此可能需要一個額外的/單獨的加密層。

我只有 MikroTik 路由器可用。所以我更喜歡使用它們。但是,我主要在尋找“神奇的詞”(協議名稱等)以及允許我做到這一點的正確技術組合。因此,如果您知道如何使用 Cisco 路由器或 HP 路由器進行操作,那麼如果您解釋瞭如何使用這些路由器進行操作,它可能也會有所幫助……

問題/嘗試

我可以使用什麼樣的防火牆過濾器和協議來實現這一點?

我的第一個想法是使用 IPsec 跨越加密隧道。但是,我需要定義基於物理埠的 IPsec 策略。但是只有一個選項可以定義來自/去往特殊 IP 地址/IP 埠組合的數據。

所以 IPsec 只能作為另一種隧道類型的加密層(MikroTik RouterOS 目前支持 PPTP、SSTP、L2TP 和 OVPN)。由於 PPP 隧道通常不支持強加密,我會讓 IPsec 完成這項工作,並通過加密的 IPsec 隧道跨越未加密的 PPP 隧道。

好的,現在我們至少有一些隧道介面,我們可以像傳出埠一樣使用它。但是,我有點迷失在這裡。我不認為有可能說:“必須通過介面發送傳入 at 的幀”和“必須通過介面發送傳入 at 的幀”。

我不經常在 Layer2 工作……所以我實際上正在尋找正確的“術語”或“類別”。我可以想像在 IP-Firewall (mangle->prerouting) 或類似的地方找到它,但我認為這已經是第 3 層的東西……

我只需要設置一個橋嗎?如果是這樣,我如何將隧道介面添加到網橋(最好使用 winbox 介面)?網橋需要MAC地址嗎?

以防萬一這種嘗試是死路一條:我還在“介面”設置中找到了“EoIP”、“IP 隧道”和“GRE 隧道”。但我真的不知道他們能做什麼……所以以防萬一,讓我知道其中哪些值得調查……

此外,如果有更簡單和乾淨的解決方案,請不要介意告訴我您的解決方案……如果有更簡單的方法,您不必繼續我的上述嘗試!

您可以通過結合使用網橋、EoIP 隧道和 IPsec 來完成您的要求。

首先,您在兩側創建一個 EoIP 隧道,以便兩個路由器可以相互通信。

EoIP是一個 MikroTik 專有隧道,其工作方式與 GRE proto 47 非常相似。

它可以轉發整個乙太網幀,而不僅僅是 IP(例如 IPIP 或 TAP 介面),使其成為通過 L3 鏈路“擴展”L2 廣播域的理想選擇。

然後設置 IPsec 以加密隧道上的通信。

在最新版本的 Mikrotik 上,這可以通過 EoIP 介面設置自動完成,但我更喜歡手動設置以更好地控制。

您將 IPsec 策略應用於 EoIP 隧道端點 IP(因此加密整個 EoIP 隧道流量)而不是通過隧道的網路。

最後,您在兩個路由器上創建一個網橋,並在每一側連接乙太網埠和 EoIP 隧道。

這樣,您可以將 L2 廣播域擴展到遠端端,並且網橋將負責哪些數據包應該通過隧道,哪些應該留在本地。

網橋就像軟體交換機,因此它們會保留一張表,其中列出了哪些 MAC 在哪些埠上,並自動轉發發往哪個埠的數據包。當然,所有廣播流量都將轉發到隧道。 有關橋樑的更多資訊

MikroTik 官方文件中,已經記錄了這種情況(IPsec 加密除外)。

假設我們要橋接兩個網路:“辦公室區域網路”和“遠端區域網路”。通過使用 EoIP 設置,可以使辦公室和遠端 LAN 處於相同的第 2 層廣播域中。

考慮以下設置: 在此處輸入圖像描述

如您所知,無線站無法橋接,為克服此限制(不涉及 WDS),我們將在無線鏈路上創建 EoIP 隧道,並將其與連接到本地網路的介面橋接。

我們不會在這個例子中介紹無線配置,讓我們假設無線鏈路已經建立

首先,我們在網關上創建 EoIP 隧道……

[admin@Our_GW] interface eoip&gt; add name="eoip-remote" tunnel-id=0 \
\... remote-address=10.0.0.2
[admin@Our_GW] interface eoip&gt; enable eoip-remote
[admin@Our_GW] interface eoip&gt; print
Flags: X - disabled, R - running
  0    name=eoip-remote mtu=1500 arp=enabled remote-address=10.0.0.2 tunnel-id=0
[admin@Our_GW] interface eoip&gt;

…在遠端路由器上

[admin@Remote] interface eoip&gt; add name="eoip" tunnel-id=0 \
\... remote-address=10.0.0.1
[admin@Remote] interface eoip&gt; enable eoip-main
[admin@Remote] interface eoip&gt; print
Flags: X - disabled, R - running
  0   name=eoip mtu=1500 arp=enabled remote-address=10.0.0.1 tunnel-id=0

[admin@Remote] interface eoip&gt;

下一步是在我們的 GW 上用 EoIP 隧道橋接本地介面……

[admin@Our_GW] interface bridge&gt; add 
[admin@Our_GW] interface bridge&gt; print
Flags: X - disabled, R - running
 0  R name="bridge1" mtu=1500 arp=enabled mac-address=00:00:00:00:00:00 
      protocol-mode=none priority=0x8000 auto-mac=yes 
      admin-mac=00:00:00:00:00:00 max-message-age=20s forward-delay=15s 
      transmit-hold-count=6 ageing-time=5m 
[admin@Our_GW] interface bridge&gt; port add bridge=bridge1 interface=eoip-remote
[admin@Our_GW] interface bridge&gt; port add bridge=bridge1 interface=office-eth
[admin@Our_GW] interface bridge&gt; port print
Flags: X - disabled, I - inactive, D - dynamic
 #    INTERFACE      BRIDGE  PRIORITY PATH-COST
 0    eoip-remote    bridge1 128      10
 1    office-eth     bridge1 128      10
[admin@Our_GW] interface bridge&gt;

…和遠端路由器:

[admin@Remote] interface bridge&gt; add 
[admin@Remote] interface bridge&gt; print
Flags: X - disabled, R - running
 0  R name="bridge1" mtu=1500 arp=enabled mac-address=00:00:00:00:00:00 
      protocol-mode=none priority=0x8000 auto-mac=yes 
      admin-mac=00:00:00:00:00:00 max-message-age=20s forward-delay=15s 
      transmit-hold-count=6 ageing-time=5m 
[admin@Remote] interface bridge&gt; port add bridge=bridge1 interface=ether
[admin@Remote] interface bridge&gt; port add bridge=bridge1 interface=eoip-main
[admin@Remote] interface bridge&gt; port print
Flags: X - disabled, I - inactive, D - dynamic
 #    INTERFACE      BRIDGE  PRIORITY PATH-COST
 0    ether          bridge1 128      10
 1    eoip-main      bridge1 128      10     
[admin@Remote] interface bridge&gt;

現在兩個站點都在同一個 Layer2 廣播域中。您可以在兩個站點上設置來自同一網路的 IP 地址。

您還需要設置 IPSec。 更多資訊在這裡

請記住,IPsec 雖然是目前在 Mikrotik 上進行通信的最安全方式,但它相當消耗 CPU,除非您的路由器具有硬體加速功能。因此,如果您使用的是簡單的路由器板,則不要期望超過 10-15 兆位的吞吐量。

如果您的路由器有動態網際網路 IP,那麼您將需要使用 MikroTik 的IP > Cloud 功能來獲取動態 DNS,然後使用帶有一點腳本的 DynDNS 來自動更新 EoIP 隧道和 IPsec 對等點和策略上的 IP。公共 IP 發生變化。

最後,我假設您與 Internet 的連接最多只有 1500 字節的 MTU。使用隧道和 EoIP,您需要將 EoIP 隧道介面 MTU 降低到 1400 字節的範圍內(您最好進行一些測試以找出適合您的設置/流量的最佳值)。

對於我的設置/流量,我使用 1400 字節。不幸的是,由於 IPsec 的性質取決於數據包的大小,因此成本是可變的,因此您不能總是充分利用它。

引用自:https://serverfault.com/questions/742440