Linux foxboard сетевой монитор
Я хочу использовать Foxboard - простой сетевой монитор для нескольких маршрутизаторов (все маршрутизаторы подключены к Интернету). Foxboard - это мини-ПК со встроенной версией Debian.
Моя идея состоит в том, чтобы использовать несколько виртуальных сетевых устройств, как это:
- eth0 192.168.2.10
- eth0: 1 192.168.3.10
- eth0: 2 192.168.4.10
Я нашел хороший скрипт Python для проверки связи с внешним хостом здесь (решение от Райана Кокса): https://stackoverflow.com/questions/316866/ping-a-site-in-python
Можно ли настроить Debian на использование eth0, когда я пингую www.site-a.com, и eth0: 1, когда я пингую www.site-b.com?
2 ответа
Это зависит от того, на каких IP-адресах находятся различные сайты, но в целом это возможно с помощью статических маршрутов. Вы настраиваете статические маршруты в Debian через /etc/network/routes
файл.
Одно предупреждение: если все сайты являются виртуальными хостами с одним IP-адресом, вы не сможете это сделать.
# 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
Вот полный сценарий, возможно, он может быть полезен всем, кто ищет дешевый и низкоэнергетический сетевой монитор (спасибо Райану Коксу, см. Начало темы). Я думаю, что это также будет работать на доске малины.
Я сделал cronjob для запуска этого скрипта каждые 5 минут.
Не забудьте также указать маршрут для серверов smtp, иначе почтовое сообщение не дойдет до вас:-)
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()