更新服务器上的所有IP地址实例

时间:2015-06-24 20:49:49

标签: dns server apache2.2 static-ip-address bind9

我们目前拥有动态提供的IP地址,并且正在切换到静态IP地址。因此,我需要更改3个LAMP服务器上的IP地址。这些服务器还运行bind9 for DNS和postfix / dovecot for email。 (MySQL实际上作为Percona数据库集群运行,可能无关紧要。)

我认为我有一个很好的策略,但是想要与之前成功完成此操作的其他人一起检查我的逻辑。

概念是一次停止每台计算机上的所有Web,数据库和邮件服务,将流量推送到剩余的两台服务器之一,并运行以下脚本以使用新IP地址替换旧IP地址,然后重新启动服务器并尝试将流量推回到它,然后如果一切顺利,继续使用群集中的下一个服务器。

我使用grep -r查找系统中旧ip地址的实例,并且需要确保我没有遗漏任何需要考虑的重要内容。

find /etc/bind -type f -print0 | xargs -0 sed -i 's/old.ip.address/new.ip.address/g'
find /etc/postfix -type f -print0 | xargs -0 sed -i 's/old.ip.address/new.ip.address/g'
find /etc/apache2 -type f -print0 | xargs -0 sed -i 's/old.ip.address/new.ip.address/g'
find /etc/postfix -type f -print0 | xargs -0 sed -i 's/old-ip-address/new-ip-address/g'
find /etc/bind -type f -print0 | xargs -0 sed -i 's/rev.address.ip.old/rev.address.ip.new/g'

作为澄清一点,grep -r在/ etc / bind / zones表,/ etc / postfix配置文件和/ etc / apache2配置文件中找到了IP地址引用。在连字符配置文件中也找到了由连字符分隔的IP地址。反向IP地址也可以在/etc/bind/named.conf.local文件中找到,也需要更换。

任何人都可以看到我在这里可能遗漏了什么吗?我在生产环境中这样做......当然不是最理想的情况。

2 个答案:

答案 0 :(得分:1)

对不起所有人。看起来我在找到解决方案后让它变得陈旧。为了后人的缘故,这里似乎正在起作用:

$ORIGIN example.com.
$TTL 12H
; @ symbol represents example.com.
@   12H IN  SOA ns1.example.com.    hostmaster@example.com. (
2015062954 ;serial
30M ;refresh
2M ;retry
2W ;expire
1D ;minimum TTL
)
NS  ns1.example.com.
NS  ns2.example.com.
MX  10  mail.example.com.
IN  A   99.101.XXX.XXX
IN  TXT "v=spf1 a mx ip4:99.101.XXX.XXX ~all"
IN  SPF "v=spf1 a mx ip4:99.101.XXX.XXX -all"
ns1 IN  A   99.101.XXX.XXX
ns2 IN  A   99.101.XXX.XXX
mail    IN  A   99.101.XXX.XXX
IN  TXT "v=spf1 a mx ip4:99.101.XXX.XXX ~all"
IN  SPF "v=spf1 a mx ip4:99.101.XXX.XXX -all"
www IN  A   99.101.XXX.XXX
dev IN  A   99.101.XXX.XXX
demo    IN  A   99.101.XXX.XXX
webconf IN  A   99.101.XXX.XXX
stats   IN  A   99.101.XXX.XXX

答案 1 :(得分:0)

虽然使用find管道传输给xargs的想法听起来很合理,但我会花15年的经验告诉你这是一个坏主意。我建议:

  1. 识别那些重要的盒子上运行的服务(你的find命令在这里工作得很好)
  2. 识别那些对定义了地址的服务很重要的文件
  3. 备份这些文件(cp to .orig很好用)
  4. 创建包含新地址的新文件
  5. 这样您就可以快速转换:

    cp somefile.new somefile
    

    快速退出:

    cp somefile.orig somefile
    

    此外,我希望区域文件包含实际的DNS条目,因此更改它们很好,但您可能需要重新加载命名以使这些更改生效。同样适用于postfix,你也想要postfix重新加载它们。

    编辑(我没有花时间实际加载此区域,但看起来相当正确):

    $ORIGIN example.com. 
    $TTL 12H @  IN  SOA ns1.example.com.    hostmaster@example.com. ( 
                    2015062660 ; 
                    30M ;refresh 
                    2M ;retry 
                    2W ;expire 
                    1D ;minimum TTL 
                    )   
    
            IN  NS  ns1.example.com. 
            IN  NS  ns2.example.com. 
    
            IN  A   99.101.XXX.X 
    
    example.com.    IN  MX  10  mail.example.com. 
    mail        IN  A   99.101.XXX.X 
            IN  TXT     "v=spf1 a mx ip4:99.101.XXX.X ~all
    
    ns1     IN  A   99.101.XXX.X 
    ns2     IN  A   99.101.XXX.X 
    www     IN  CNAME   example.com. 
    dev         IN  CNAME   example.com. 
    demo        IN  CNAME   example.com. 
    webconf     IN  CNAME   example.com. 
    stats       IN  CNAME   example.com. 
    

    编辑: glue records