有没有办法配置 Libreswan,通过从我们信任的主机预加载证书或密钥来机会性地与远程主机创建 IPSec SA?
我正在寻找 Libreswan 配置,该配置允许一组 RHEL、CentOS 或 Fedora 主机在它们之间建立 IPSec SA,而无需为每个主机到主机的连接指定“conn”部分。为了解释我的意思,我举一个例子。我有主持人 alpha、bravo、charlie 和 delta。目前,我有一个类似于以下六个连接的配置部分(Alpha <--> Bravo,Alpha <--> Charlie,Alpha <--> Delta,Bravo <--> Charlie,Bravo <-->达美航空,查理 <--> 达美航空):
conn alpha+bravo
[email protected]
left=10.1.2.3
leftrsasigkey=
[email protected]
right=10.1.2.4
rightrsasigkey=
authby=rsasig
auto=start
虽然我当前的配置允许六台主机通过 IPSec 进行通信,但我担心它的扩展能力,因为配置部分的数量等于 (n*(n-1))/2。对于 20 台主机,我需要 190 个配置部分!我编写了以下 perl 程序,以便轻松从包含昵称、IP 地址和密钥的 CSV 文件生成配置。
#!/usr/bin/perl
#use strict;
use warnings;
sub usage {
$0 =~ /([^\/]+)$/;
my $name = $&;
print "$name [host+keyfile]
each line of host+keyfile should contain the short hostname,
IP address,
and the key returned from 'ipsec showhostkey --left'\n
This program then outputs ipsec.conf content to support
all of the connections.
\n";
exit 1;
}
if ( !defined $ARGV[0] ) {
usage;
}
open (STDI, "$ARGV[0]") or die "Can't open input file: $!";
my $section=0;
my @hosts = <STDI> ;
my (@a, @b) ;
#foreach $i (@hosts) {
for ($i = 0; $i < $#hosts ; $i++) {
for ($j = $i+1 ; $j <= $#hosts ; $j++) {
@a = split(/,/,$hosts[$i]);
@b = split(/,/,$hosts[$j]);
print "conn $a[0]+$b[0]\n";
print "\tleftid=\@$a[0]\n";
print "\tleft=$a[1]\n";
print "\tleftrsasigkey=$a[2]";
print "\trightid=\@$b[0]\n";
print "\tright=$b[1]\n";
print "\trightrsasigkey=$b[2]";
print "\tauthby=rsasig\n";
print "\tauto=start\n\n";
}
}
close STDI;
再说一次,这对我有用,但对于 100 个主机,我的配置文件将是 19 MB!我真正想知道的是,使用 libreswan 在大量主机之间设置主机到主机 IPSec SA/VPN 的正确方法是什么?