#!/usr/local/bin/ruby
# check per min
require 'rubygems'
require 'open-uri'
require 'oauth'
require 'net/telnet'
# ip setting
src_site = "AAAA"
dst_site = "BBBB"
dst_host = "example.com"
router_ip = "10.3.1.1"
tftp_server_ip = "10.3.2.15"
basedir = "/usr/local/adm/globalip/"
id_rsa = "/usr/local/adm/.ssh/globalip_BBBB"
#---
src_file = basedir + "ipaddress.txt"
dst_new_file = basedir + dst_site + "_ipaddress.txt"
dst_old_file = basedir + dst_site + "_ipaddress_old.txt"
send_to = "hogehogehoge@" + dst_host + ":" + basedir + src_site + "_ipaddress.txt"
# get time of day
day_msg = "*** CHANGE *** [" + Time.now.strftime( "%Y/%m/%d-%H:%M" ) + "] " + src_site + ": "
# get hostname
hostname = open( "| hostname" ).gets
# get current ip address from ix2015 by snmp
new_ipaddr = open( "| /usr/local/bin/snmpwalk -v 1 -c public " + router_ip + " ipAdEntAddr | grep -v \" 10.\" | cut -d \" \" -f 4" ).gets
# get old ip address from local file
old_ipaddr = open( src_file ).gets
fork { exec( "scp -i " + id_rsa + " " + src_file + " " + send_to ) }
# update ddns
if ( new_ipaddr != old_ipaddr ) then
############################################################
### twit
CONSUMER_KEY = 'XXXXXXXXXXX'
CONSUMER_SECRET = 'XXXXXXXXXXXX'
ACCESS_TOKEN = 'XXXXXXXXXXXXX'
ACCESS_TOKEN_SECRET = 'XXXXXXXXXXX'
consumer = OAuth::Consumer.new(
CONSUMER_KEY,
CONSUMER_SECRET,
:site => 'http://twitter.com'
)
access_token = OAuth::AccessToken.new(
consumer,
ACCESS_TOKEN,
ACCESS_TOKEN_SECRET
)
response = access_token.post(
'http://twitter.com/statuses/update.json',
'status'=> "@yogata " + day_msg + new_ipaddr + " by " + hostname
)
############################################################
### log
fp = File.open( src_file, "w" )
fp.write( new_ipaddr )
fp.close
# update ipaddress file to fukuoka
fork { exec( "scp -P 20022 -i " + id_rsa + " " + src_file + " " + send_to ) }
end
# check dst update
new_ip = open( dst_new_file ).gets.chomp
old_ip = open( dst_old_file ).gets.chomp
if ( new_ip != old_ip ) then
# connect server
telnet = Net::Telnet.new("Host" => router_ip )
# get router name
String routername = ""
telnet.cmd("svintr-config").each {|c|
if ( c.index("#") != nil && c.index("(config") == nil) then
routername = c.sub(/^(.*)#.*/,'\1').chomp
end
}
if routername == "" then
p "can't get router name"
return
end
# reset ipsec & upload config
telnet.cmd("term len 0")
telnet.cmd("show run").each {|c|
if /ike policy ike_policy_#{dst_site} peer/ =~ c then
telnet.cmd("no " + c)
elsif /ipsec autokey-map ipsec_map_#{dst_site} #{src_site}_to_#{dst_site} peer/ =~ c then
telnet.cmd("no " + c)
end
}
telnet.cmd("ike policy ike_policy_#{dst_site} peer " + new_ip + " key hoge ike_proposal")
telnet.cmd("ipsec autokey-map ipsec_map_#{dst_site} #{src_site}_to_#{dst_site} peer " + new_ip + " ipsec_proposal")
telnet.cmd("write memory")
# sleep 60
telnet.cmd("tftp put startup-config " + tftp_server_ip + ":" + routername + "_" + Time.now.strftime("%Y%m%d_%H%M_config.log"))
telnet.cmd("exit")
# update old file
fork { exec( "cp -f " + dst_new_file + " " + dst_old_file ) }
end