четверг, 13 июля 2017 г.


ProxMox — уменьшаем диск в LXC.




Задача : после переноса данных в другой mount_point, капитальной расчистки внутри LXC-контейнера или ошибочного задания слишком большого размера файла диска требуется этот диск ресайзнуть в меньшую сторону.

Веб-интерфейс такого не предоставляет (там можно только увеличить размер), поэтому переведу одну рекомендацию с форума проксмокса (https://forum.proxmox.com/threads/shrink-disk-size.24808/#post-124343), чтобы не потерялась.

Для примера, у нас будет LXC-контейнер № 366, проксмокс 4.2, надо уменьшить размер диска с 8 Гб до 2 Гб, пути стандартные.

По шагам, поехали:

1). Останавливаем контейнер.

2). Делаем бэкап.
3). Проверяем, что бэкап есть.

4). Дополнительно копируем файл с дисковым образом ( /var/lib/vz/images/366/vm-366-disk-1.raw ) в другой каталог, если что-нибудь пойдёт не так. Такой образ закопировать назад поверх битого может быть в ряде случаев быстрее, чем разжать из бэкапа.

5). Заходим в каталог с образом диска:
# cd /var/lib/vz/images/366

6). Проверяем файловую систему:
# e2fsck -f vm-366-disk-1.raw
Видим вот такое:

e2fsck: MMP: fsck being run while checking MMP block
MMP check failed: If you are sure the filesystem is not in use on any node, run:
‘tune2fs -f -E clear_mmp {device}’

7). Делаем исправление:
# tune2fs -f -E clear_mmp vm-366-disk-1.raw

8). Снова проверяем, что файловая система внутри теперь в норме:
# e2fsck -f vm-366-disk-1.raw
Должен быть примерно такой вывод:


e2fsck 1.42.12 (29-Aug-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
vm-366-disk-1.raw: 21325/524288 files (0.4% non-contiguous), 240360/2097152 blocks

9). Уменьшаем размер самой структуры файловой системы внутри дискового образа:
# resize2fs -M vm-366-disk-1.raw 2G
Размер ФС будет сильно уменьшен:


resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on vm-366-disk-1.raw to 318585 (4k) blocks.
The filesystem on vm-366-disk-1.raw is now 318585 (4k) blocks long.

Обратите внимание на число блоков — 318585 !

10). Обрежем лишнюю часть файла до размера 2 Гб:
# truncate -s 2G vm-366-disk-1.raw

11). Расширим размер структуры файловой сисемы до нового размера файла-образа:
# resize2fs vm-366-disk-1.raw
Это нужно, чтобы внутри файла выделенное пространство полностью было задействовано файловой системой.


resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on vm-366-disk-1.raw to 524288 (4k) blocks.
The filesystem on vm-366-disk-1.raw is now 524288 (4k) blocks long.

Обратите внимание на число блоков — 524288 !

12). Исправим размер образа в конфиге контейнера:
# vi /etc/pve/nodes/vps3/lxc/366.conf
Если vi вызывает у вас аллергию — используйте любой другой редактор, их много. Правим параметр size в свойствах диска:

rootfs: local:366/vm-366-disk-1.raw,size=2G

Сохраняем, обновляем страницу со свойствами контейнера в веб-интерфейсе, убеждаемся, что размер поменялся.

13). Запускаем контейнер.

14). Заходим в него по SSH, проверяем, что всё работает, смотрим на свободное место :
# df -h -t ext4

Filesystem Size Used Avail Use% Mounted on
/dev/loop1 1.9G 677M 1.1G 39% /

1.9 Гб вместо 7.8 Гб места при 677М данных. Это очень позитивно сказывается на скорости переноса контейнера (при отсутствии общего хранилища), времени бэкапа/восстановления и глубине / объёмах бэкапов.

понедельник, 10 июля 2017 г.

Управление автозагрузкой в debian

Скрипты инициализации - это не большие программы на shell, которые обычно управляют сервисами, также известными как демоны. Прочие приложения для скриптов инициализации включают в себя простое управление состоянием чего-нибудь вроде hdparm (управляет временем перехода в спящий режим для жестких дисков), iptables (загрузка правил файрвола в ядро) и setserial (конфигурация последовательного порта). Директория /etc/init.d содержит скрипты исполняемые с помощью init во время загрузки и состоянии инициализации.
Скрипты инициализации также важны во время запуска и останова системы (в *nix системах просто меняется“runlevel”). Если вы посмотрите на список процессов, запущенных на вашей машине (попробуйте команду ps auwx), то есть вероятность, что процесс с наименьшим PID будет называться “init”. Это родительский процесс для всех процессов, это первая программа которую ядро запускает при загрузке. Программа init, которую можно найти по пути /sbin/init, ответственна за в рабочее состояние после того, как загрузится ядро.
Существует три простые утилиты для управления стартовыми и инициализационными скриптами:
Далее мы рассмотрим их все и приведем несколько примеров их использования.

update-rc.d

Устанавливает и удаляет ссылки на скрипты инициализации в System-V стиле. update-rc.d автоматически обновляет ссылки на скрипты инициализации в System-V стиле вида /etc/rcrunlevel.d/NNname на скрипты /etc/init.d/name. Они запускаются с помощью init когда меняется уровень загрузки и обычно используются для запуска или остановки системных сервисов, таких как  демоны. init поддерживает следующие уровни загрузки - 0123456789S и NN - это двухцифренный код используемый init для определения в каком порядке должны запускаться скрипты.
Синтаксис update-rc.d
update-rc.d [-n] [-f] name remove
update-rc.d [-n] name defaults [NN | NN-start NN-stop]
update-rc.d [-n] name start|stop NN runlevel runlevel start|stop NN runlevel runlevel
Когда запускается с опциями defaults, start или stop, update-rc.d создает ссылки /etc/rcrunlevel.d/[SK]NNname указывающие на скрипт /etc/init.d/name. Если какие-либо файлы уже существуют, то update-rc.d ничего не делает. Это объясняется тем, что системный администратор может изменить порядок ссылок, при условии, что как минимум одна ссылка сохранится, без того чтобы конфигурация была перезаписана.
Доступные опции.
-n - ничего не делать, только показать что будет сделано.
-f - заставить удалять символические ссылки  даже если /etc/init.d/name все еще существует.
Примеры использования update-rc.d
Вставить ссылки с использованием defaults:
# update-rc.d samba defaults
Эквивалентная команда с использованием явных наборов аргументов:
# update-rc.d samba start 20 2 3 4 5 . stop 20 0 1 6 .
Если вы хотите удалить скрипт из автозагрузки, то используйте следующую команду:
# update-rc.d -f samba remove
Если вы хотите узнать о команде update-rc.d больше, то прочтите страницу man.

rcconf

Rcconf позволяет управлять тем, какие сервисы будут запускаться когда система загружается или уходит в перезагрузку. Утилита показывает меню, содержащее все сервисы, которые должны быть запущены при загрузке. Те, которые должны запускаться помечены и вы можете включить или выключить отдельные сервисы. Эта утилита конфигурирует системные сервисы во взаимодействии с системными уровнями загрузки (runlevels). Она включает или выключает сервисы с применением скриптов в /etc/init.d/. Rcconf работает с конфигурацией уровней загрузки в стиле System-V. Фактически это TUI(Text User Interface) к команде update-rc.d
Rcconf получает список сервисов от /etc/init.d и просматривает директории /etc/rc?.d чтобы определить запущен сервис или нет.
Если число (NN в /etc/rc?.d/NNname) не равно 20 (по умолчанию), то rcconf сохраняет имя сервиса и число в /var/lib/rcconf/services так что возможно восстановить конфигурацию сервиса в исходном состоянии.
Установка rcconf в Debian.
# aptitude install rcconf
Эта команда выполнит установку. Теперь вы можете использовать утилиту с помощью команды:
# rcconf
Если будет выводится сообщение rcconf needs dialog or whiptail, то необходимо будет установить утилиту dialog:
# aptitude install dialog
Теперь запустив rcconf Вы увидите на экране следующее:
rcconf управление автозагрузкой
Важные файлы:
/var/lib/rcconf/services - файл с данными о номерах процессов.
/var/lib/rcconf/lock - файл блокировки.
/var/lib/rcconf/guide.default - Guide File который генерируется утилитой update-rcconf-guide.
/var/lib/rcconf/guide - Guide File  который может быть определен пользователем (администратором).
Если вы хотите узнать больше об утилите rcconf, то ознакомьтесь со страницей man.

file-rc

Этот пакет предоставляет альтернативный механизм для загрузки или остановки системы и смены уровней загрузки. Ссылки /etc/rc?.d/* будут сконвертированы в единый конфигурационный файл /etc/runlevel.conf который легче администрировать, чем символьные ссылки и который более гибок. Пакет автоматически сконвертирует ваши существующие символьные ссылки в файл во время установки и конвертирует файл обратно в символьные ссылки при удалении. Оба механизма совместимы посредством скриптов /etc/init.d/rc, /etc/init.d/rc*, /usr/sbin/update-rc.d и /usr/sbin/invoke-rc.d
Установка file-rc в Debian.
# aptitude install file-rc
В ходе установки в русифицированной версии Debian выводятся следующие сообщения:
Следующие НОВЫЕ пакеты будут установлены:
file-rc
0 пакетов обновлено, 1 установлено новых, 0 пакетов отмечено для удаления, и 42 пакетов не обновлено.
Необходимо получить 39,2 kB архивов. После распаковки 184 kB будет занято.
Следующие пакеты имеют неудовлетворённые зависимости:
sysv-rc: Конфликтует: file-rc но устанавливается 0.8.12.
Следующие действия разрешат зависимости:
    Удалить следующие пакеты:
1)     sysv-rc
Принять данное решение? [Y/n/q/?] y
Следующие НОВЫЕ пакеты будут установлены:
file-rc
Следующие пакеты будут УДАЛЕНЫ:
sysv-rc{a}
0 пакетов обновлено, 1 установлено новых, 1 пакетов отмечено для удаления, и 41 пакетов не обновлено.
Необходимо получить 39,2 kB архивов. После распаковки освободится 123 k байт.
Хотите продолжить? [Y/n/?] y
Получить:1 http://mirror.yandex.ru/debian/ squeeze/main file-rc all 0.8.12 [39,2 kB]
Получено 39,2 kБ в 0с (462 kБ/с)
dpkg: sysv-rc: имеются проблемы с зависимостями, но по вашему указанию
он всё равно будет удалён:
initscripts зависит от sysv-rc | file-rc, однако:
Пакет sysv-rc будет удалён.
Пакет file-rc не установлен.
sysvinit зависит от sysv-rc | file-rc, однако:
Пакет sysv-rc будет удалён.
Пакет file-rc не установлен.
(Чтение базы данных ... на данный момент установлено 36373 файла и каталога.)
Удаляется пакет sysv-rc ...
warning: reverting to legacy boot ordering
Обрабатываются триггеры для man-db ...
Выбор ранее не выбранного пакета file-rc.
(Чтение базы данных ... на данный момент установлено 36346 файлов и каталогов.)
Распаковывается пакет file-rc (из файла .../file-rc_0.8.12_all.deb)...
Обрабатываются триггеры для man-db ...
Настраивается пакет file-rc (0.8.12) ...
Текущее состояние: 41 обновлён [-1].
Конфигурационный файл file-rc расположен в /etc/runlevel.conf. Если вы хотите посмотреть конфигурационный файл по умолчанию, то это можно сделать здесь.
Пример:
#
05 - 0 /etc/init.d/halt
05 - 1 /etc/init.d/single
05 - 6 /etc/init.d/reboot
10 0,1,6 2,3,4,5 /etc/init.d/sysklogd
12 0,1,6 2,3,4,5 /etc/init.d/kerneld
[…]
89 0,1,6 2,3,4,5 /etc/init.d/cron
99 - 2,3,4,5 /etc/init.d/rmnologin
99 0,1,6 2,3,4,5 /etc/init.d/xdm

Zabbix 3.2 (Debian 8)


Установка пакета конфигурации репозитория


Установите пакет конфигурации репозитория. Этот пакет содержит файлы конфигурации apt.
# wget http://repo.zabbix.com/zabbix/3.2/debian/pool/main/z/zabbix-release/zabbix-release_3.2-1+jessie_all.deb
# dpkg -i zabbix-release_3.2-1+jessie_all.deb
# apt-get update


Установка пакетов Zabbix


Например, установка Zabbix сервера с веб-интерфейсом и с базой данных MySQL.
# apt-get install zabbix-server-mysql zabbix-frontend-php

Создание начальной базы данных


Создайте базу данных zabbix и пользователя в MySQL. Для получения сведений как это сделать, смотрите скрипты создания базы данных в случае MySQL.

# mysql -uroot -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '<пароль>';
mysql> quit;


Затем импортируйте изначальную схему и данные.
# cd /usr/share/doc/zabbix-server-mysql
# zcat create.sql.gz | mysql -uroot zabbix -pпароль


Запуск процесса Zabbix сервера


Измените настройки базы данных в zabbix_server.conf
# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix


Запустите процесс Zabbix сервера.
# service zabbix-server start

Изменение конфигурации PHP для веб-интерфейса Zabbix


Файл конфигурации Apache для веб-интерфейса Zabbix размещается в /etc/apache2/conf-enabled/zabbix.conf. Некоторые параметры конфигурации PHP уже заданы.

php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
# php_value date.timezone Europe/Riga

Необходимо раскомментировать настройку “date.timezone” и установить корректный часовой пояс.

После изменения файла конфигурации перезапустите веб-сервер apache.
# service apache2 restart

Веб-интерфейс Zabbix доступен через браузер по адресу http://zabbix-frontend-hostname/zabbix. Имя пользователя/пароль по умолчанию - Admin/zabbix.

суббота, 8 июля 2017 г.


КАК СОЗДАТЬ ЗАГРУЗОЧНУЮ USB-ФЛЕШКУ В ANDROID
загрузочная usb-флешка · эмулятор терминала · android · usb-хост · termux · debian · iso
USB-флешки подключаются к Nexus 7 через 
переходникВот вам ситуация. Компьютер после обновления операционной системы больше не загружается, не знаю почему. Разбираться нет желания, тем более, что всё равно собирался установить SSD вместо жёсткого диска. Загрузочной флешки нет, зато есть Android-планшет. Вот с помощью него и буду создавать такую флешку.

Сразу нужно уточнить, что необходимо, чтобы создать загрузочную USB-флешку на Android-устройстве. Во-первых, оно должно иметь USB-хост. Во-вторых, нужен переходник с micro-USB на обычный USB. А в третьих, на устройстве обязательно должны быть получены права суперпользователя, то есть рут (root). Далее все действия я буду производить на планшете Nexus 7 (Android 6.0.1) для создания загрузочной флешки с установщиком Debian 8 Jessie.

Из репозитория F-Droid устанавливаем программу Termux (она требует наличия Android 5+), с официального сайта Debian прямо планшетом скачиваем образ для сетевой установки "64-bit PC netinst iso". В файловом менеджере сразу переименуем его в что-то простое, например "debian.iso". Затем настраиваем Termux, чтобы получить доступ к внутренней памяти планшета, где лежит iso-файл:
$ termux-setup-storage
С помощью команды su переходим в сеанс суперпользователя. Подключаем USB-флешку к планшету через переходник, о чём вверху экрана появится соответствующее уведомление. В окошке этого уведомления нужно сразу же отмонтировать флешку, но физически не отключать её от планшета. Таким образом она не будет доступна для подсистемы Android, но её можно будет перезаписать в Termux. Эта программа является эмулятором терминала и позволяет получить доступ к командной строке Linux и утилитам BusyBox. Думаю, с таким же успехом можно использовать ConnectBot или любой другой эмулятор терминала, но я не пробовал. Переходим в терминале в директорию, где находится файл образа установочного диска:
$ cd storage/shared/Downloads
Для ConnectBot будет ещё проще:
$ cd /sdcard/Downloads
Затем находим флешку в системе при помощи команды blkid:
/dev/block/mmcblk0p3: LABEL="system" UUID="da654c53-9beb-f85c-28c5-cedf76546f7a" TYPE="ext4"
/dev/block/mmcblk0p4: UUID="76db5086-6e68-5235-ada0-1a54dae7ec32" TYPE="f2fs"
/dev/block/mmcblk0p7: UUID="96C1-0DF7" TYPE="vfat"
/dev/block/mmcblk0p9: UUID="41a5eff0-790b-4857-a85c-d2fcef327548" TYPE="f2fs"
/dev/block/zram0: TYPE="swap"
/dev/block/sdc1: UUID="21CC-FE44" TYPE="vfat"
Сразу отсеиваем всё, что содержит zram и mmcblk. То, что нам нужно — это "/dev/block/sdc1". Если нет уверенности, можно отсоединить флешку, снова выполнить команду blkid и посмотреть, какое устройство пропало из списка. Определившись, заливаем образ установщика Debian:
$ cp debian.iso /dev/block/sdc1
$ sync
Готово, выдёргиваем флешку из планшета и загружаем с её помощью компьютер.

среда, 5 июля 2017 г.



Утилита ip Linux

Утилита ip поставляется во всех дистрибутивах по умолчанию, и хотя ее предшественники тоже пока что доступны, будущее за ip, а поэтому давайте разберемся как ею пользоваться и что с помощью нее можно настроить.
Как вы поняли, в этой инструкции мы рассмотрим как использовать утилиту ip для настройки сети в Linux. Эта утилита позволит делать вам даже больше чем все те, функциональность которых она поглотила. Например, здесь вы сможете не только смотреть свойства подключения, установить ip адрес и смотреть arp таблицу, но и настроить политики маршрутизации, управлять arp таблицами, а также настраивать специфичные параметры стека TCP/IP, например, ширину окна. Конечно, учитывая такое количество функций, она сложна в освоении, но оно того стоит.

Синтаксис

Сначала рассмотрим синтаксис команды:
ip [опцииобъект команда [параметры]
опции - это глобальные настройки, которые сказываются на работе всей утилиты независимо от других аргументов, их указывать необязательно.
объект - объект или устройство, с которым будем работать или о котором будем узнавать информацию.
команды - какое-либо действие с объектом.
параметры - само собой, командам иногда нужно передавать параметры, они передаются в этом пункте.
Дальше рассмотрим все еще более подробно.

Опции

Поддерживаются такие опции для настройки сети в lInux:
-v - только вывод информации об утилите и ее версии
-s - включает вывод статистической информации
-f - позволяет указать протокол, с которым нужно работать, если протокол не указан, то берется на основе параметров команды. Опция f должна принимать одно из значений: bridge, dnet, inet, inet6, ipx или link. По умолчанию используется inet, link - означает отсутствие протокола.
-o - выводить каждую запись с новой строки
-r - выполнять резолвинг и выводить символические имена хостов
Все остальные опции - ярлыки опции -f:
-4 - ярлык для -f inet
-6 - -f inet6
-B - -f bridge
-0 - -f link

Объекты

Теперь давайте рассмотрим самые важные объекты.
  • address - сетевой адрес на устройстве
  • link- физическое сетевое устройство
  • monitor - мониторинг состояния устройств
  • neigh - ARP
  • route - управление маршрутизацией
  • rule - правила маршрутизации
  • tunnel - настройка туннелирования
Конечно, это не все объекты которые поддерживает команда ip linux, но на первое время вам хватит. Во время ввода имя объекта может быть сокращено до одной буквы. При неоднозначности используется алфавитный порядок. Например, ip a show, расшифровывается как ip address show. Тогда как в ip r show, r - означает route.

Команды

Теперь рассмотрим доступные команды, с помощью которых может быть выполнена настройка сети linux. Вот они: add, change, del или deleteflushgetlistили showmonitorreplacerestoresaveset, и update.
Если команда не задана, по умолчанию используется show (показать).
Здесь тоже поддерживается сокращение и в большинстве случаев для выполнения нужного действия достаточно нескольких символов. Но алфавитный порядок соблюдается не всегда. Например, ip a s, означает ip address show, а не ip address set, к сожалению.

Параметры

Параметры зависят от объекта и указанной команды. Рассмотрим самые основные:
  • dev имя_устройства - сетевое устройство
  • up - включить
  • down - выключить
  • llarrr - MAC - адрес
  • initcwnd - размер окна перегрузки TCP при инициализации
  • window - размер окна TCP
  • cwnd - размер окна перегрузки TCP
  • type - тип
  • via - подключиться к роутеру
  • default - маршрут по умолчанию
  • blackhole - маршрут "черная дыра" - отбрасывать пакеты и не посылать ICMP сообщения о недоступности
  • prohibit - маршрут "запрета" - отбрасывать пакеты и возвращать ICMP сообщения о запрете доступа
  • unreachable - маршрут "недостижимый" - отбрасывать пакеты и посылать ICMP пакеты о недостижимости узла.

Примеры использования

Вот теперь мы дошли к самому интересному - примерам использования утилиты ip Linux. То что я здесь опишу на самом деле лишь маленькая капля из всего того что может утилита ip. Для удобства все команды отсортированы по объектам, к которым они применяются.

ip link

Утилита ip в Linux с параметром linux позволяет управлять состоянием сетевых интерфейсов и просматривать информацию о них.
  • ip link show - отобразить состояние всех сетевых интерфейсов
  • ip l sh - то же самое
  • ip ll - то же самое
  • ip l - то же самое
  • ip link show eth0 - отобразить состояние eth0
  • ip link list up - отобразить статус всех включенных интерфейсов
  • ip link set eth1 up - включить eth1
  • ip link set eth1 down выключить eth1

ip neigbour

Объект neigbour используется для управления ARP таблицами.
  • ip neigh show - показать все записи ARP
  • ip n sh - то же самое
  • ip n l - то же самое
  • ip n - то же самое
  • ip neigh show dev eth0 - посмотреть все ARP записи для eth0
  • ip neigh flush - удалить все ARP записи
  • ip ne fl dev eth0 - удалить все ARP записи для eth0
  • ip nei add 1.1.1.13 lladdr AA:BB:CC:DD:EE:FF dev eth0 - добавить ARP запись для определенного IP адреса.
  • ip n del 1.1.1.13 dev eth0 - удалить все записи для указанного адреса

ip address

Важно заметить, что вторичные ip адреса не используются в качестве исходящих адресов для отправки пакетов.
  • ip address show - показать все ip адреса и их интерфейсы
  • ip a sh - то же самое
  • ip a list - то же самое
  • ip a - то же самое
  • ip a l permanent - отобразить только статические ip адреса
  • ip a l dynamic - отобразить только динамические ip адреса
  • ip addr add 1.1.1.13/24 dev eth0 - установить ip адрес для интерфейса eth0
  • ip addr del 1.1.1.13/24 dev eth0 - удалить ip адрес интерфейса eth0
  • ip add flush dev eth0 - удалить все ip адреса интерфейса eth0

ip route

Утилита ip в Linux позволяет не только устанавливать ip адреса, но и настраивать маршруты. По умолчанию в Linux используется таблица маршрутизации 254, вы также можете иметь дело с таблицей 255, которую не следует изменять, а также 253, в которой хранятся маршруты по умолчанию.
  • ip r sh показать все маршруты в таблице маршрутизации
  • ip route show table nnn - отобразить все маршруты из таблицы 255
  • ip route get 10.10.20.0/24 - отобразить маршрут к этой сети
  • ip route get 10.10.20.0/24 from 192.168.12.9 - отобразить маршрут к этой сети от указного интерфейса.
  • ip route add 10.10.20.0/24 via 192.168.50.100 - создать маршрут
  • ip route delete 10.10.20.0/24 - удалить маршрут.
  • ip route del 10.10.20.0/24 via 192.168.50.100 - удалить маршрут.
  • ip route add default via 192.168.50.100 - создать маршрут по умолчанию.
  • ip route add 10.10.20.0/24 dev eth0 - создать маршрут к указной сети.
  • ip route add table nnn 10.10.20.0/24 dev eth0 - создать маршрут в специальной таблице роутинга.
  • ip route add blackhole 10.10.20.0/24 dev eth0 - создать blackhole маршрут.
  • ip route add unreachable 10.10.20.0/24 dev eth0 - создать unreachable маршрут.
Вот и все, возможно, в будущем этот список будет пополняться. Надеюсь, утилита ip Linux уже не кажется такой непонятной. Если у вас есть вопросы или хотите предложить еще несколько команд, пишите комментарии!

вторник, 4 июля 2017 г.

Как включить tun/tap внутри LXC контейнере

Чтобы включить интерфейс tun/tap в LXC контейнере, например для OpenVPN, нужно отредактировать файл конфигурации LXC.
Месторасположение файла по умолчанию:
/etc/lxc/default.conf
Вам нужно добавить
lxc.cgroup.devices.allow = c 10:200 rwm
Также работает в proxmox 4.0.
Чтобы использовать tun/tap интерфейс оно должно быть создано внутри контейнера при каждой загрузке, поэтому добавьте следующее в ваш файл /etc/rc.local внутри вашего контейнера:
if ! [ -d /dev/net ];then
 mkdir /dev/net
fi
if ! [ -c /dev/net/tun ]; then
 mknod /dev/net/tun c 10 200
 chmod 666 /dev/net/tun
fi

persistent devices

lxc guest have their dev recreated on each restart in a tmpfs. This means all devices are reset and are not read from rootfs dev directory. To make it persistent you can use an autodev script by adding the following to your lxc guest config
# tun (openvpn)
lxc.cgroup.devices.allow = c 10:200 rwm
# audodev script to add devices
lxc.hook.autodev=/var/lib/lxc/CONTAINER/autodev
The autodev script would be as following:
#!/bin/sh
# dev is populated on earch container start.
# to make devices persistence we need to recreate them on each start.

cd ${LXC_ROOTFS_MOUNT}/dev
mkdir net
mknod net/tun c 10 200
chmod 0666 net/tun
И еще с итальянского сайта

Configurar el contenedor

Llegados a este punto el contedor tiene permisos para acceder al dispositivo especial de caracteres /dev/net/tun, sin embargo este dispositivo no existe en el contenedor LXC por ello es necesario crear un servicio systemd para automatizar la creación del archivo /dev/net/tun
сat >> /etc/systemd/system/create-net-tun.service << EOF
[Unit]
Description=Create /dev/net/tun device
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=/usr/bin/mkdir /dev/net
ExecStart=/usr/bin/mknod /dev/net/tun c 10 200
ExecStart=/usr/bin/chmod 666 /dev/net/tun
[Install]
WantedBy=openvpn@.service
EOF
systemctl enable create-net-tun
На этом всё.

понедельник, 3 июля 2017 г.

Разное → Настройка NAT и DHCP в Debian

Приспичило мне настроить NAT(маскарадинг), называйте как хотите. Для чего? Есть две сетевые. Одна eth1 — интернет, вторая eth0 — внутренняя подсеть 192.168.0.0/28
Собственно, пакеты из внешней подсети должны перенаправляться во внутреннюю и наоборот.

Для начала, нужно включить ip forwarding. Проверим, не включен ли он:

$ cat /proc/sys/net/ipv4/ip_forward

Если выдаст 0 — выключен, 1 — соответственно включен.
Чтобы включить:
$ echo 1 > /proc/sys/net/ipv4/ip_forward

А чтобы включит навсегда в файл /etc/sysctl.conf добавляем следующие строчки:

net.ipv4.conf.default.forwarding=1 net.ipv4.conf.all.forwarding=1

Создаем файл в /etc/network/if-pre-up.d/NAT и делаю исполняемым
chmod +x /etc/network/if-pre-up.d/NAT
Теперь, при подъёме интерфейсов в up запускается наш «NAT».

Собственно, всё делается через iptables. Содержание файла NAT:
# Первым делом очистим существующую таблицу правил: 
iptables -F 
# Добавляем первое правило которое позволит нам не потерять удаленный контроль над сервером 
iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT 
# Прописываем политики по умолчанию: 
# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED. 
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении. 
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
#Запрешаем на передачу всё, что не разрешено. 
iptables -P INPUT DROP iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT # Разрешаем хождение трафика по localhost 
iptables -A INPUT -i lo -j ACCEPT #Разрешаем пинг(DROP - запретить) iptables -A INPUT -i eth1 -p icmp --icmp-type 8 -j ACCEPT 
#NAT Должен быть включен ip forwarding 
iptables -A FORWARD -i eth1 -o eth0 -s 192.168.0.0/28 -j ACCEPT iptables -A POSTROUTING -t nat -j MASQUERADE 
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j ACCEPT

Теперь, настроем наш eth0, сделав его шлюзом
Заходим в  /etc/network/interfaces

address 192.168.0.1 netmask 255.255.255.240 broadcast 192.168.0.15

Всё, готово. Но, чтобы не вбивать каждый раз адрес и dns вручную, особенно, если компов несколько, поднимем ещё и dhcp сервер.

Для начала установим его:

# apt-get install dhcp3-server

Он естественно не запустится, правим файлик конфигурации /etc/dhcp/dhcpd.conf
Конфиг приблизительно такой:
#Опция динамического обновления для dns ddns-update-style none; #Домен и dns'ы option domain-name "admin-pc"; option domain-name-servers ; #Время жизни адресов default-lease-time 600; max-lease-time 7200; # # Для логирования в отдельный файл log-facility local7; #Подсеть из которой выдаются ip #диапазон #шлюз #brodcast #интерфейс на котором работает subnet 192.168.0.0 netmask 255.255.255.240 { range 192.168.0.2 192.168.0.14; option routers 192.168.0.1; option broadcast-address 192.168.0.15; interface eth0; }

Запускаем демона:

# /etc/init.d/isc-dhcp-server start

Проверяем, работает, радуемся!
Но, по умолчанию, логируется всё в /var/log/syslog, что не очень удобно если вам нужно работать с логами.
Предлагаю, можно всё в отдельный файл.

Создадим файл /etc/rsyslog.d/dhcpd.conf с содержимым:
local7.* /var/log/dhcpd.log

Для ротации логов в файл /etc/logrotate.d/rsyslog вставить строку:

/var/log/dhcpd.log

Перезапускаемся:

# /etc/init.d/isc-dhcp-server restart # /etc/init.d/rsyslog restart

Теперь, смотрим лог в /var/log/dhcpd.log