суббота, 12 марта 2011 г.

Fedora, pptp и selinux

Рассказ о том, как я настраивал pptp-соединение в Fedora.

Один провайдер раздаёт интернет через VPN-соединения по протоколу pptp. Долго и стабильно работающая Gentoo была заменена на Fedora 14. Pptp-соединения у этого провайдера настраиваю не первый год, поэтому сразу набросал скрипт подключения.

Но использовать /etc/rc.local для поднятия сети - не очень хорошо, да и происходит в последний момент. В Gentoo соединение устанавливалось штатным способом. NetworkManager не был установлен, поэтому всё настраивалось через службу network:
/etc/sysconfig/network-scripts/ifcfg-ppp0
DEVICE=ppp0
NM_CONTROLLED=no
ONBOOT=yes
USERCTL=no
IPV6INIT=no
PEERDNS=yes
/etc/sysconfig/network-scripts/route-eth0
ADDRESS0=78.29.0.0
NETMASK0=255.255.0.0
GATEWAY0=ip_адрес_шлюза_локальной_сети
ADDRESS1=10.48.0.0
NETMASK1=255.240.0.0
GATEWAY1=ip_адрес_шлюза_локальной_сети
Пробуем:
# service network restart
Всё работает. Перезагружаю машину:
Активируется интерфейс loopback:                           [  OK  ]
Активируется интерфейс eth0:  
Определяется информация IP для eth0... готово.
Активируется интерфейс eth1:                               [  OK  ]
Активируется интерфейс ppp0:                               [ СБОЙ ]
Исследование логов ничего не дало. Добавляю в конфиг pptp опции debug и logfile /var/log/pptp.log. Перезагружаюсь. Данный лог даже не появился.
# service network restart
И всё работает. Т.е. во время перезагрузки не работает, а после загрузки - работает. Странно. Может быть при загрузке интерфейс eth0 не успевает получить ip-адрес от dhcp-сервера?.. Вставляю в нужное место скрипта /etc/init.d/network строчку
ip a >> /root/report && ip r >> /root/report
Перезагрузка показала, что адрес и маршруты на момент поднятия ppp в порядке.

Следую далее по скрипту. Вижу, что запускается из него другой скрипт - /etc/sysconfig/network-scripts/ifup, а из него - ifup-ppp. Перехожу туда. Ставлю в начале скрипта строчку
echo "1" >> /root/report
а в конце -
echo "2" >> /root/report
Перезагрузка. В /root/report единица есть, двойки - нет.

Поставил подобные "брейкпоинты" у всех строчек с exit в скрипте. Перезагрузка. Не отловился exit, где-то в другом месте скрипт прерывается. Ставлю граничные "брейкпоинты" и начинаю сужать круг подозреваемых.

Виновной оказалась строчка
exec /sbin/ppp-watch "${CONFIG##ifcfg-}" "$2"
Т.е. при перезагрузке скрипт на этой строчке падает, а при перезапуске службы network - нормально срабатывает. Значит нет у скрипта доступа к ppp-watch, видимо в момент загрузки, позже - появляется. А может ppp-watch запускается, но сама по себе падает. Кто у нас доступом ведает? SElinux! Временно поставил в файле /etc/selinux/config опцию SELINUX в disabled. Перезагрузка. Всё работает. Значит он виноват.

Проверил порядок запуска служб - так и есть, auditd запускается сразу после network.
Сменил порядковый номер службы auditd с 11 на 09 в rc3.d и rc5.d, вернул SELINUX в enforcing и всё заработало. Когда-нибудь руки дойдут и до selinux, а пока и такой вариант устраивает.

Комментариев нет:

Отправить комментарий