cloudstack控制台域名服务

cloudstack通过控制台访问虚拟机要通过外网解析域名得到ip,

解析10-20-30-40.realhostip.com,返回地址10.20.30.40。

如果管理节点到ns.realhostip.com之间的网络有问题,就会出现不能访问虚拟机控制台的情况,因此,仿造realhostip.com写了一个python的udp服务来解析这些地址,毕竟只是简单的替换。代码:

#!/usr/bin/env python
"USAGE: %s <port>"
from SocketServer import DatagramRequestHandler, UDPServer
from sys import argv
from dnslib import *
import re

class EchoHandler(DatagramRequestHandler):
    def handle(self):
       print "Client connected:", self.client_address
       message = self.rfile.read()
       d = DNSRecord.parse(message)
       s = str(d.q)
       #print s
       domain = s.split(" ")[0].lstrip(";")
       print domain
       iprex = r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
       ip = domain.split(".")[0].replace("-",".")
       print ip
       result = re.search(iprex, ip)
       print result
       #print result.group()
       if result == None:
          ip = r"8.8.8.8"
       rd = DNSRecord(DNSHeader(id=d.header.id,qr=1,aa=1,ra=1),q=DNSQuestion(domain),a=RR(domain,rdata=A(ip)))
       rm = rd.pack()
       self.wfile.write(str(rm))

if len(argv) != 2:
    print __doc__ % argv[0]
else:
    UDPServer(('',int(argv[1])), EchoHandler).serve_forever()

这样使用本地的域名服务器就放心了^_^

此条目发表在python, 好玩的linux, 虚拟化分类目录。将固定链接加入收藏夹。