Monitor de rede de foxboard do Linux

4

Eu quero usar um Foxboard um monitor de rede simples para vários roteadores (todos os roteadores estão conectados à internet). O Foxboard é um mini pc com uma versão incorporada do Debian.

Minha ideia é usar vários dispositivos de rede virtual como este:

  • eth0 192.168.2.10
  • eth0: 1 192.168.3.10
  • eth0: 2 192.168.4.10

Eu encontrei um bom script Python para fazer ping em um host externo aqui (a solução de Ryan Cox): link

É possível configurar o Debian para usar eth0 quando eu faço o ping em www.site-a.com e eth0: 1 quando faço ping em www.site-b.com?

    
por het.oosten 02.09.2012 / 14:38

2 respostas

4

Isso depende de quais endereços IP estão nos vários sites, mas, em geral, isso é possível através do uso de rotas estáticas. Você configura as rotas estáticas no Debian através do arquivo /etc/network/routes .

Uma ressalva: se os sites forem todos Hosts Virtuais no mesmo endereço IP, você não poderá fazê-lo.

# Destination  Gateway           Netmask              Interface
192.0.2.25     192.168.2.1       255.255.255.255      eth0
198.51.100.92  192.168.3.1       255.255.255.255      eth0.1
    
por 02.09.2012 / 14:51
0

Aqui está o roteiro completo, talvez ele possa ser útil para qualquer um que esteja procurando por um monitor de rede barato e de baixa energia (graças a Ryan Cox, veja o início do tópico). Eu acho que também será executado em uma placa de framboesa.

Eu fiz um cronjob para executar este script a cada 5 minutos.

Lembre-se também de definir uma rota para os servidores smtp, caso contrário a mensagem não chegará até você: -)


from threading import Thread
import subprocess
from Queue import Queue

num_threads = 4
queue = Queue()
ips = ["8.8.8.8","8.8.4.4","173.194.67.94","217.10.79.9"]
modem = ["modem1 - entrance - network 10.0.0.1","modem2 - basement - network 10.2.0.1","modem3 - office - network 10.3.0.1", "modem4 - office2 - network 10.4.0.1"]
#wraps system ping command
def mail_error(ip):
    password = False
    if ip == "173.194.67.94" or "8.8.8.8":
        smtp_host = "smtphost1"
        poort = 25
    else:
        smtp_host = "smtphost2"
        poort = 587
        password = True
    import smtplib

    from email.mime.text import MIMEText
    text = "Network error ip address %s" % modem[ips.index(ip)]
    msg = MIMEText(text)
    msg['Subject'] = 'Network wrror %s' % modem[ips.index(ip)]
    me = "mymailaddress"
    you = "mymailaddress"
    msg['From'] = me
    msg['To'] = you
    s = smtplib.SMTP(smtp_host,poort)
    if password:
        s.login("username", "pass")
    s.sendmail(me, [you], msg.as_string())
    s.quit()


def pinger(i, q):
    """Pings subnet"""
    while True:
        ip = q.get()
        print "Thread %s: Pinging %s" % (i, ip)
        ret = subprocess.call("ping -c 1 %s" % ip,
                        shell=True,
                        stdout=open('/dev/null', 'w'),
                        stderr=subprocess.STDOUT)
        if ret == 0:
            print "%s: is alive" % ip
        else:
            print "%s: did not respond" % ip
            mail_error(ip)
        q.task_done()
#Spawn thread pool
for i in range(num_threads):

    worker = Thread(target=pinger, args=(i, queue))
    worker.setDaemon(True)
    worker.start()
#Place work in queue
for ip in ips:
    queue.put(ip)
#Wait until worker threads are done to exit    
queue.join()
    
por 06.09.2012 / 09:21