6.12. IPsec 网络到网络配置

IPsec 还可以使用网络到网络连接配置把整个网络(如 LAN 或 WAN)连接到一个远程网络上。网络到网络配置要求你在所连接网络的每一边上设置 IPsec 路由器来处理和选路发送从一个网络上的节点到另一个远程网络上的节点间的信息。图 6-2显示了一个网络到网络的 IPsec 隧道连接。

图 6-2. 网络到网络的 IPsec 隧道连接

该图表显示了两个被互联网分开的 LAN。这些网络使用 IPsec 路由器来验证和引发使用通过互联网的安全隧道的连接。在传输中被劫获的分组将需要强力解密才能攻破保护这些 LAN 之间的分组的加密术。从 192.168.1.0/24 IP 范围的一个节点到 192.168.2.0/24 上的另一个节点间的通信对于这些节点而言是完全透明的,因为对 IPsec 分组的处理、加密、解密、以及选路都是由 IPsec 路由器一手经办。

网络到网络连接所需的信息包括:

例如:假设 LAN A 和 LAN B 想通过 IPsec 隧道来彼此连接。LAN A 的网络地址在 192.168.1.0/24 范围内,LAN B 使用 192.168.2.0/24 范围。LAN A 的网关 IP 地址是 192.168.1.254,LAN B 的网关地址是192.168.2.254。在这个例子中,网关设备也充当 IPsec 路由器。网关使用两个网络设备:eth0 被分派给可从外部进入的静态 IP 地址,它被用来进入互联网;eth1 充当在每个节点间和 eth0 设备中处理和传输 LAN 分组以便传输到互联网的选路点。

每个网络间的 IPsec 连接使用一个值为 r3dh4tl1nux 的预共享钥匙,A 和 B 的管理员都同意让 racoon 自动生成和共享每个 IPsec 路由器之间的验证钥匙。LAN A 的管理员决定把 IPsec 连接命名为 ipsec0,而 LAN B 的管理员决定把 IPsec 连接命名为 ipsec1

以下是 LAN A 的网络到网络 IPsec 连接的 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)。LAN A 的管理员输入目标网关(即 LAN B 的网关 DSTGW=192.168.2.254),以及源网关(即 LAN A 的网关 IP 地址 SRCGW=192.168.1.254)。然后,管理员输入目标网络,即 LAN B 的网络范围(DSTNET=192.168.2.0/24),以及源网络(SRCNET=192.168.1.0/24)。最后,管理员输入目标 IP 地址,它是 LAN B 的可从外界进入的 IP 地址(X.X.X.X)。

以下是预共享钥匙文件(叫做 /etc/sysconfig/network-scripts/keys-ipsecX,这里的 X 对 LAN A 来说是0,对 LAN B 来说是1),两个工作站都使用它来彼此验证。该文件的内容应该完全一致,并且只有根用户才应该有读写权。

IKE_PSK=r3dh4tl1nux

重要重要
 

要改变 keys-ipsec0 文件的权限,因此只有根用户才有读写权,在创建了该文件后执行以下命令:

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(把 X.X.X.X 替换成远程 IPsec 路由器的 IP 地址)。注意,一旦 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 转发。在 shell 提示下作为根用户来启用 IP 转发:

  1. 编辑 /etc/sysctl.conf,把 net.ipv4.ip_forward 设置为 1

  2. 执行以下命令来启用改变:

    sysctl -p /etc/sysctl.conf

要启动 IPsec 连接,重新引导 IPsec 路由器或在每个路由器上以根用户身份执行以下命令:

/sbin/ifup ipsec0

连接被激活,LAN A 和 LAN B 能够彼此通信。通过对 IPsec 连接运行 ifup,路线会通过初始脚本被自动创建。要显示网络的路线列表,运行以下命令:

/sbin/ip route list

要测试 IPsec 连接,运行 tcpdump 工具来查看在主机(或网络)间传输的网络分组,并校验它们是否通过 IPsec 被加密了。分组应该包括 AH 头,而且应该被显示为 ESP 分组。ESP 意味着它被加密了。例如,要检查 LAN 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)