whereami — автоматическая реконфигурация

whereami - автоматическая реконфигурацияWhereami — это программа, которая позволяет автоматически реконфигурировать систему при изменении ее географического положения. При этом, однако, предполагается, что со сменой географического положения у вас изменились и сетевые настройки. Это, в общем-то, полезно, если вы используете ноутбук в разных местах — дома, на работе, в аэропорту, незнакомых кафе с вайфаем и так далее. Но во всех этих местах системные настройки желательно выставлять такими, которые соответствуют максимально безопасным и удобным для текущего местоположения.

Установка whereami

apt-get install whereami

Настройка

Настройка осуществляется через конфигурационные файлы. Таких файлов несколько, и они все находятся в директории /etc/whereami/. Вот эти файлы:

apm.conf — Файл для whereami, который используется при переходе в режим ожидания (suspend) и выходе из него.

detect.conf — Файл настроек определения местоположения.

mail-relay.conf — Файл для настройки почтового релэя.

whereami.conf — Главный файл настроек.

Давайте рассмотрим пример несложной конфигурации. Предположим, что у нас есть ноутбук, который перемещается между двумя сетями — домашней и рабочей.

Параметры домашней сети:
Сеть: 192.168.0.0/24
Шлюз: 192.168.0.1
DNS: 192.168.0.1
Работает DHCP

Параметры рабочей сети:
Сеть: 10.0.2.0/24
Шлюз: 10.0.2.2
DNS: 192.168.0.1
Работает DHCP

Совпадают только адрес DNS-сервера и маска сети (24 бита), адрес шлюза и сетевые адреса различаются. Этого более чем достаточно для того, чтобы определить, в какой из двух сетей мы находимся и, соответственно, выключить ненужные сервисы, например, Samba.

Поэтому сделаем следующее. В домашней сети будем запускать postgresql и выключать фаервол, в рабочей отключать postgresql и включать фаервол. А при выходе из спящего режима автоматически определять местоположение.

Самое первое, что сделаем — это зададим автоопределение для выхода из спящего режима. Для этого в файле /etc/whereami/apm.conf раскомментируем строчку

RESUME_LOCATION=auto

Теперь нам надо выполнить автоопределение местоположения. Назовем их home и work для дома и работы соответственно. Для этого напишем небольшой файлик detect.conf, в который включим определение местоположения.

# Устанавливаем местоположение по умолчанию
default home

# Проверяем, поднят ли интерфейс eth0
testmii eth0 lan
# Аналогично wlan0
testmii wlan0 wlan

# Если проводной интерфейс поднят, рестартуем dhcp-клиент
if lan
    set INTERFACE eth0
    testdhcp restart dhcp
fi

# А этот кусочек определяет местоположение при использовании DHCP
# Этот вариант нам подходит, поскольку DHCP есть и дома, и на работе
if dhcp
    testdhcp 192.168.0.* home
    testdhcp 10.0.2.* work
fi

Теперь можно использовать местоположение, которое мы определили (home или work), чтобы выполнить соответствующие действия. Сами действия описываются в другом файле — whereami.conf

# Если не wlan, то опускаем интерфейс wlan0
!wlan ifconfig wlan0 down
!wlan resolvconf -d wlan0

# Если не lan, то опускаем eth0
!lan ifconfig eth0 down
!lan resolvconf -d eth0

# В домашней сети выполняем соответствующие команды
=home service postgresql start
=home service ufw stop
# При установлении того, что мы находимся в home
+home mount.nfs4 //192.168.0.2/share /mnt/homeshare
# При установлении того, что находимся не в home
-home umount /mnt/homeshare

# В рабочей сети выполняем эти команды
=work service postgresql stop
=work service ufw start
# При установлении того, что мы находимся в work
+work mount.cifs //10.0.2.20/share /mnt/share
# При установлении того, что мы находимся не в work
-work umount /mnt/share

Таким образом можно автоматизировать создание среды при изменении сетевых настроек. Выше очень простой пример, на самом деле можно настроить работу как в нескольких известных сетях, так и в ранее неизвестных. Можно, конечно, написать скрипты (на баше, например), а можно взять уже готовое решение и просто его настроить.