Показаны сообщения с ярлыком Debian. Показать все сообщения
Показаны сообщения с ярлыком Debian. Показать все сообщения

воскресенье, 16 сентября 2012 г.

Разборки с Гибернацией

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

На моей системе для спящего режима используется команда s2disk из пакета uswsusp. Судя по всему что-то не так в конфигурационном файле программы.

Настройки uswsusp хранятся в файле /etc/uswsusp.conf. Открываем его на редактирование в любимом редакторе с правами root'а:

# nano /etc/uswsusp.conf

Интересующая нас опция - shutdown method - задает действие, выполняемое после записи образа памяти на диск. По умолчанию значение опции - "platform". Нам нужно указать значение "shutdown":

shutdown method = shutdown

Теперь все в порядке компьютер нормально выключается.

Из полезных параметров конфигурационного файла стоит отметить еще resume device. Его значение  - это имя swap раздела, на который сохраняется образ оперативной памяти. В моей системе - это /dev/sda5:

resume device = /dev/sda5

Статья, натолкнувшая меня на написание сегодняшней заметки находится здесь. Ну и, конечно, главный источник справочной информации в Linux - команда man:

# man uswsusp.conf 

P. S. Через пару дней снова начались проблемы. Комп уходил в сон, но потом загружался с нуля. А еще через пару дней я снес дома Debian и поставил Calculate. Теперь наслаждаюсь перезагрузкой после сна вместе с отсутствием восстановления из спящего режима. Вобщем, в ближайшем будущем предстоят разборки теперь уже с pm-utils.

пятница, 14 сентября 2012 г.

Отключение IPv6 в ядре Debian Linux

Занимаясь настройкой шлюза на Debian машине ко мне пришло понимание, что у меня присутствует лишняя функциональность в виде поддержки протокола IPv6. Заметок в интернете по этому поводу существует довольно много, но все-таки и я решил внести свою лепту.

Итак цель - отключить поддержку IPv6 в ядре Linux. Способ подходит для владельцев ядер 2.6.31 и выше. В этих ядрах предусмотрена возможность отключить IPv6 опцией при загрузке. Однако сначала необходимо убедиться что IPv6 включен. Пишем в консоли под root'ом:


# ifconfig | grep inet6

Если указанная команда ничего не вывела на экран, значит IPv6 у вас не используется, иначе читаем далее.

Если у вас установлен загрузчик GRUB Legacy(не прогрессивный но понятный), то в конфигурационном файле /boot/grub/menu.lst в опциях загрузки ядра дописываем ipv6.disable=1.

Если же вы счастливый обладатель прогрессивного загрузчика GRUB2, тогда идем в /etc/default/grub и ищем строку с опциями загрузки ядра по умолчанию (что-то вроде "quiet splash"). Дописываем к имеющимся опцию ipv6.disable=1.
Затем запускаем от root'а:

# update-grub

Затем перезагружаем компьютер и проверяем настройки с помощью утилиты ifconfig. В выводе не должно быть IPv6 адресов. 
Еще один способ проверки:

# netstat -npl | grep -E "tcp6|udp6" | wc -l

Если в выводе команды "0", значит все в порядке и IPv6 отключен.

Настройка iptables для шлюза

В предыдущей заметке мы настроили сетевые интерфейсы на компьютере шлюзе. Сегодня сделаем возможным прохождение пакетов через шлюз к клиенту. Делается это с помощью встроенного в ядро Linux файервола iptables.

Умолчальные настройки нас не устраивают. На мой взгляд лучшее решение - собрать все настройки iptables в одном файле. И перво наперво этот файл нужно создать. Все дальнейшие действия выполняются под личиной Суперпользователя.

Создаем файл /etc/init.d/rc.firewall:

# touch /etc/init.d/rc.firewall

Наш файл является сценарием оболочки, поэтому делаем его исполняемым следующей командой:

# chmod 755 /etc/init.d/rc.firewall

Чтобы все работало после перезагрузки, помещаем наш скрипт автозагрузку при помощи команды:

# update-rc.d rc.firewall start 40 S . stop 89 0 6 .

Вместо непонятных буковок "start 40 S . stop 89 0 6 ." можно написать default, но так больше контроля.

Если в дальнейшем нам понадобится удалить скрипт из автозагрузки пишем следующее:


# update-rc.d -f rc.firewall remove

Теперь можно приступить к написанию самого скрипта:

# nano /etc/init.d/rc.firewall

Для начала сообщим ядру, что оно имеет дело со сценарием. Делается это добавлением в начало файла строки

#!/bin/sh

Для начала зададим несколько переменных, исключительно для удобства редактирования и просмотра:

IPT="/sbin/iptables"    # переменная, задающая путь к файлу запуска iptables

INET_IFACE="eth0"    # ваш внешний сетевой интерфейс

Мы делаем крутую программу, поэтому реализуем возможность задавать параметры. Запихнем правила для iptables в функцию start_fw():


start_fw()
{             # начало функции

Первым делом включим перенаправление пакетов через ядро:

echo 1 > /proc/sys/net/ipv4/ip_forward

Сбросим правила и удалим цепочки:

$IPT -F
$IPT -X

Зададим политики по умолчанию:

$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT

Разрешить все движения пакетов не самое удачное решение, но поскольку мой компьютер является как шлюзом так и рабочей машиной, то пускай будет так. Настройку защиты от всякого рода опасностей себя любимого мы пока не рассматриваем. Для нас важно разрешающее правило для проходящих пакетов(FORWARD), хотя и это можно настроить. Но для простейшего случая сойдет.

Ну и наконец самое главное правило:

$IPT -A POSTROUTING -t nat -s 192.168.1.0/24 -o $INET_IFACE -j MASQUERADE
}         # конец функции start_fw()

Здесь создается новое правило постмаршрутизации таблицы NAT со всей локальной сети черев внешний интерфейс. Все компьютеры локальной сети теперь имеют доступ в интернет без ограничений. Хотя имеет смысл заметить, что DC клиенты, допустим, могут соединятся только в пассивном режиме. Для работы в активном режиме необходимо настроить прозрачный NAT. Но тема пребует более глубокого осмысления.
MASQUERADE позволяет корректно работать с динамическим внешним ip адресом.

Переходим к реализации параметров. Прийдется немного попрограммировать. Пишем:


case "$1" in

Для того, чтобы наш файервол можно было запустить командой /etc/init.d/rc.firewall start пишем следующую ветвь условия case:


start)   echo -n "Starting firewall"
            start_fw
            echo "."
            ;;

Чтобы можно было остановить файервол(когда возникнет такое желание) командой /etc/init.d/rc.firewall stop пишем:


stop)    echo -n "Stopping firewall"
            iptables -F
            iptables -X
            echo "."
            ;;

Ну и, на всякий случай, защита от неправильных параметров:


*)         echo "Usage: /etc/init.d/rc.firewall start | stop"
            exit 1
            ;;
esac    # закрываем условный оператор
exit 0   # успешное завершение

Вот и все. Простейший шлюз настроен. Полностью файл /etc/init.d/rc.firewall будет выглядеть так:


#!/bin/sh

IPT="/sbin/iptables"    # переменная, задающая путь к файлу запуска iptables
INET_IFACE="eth0"    # ваш внешний сетевой интерфейс

start_fw()
{             # начало функции

echo 1 > /proc/sys/net/ipv4/ip_forward

$IPT -F
$IPT -X

$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT

$IPT -A POSTROUTING -t nat -s 192.168.1.0/24 -o $INET_IFACE -j MASQUERADE
}         # конец функции start_fw()
  
case "$1" in

stop)    echo -n "Stopping firewall"
            iptables -F
            iptables -X
            echo "."
            ;;

stop)    echo -n "Stopping firewall"
            iptables -F
            iptables -X
            echo "."
            ;;

*)         echo "Usage: /etc/init.d/rc.firewall start | stop"
            exit 1
            ;;

esac    # закрываем условный оператор
exit 0   # успешное завершение

Следует также заметить, что если у вас в локальной сети не реализован DNS сервер, то в настройках клиента нужно указать DNS сервера провайдера, или, например, DNS сервер Google(8.8.8.8)

четверг, 13 сентября 2012 г.

Настройка Debian шлюза

Недавно мой сосед приобрел себе компьютер. А поскольку входной канал интернета только один(а второй заводить не резон), пришлось настраивать шлюз на домашнем компе(Debian). Решение временное, будет работать до покупки роутера.

Начинать следует с установки второй сетевой карты. Этот этап не должен вызвать затруднений: берем сетевую карту и совмещаем контактную планку с PCI разъемом материнской платы. Естественно это следует делать при отключенном электропитании ПК(глупые разработчики PCI порта не позаботились о горячем подключении :-) ).

Загружаемся и настраиваем сетевуху. Сетевая карта подключенная к Инету называется у меня eth0(адрес и настройки выдаются автоматически с привязкой к MAC адресу сетевой карты), а карта смотрящая в локальную сеть - eth1. Сетевые интерфейсы настраиваются в файле /etc/network/interfaces.

Вводим под рутом(суперпользователем, root): 

# nano /etc/network/interfaces

И приводим файл к виду:

auto lo  
iface lo inet loopback  

auto eth0 

auto eth1 
iface eth1 inet static 
address 192.168.1.1  
netmask 255.255.255.0 

Пояснения к содержимому:
  • lo, eth0, eth1 - сетевые интерфейсы: lo - интерфейс обратной связи(нам сейчас не нужен), eth0 - подключение к интернет, eth1 - в локальную сеть;
  • auto - означает, что интерфейс будет инициализирован при загрузке компьютера;
  • static - фиксированный ip-адрес(не динамический);
  • address - адрес, присваиваемый интерфейсу;
  • netmask - маска сети(для локальной сети самое оно).

После внесенных в файл изменений нужно либо перезагрузить компьютер, либо перезапустить сеть командой:

# /etc/init.d/networking restart

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

По ходу дела возникло сильное желание отключить работу IPv6(ну не нахожу я ему применения), но об этом тоже в следующий раз.