您使用什么软件进行中央网络管理?
我的意思是,您记录一台机器的名称、MAC 地址、开放端口和其他信息,然后程序会生成 DHCP、DNS 和防火墙配置片段,并将其包含在主配置文件中。
例如,中央网络管理工具在配置文件中有以下字段:
machine1 | 10.0.0.22 | 01:23:45:67:89:ab | 80/tcp, 53/udp, 53/tcp | owner | room
这将变成三个文件,一个用于 DNS
machine1 IN A 10.0.0.22 ; owner , room
一个用于 DHCP
host machine1 { hardware ethernet 01:23:45:67:89:ab; fixed-address 10.0.0.22; } # owner , room
一个用于防火墙(例如 Linux iptables)
-A mycustomchain -d 10.0.0.22 -p tcp --dport 80 -j ACCEPT # machine1, owner, room
-A mycustomchain -d 10.0.0.22 -p udp --dport 53 -j ACCEPT # machine1, owner, room
手工编写代码并不太难,但是有没有现成的、有良好记录的解决方案?可能的优点:支持不同的 dns、dhcp、防火墙软件,具有类似插件的支持,用于将更新的配置复制到相关服务器并重新启动服务。
我正在寻找一个针对 Linux 系统的工具,但为了完整性起见,欢迎仅使用 Windows 或 BSD 解决方案。
答案1
下面的脚本不会直接回答您的问题,但作为使用 perl 脚本可以执行的操作类型的示例,它可能很有用。我的设置是一栋有 4 层楼的建筑和一个更受限制的管理网络。我使用脚本在新机器到达时添加它们,记录 mac 地址并为它们提供与其所在楼层相对应的地址。我使用 $PWD/.floorN 文件来记录地址,以便我可以正确递增。它还添加了正向和反向 DNS 记录以及 IPAC-NG 规则来记录带宽。该脚本对文件的位置和其中某些文本的存在做出了一些假设,以允许替换新记录。
#!/usr/bin/perl -w
##################
($firstname, $secondname, $mac, $floor) = @ARGV;
$mac2 = lc $mac;
@requires = qw/firstname secondname mac/;
foreach(@requires) {
unless($$_) {
print "\$$_ not found, Please run this as $0 Firstname Secondname MAC floor\n";
exit;
}
}
unless($floor) { $floor = "0"; }
open(IPS, "+<.floor$floor");
$count = 1;
while (<IPS>) { $count++; }
print IPS "$firstname$secondname :$count\n";
print <<END;
adding to /etc/dhcp3/dhcpd.conf
host $firstname$secondname {
hardware ethernet $mac2;
fixed-address 10.0.1$floor.$count;
option routers 10.0.1$floor.254;
}
END
open(ORIG, "/etc/dhcp3/dhcpd.conf");
@orig = <ORIG>;
close(ORIG);
$add = <<END;
host $firstname$secondname {
hardware ethernet $mac2;
fixed-address 10.0.1$floor.$count;
option routers 10.0.1$floor.254;
}
END
open(CONF, "+>/etc/dhcp3/dhcpd.conf");
foreach(@orig) {
$line = $_;
$line =~ s/ \# new entries here/$add\n \# new entries here/;
print CONF $line;
}
close(CONF);
system("/etc/init.d/dhcp3-server restart");
close(IPS);
# add DNS records for this host
print "Adding DNS Entries ...\n";
open(REV, ">>/var/cache/bind/1$floor.0.10.in-addr.arpa");
print REV "$count\t\tPTR\t$firstname$secondname.zone.com.\n";
close(REV);
open(ZONE, ">>/var/cache/bind/zone.com");
print ZONE "$firstname$secondname\t28800\tIN\tA\t10.0.1$floor.$count\n";
close(ZONE);
system("rndc reload");
# Add two ipac rules, so we can see traffic going to/from this IP
print "Adding IP Accounting rules ...\n";
open(IPAC, ">>/etc/ipac-ng/rules.conf");
print IPAC <<END;
$firstname.$secondname in|ipac~i|+|all|0/0|10.0.1$floor.$count
$firstname.$secondname out|ipac~o|+|all|10.0.1$floor.$count|0/0
END
close(IPAC);