6.12. IPsec 網路與網路的設定

也可以設定 IPsec 使用一種網路與網路的連線方式來連線一整個網路(例如一個區域網路或 廣域網路)到一個遠端的網路。 一個網路與網路的連線需要在進行連線的網路兩端設定 IPsec 路由器以處理與路由來自網路中一個節點的資訊到遠端網路中的另一個節點。 圖形 6-2 顯示出一個網路與網路 IPsec 穿隧的連線。

圖形 6-2. 一個網路與網路 IPsec 穿隧的連線

這個圖表顯示出由網際網路分隔的兩個區域網路,這些網路使用 IPsec 路由器來透過網際網路 使用一個安全的穿隧進行認證與初始連線。 傳輸過程中被擷取的封包將需要使用暴力法(Brute Force) 才能破解保護這些區網間傳輸封包的密文(cipher)。 對於進行連線的節點來說,這個位於 192.168.1.0/24 IP 範圍之節點與 192.168.2.0/24 中另一節點的通訊過程是完全不知情的, 因為 IPsec 封包的處理、加密/解密以及路徑選擇都完全由 IPsec 路由器所處理。

一個網路與網路連線所需的資訊包括了:

舉例來說,假設區域網路 A (lana.example.com)與區域網路 B (lanb.example.com) 想要透過 一個 IPsec 穿隧彼此連線,區域網路 A 的網路位址是在 192.168.1.0/24 範圍內,而區域網路 B 使用 192.168.2.0/24 範圍。 區域網路 A 的閘道器 IP 位址是 192.168.1.254,而區域網路 B 為 192.168.2.254。 IPSEC 路由器是與每一個區域網路閘道器分隔的,它使用兩個網路裝置, eth0 被指派一個可由外界存取的靜態 IP 位址(可用來存取網際網路),而 eth1 則當作一個 路由點以處理與傳輸來自一個網路節點的區域網路封包到遠端網路的節點。

在每一個網路間的 IPsec 連線使用一個預先共享的金鑰,含有 r3dh4tl1nux 數值,而且區網 A 與 B 的系統管理員同意讓 racoon 自動產生並且在每 一部 IPsec 路由器間分享一個認證金鑰。 區網 A 的系統管理員決定命名 IPSEC 連線為 ipsec0,而區網 B 的系統管理員決定命名 IPSEC 連線為 ipsec1

以下為一個網路與網路 IPsec 連線於區網 A 的 ifcfg 檔案,此例中 用來辨識此連線的獨特名稱是 ipsec1,所以所產生的檔案將命名 為 /etc/sysconfig/network-scripts/ifcfg-ipsec1

TYPE=IPsec
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=192.168.1.254
DSTGW=192.168.2.254
SRCNET=192.168.1.0/24
DSTNET=192.168.2.0/24
DST=X.X.X.X

這個連線被設定為於開機時啟動 (ONBOOT=yes),並且 使用預先共享金鑰的加密方法(IKE_METHOD=PSK)。 區網 A 的系統管理員輸入目的地的閘道器,也就是區網 B 的閘道器 (DSTGW=192.168.2.254), 以及來源閘道器,也就是區網 A 的閘道器 IP 位址(SRCGW=192.168.1.254)。 再來,系統管理員會輸入目的地網路,也就是區網 B 的網路範圍(DSTNET=192.168.2.0/24),以及來源網路 (SRCNET=192.168.1.0/24)。 最後,系統管理員再輸入 目的地 IP 位址,也就是區網 B 可被外界存取的 IP 位址 (X.X.X.X)。

以下為兩個網路使用來彼此認證的預先共享金鑰檔案(稱為 /etc/sysconfig/network-scripts/keys-ipsecX,區網 A 的 X 為 0,而區網 B 為 1)。 於兩個網路中,這個檔案必須是 相同的,而且只有 root 使用者才能讀取或寫入這個檔案。

IKE_PSK=r3dh4tl1nux

重要重要
 

如要變更 keys-ipsec0 檔案的權限設定使得只有 root 使用者才能讀取 與編輯這個檔案,請在建立好檔案後執行下列指令:

chmod 600 /etc/sysconfig/network-scripts/keys-ipsec1

如要在任何時候變更認證金鑰,請編輯位於兩部 IPsec 路由器上的 keys-ipsecX 檔案,兩個金鑰必須是相同的才能使連線順利。

以下為用於 IPsec 連線的 /etc/racoon/racoon.conf 設定檔案,請注意 在檔案底部的 include 那一行只與 IPsec 穿隧連線時才會 出現,因為它是在 IPsec 連線每次啟動時自動產生的。

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
	pfs_group 2;
	lifetime time 1 hour ;
	encryption_algorithm 3des, blowfish 448, rijndael ;
	authentication_algorithm hmac_sha1, hmac_md5 ;
	compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

以下為連線到遠端網路的特定設定,此檔案被命名為 X.X.X.X.conf (請以遠端 IPsec 路由器的 IP 位址取代 X.X.X.X)。 請注意,這個檔案適於 IPsec 穿隧啟動時自動產生的,不可以直接編輯它。

;
remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

在啟動 IPsec 連線前,核心中必須啟用 IP forwarding。 請以 root 身份在 shell 提示符號下, 啟用 IP forwarding:

  1. 請編輯 /etc/sysctl.conf 檔案,並且設定 net.ipv4.ip_forward1

  2. 再執行下列指令以使變更生效:

    sysctl -p /etc/sysctl.conf

如要啟動 IPsec 連線,您可以重新啟動 IPsec 路由器或在每一部路由器上以 root 身份執行下列 指令:

/sbin/ifup ipsec0

連線將會被啟用,而且區網 A 與 B 也都可以互相連線,路由表也經由執行 ifup IPsec 連線所呼叫的初始程式碼所自動建立,如要顯示網路的路由表,請執行下列指令:

/sbin/ip route list

如要測試 IPsec 連線,請在外部可存取的裝置上(此例為 eth0)執行 tcpdump 工具程式,來檢視在主機(或網路間)傳輸的網路封包,並且檢驗它們是否已經經由 IPsec 進行 加密。 例如,如要檢查區網 A 的 IPsec 連線狀況,請輸入下列指令:

tcpdump -n -i eth0 host lana.example.com

封包中應該含有一個 AH 表頭,而且必須是一個 ESP 封包。 ESP 表示該封包已經加密過了。 例如(反斜線代表指令行的繼續):

12:24:26.155529 lanb.example.com > lana.example.com: AH(spi=0x021c9834,seq=0x358): \
	  lanb.example.com > lana.example.com: ESP(spi=0x00c887ad,seq=0x358) (DF) \
	  (ipip-proto-4)