Необходимо скопировать ovz-server-default в ovz-server-pppd
Следующим шагом вносим дополнительные пакеты в /ovz-server-pppd/profile/ovz/packages.
Добавляем следующие пакеты: mgetty, ppp, minicom
Необходимо заменить так же имя шаблона в /ovz-server-pppd/profile/ovz/config
Непосредственное создание ovz-шаблона
В результате этой операции в /ovz-server-pppd должен появиться следующий файл altlinux-4.0-pppd.tar.gz
Все дальнейшие операции необходимо выполнять с привилегиями пользователя root.
Скопируем /ovz-server-pppd/altlinux-4.0-pppd.tar.gz в /var/lib/vz/template/cache — стандартное место хранения шаблонов ovz-систем.
Создаем на основе шаблона altlinux-4.0-pppd.tar.gz и конфигурационного файла server-4.0 контейнер pppd, с уникальным идентификатором 107.
Следующий шаг, задание имени и hostname контейнера, создание сетевого интерфейса veth107.0.
Сетевой интерфейс создается при помощи ключа --netif_add:
имя_интерфейса_внутри_контейнера,его_мак_адрес,имя_интерфейса_в_root_системе,его_мак_адрес
Мак_адрес — должен не совпадать с мак-адресами существующих компьютеров.
Для нормальной работы mgetty и pppd, необходим прямой доступ к устройства root-системы /dev/ttyS0 (порт к которому подключен наш модем) и /dev/ppp (непосредственно ppp-устройство).
В root-системе в /etc/modules добавляем
А в /etc/modules.conf
После чего выяснить MAJOR, MINOR и тип устройства для /dev/ttyS0 и /dev/ppp
Следовательно для /dev/ppp MAJOR == 108, MINOR == 0, тип == c; для /dev/ttyS0 MAJOR == 4, MINOR ==64, тип == c
Разрешаем для этих устройств прямой доступ из контейнера 107
Запуск контейнера 107
Входим в контейнер
Создаем устройства внутри контейнера
Подключаем модем к нашему порту com1
Делаем symlink /dev/ttyS0 на /dev/modem
Запускаем minicom и даем команду AT в ответ получаем OK
По умолчанию, при остановке контейнера командой vzctl stop 107, veth107.0 удаляется из vzbr0. Это можно проверить, если выполнить команду brctl show vzbr0. Так что после запуска контейнера vzctl start 107, необходимо выполнить команду brctl addif vzbr0 veth107.0.
Настройка состоит из трех этапов: настройка mgetty, настройка pppd, настройка маршрутизации.
Добавляем в /etc/inittab следующую строчку
-x5 — означает, что уровень отладки у нас равен 5.
/dev/ttyS0 — это у нас первый сom порт.
В /etc/mgetty+sendfax/login.config
Мы не принимаем chap-авторизацию, требуем pap-авторизацию, не требуем авторизацию для самой машины (noauth).
В /etc/mgetty+sendfax/mgetty.config
data-only y — только данные, без поддержки факс-возможностей
debug 4 — логирование 4 уровня, лог падает в /var/log/mgetty/ttyS0.log
rings 2 — после какого количества звонков mgetty поднимет трубку
init-chat ... — строчку инициализации модема. По умолчанию mgetty использует ATS0=0Q0&D3&C1, параметра S0=0 верен, трубку брать будет mgetty.
В /etc/ppp/options.ttyS0
192.168.16.1 — адрес, который будет выдан нашему серверу после поднятия pppd-интерфейса
192.168.16.2 — адрес, который будет выдан клиенту
ms-dns 192.168.15.11 — это адрес нашего dns-сервера, будет автоматически назначен клиенту при подключении по pppd
После чего в /etc/ppp/pap-secrets
Разделяется на две части: внутри контейнера pppd и в root-системе.
Внутри контейнера необходимо разрешить перенос пакетов между интерфейсами.
Для этого вписываем в /etc/sysctl.conf следующие значения
Мы не устанавливали до этого в контейнерах маршрут по умолчанию, за исключением контейнера с dns.
Для нормальной работы необходимо указать шлюзом адрес нашей root-системы.
В /etc/net/ifaces/eth0/ipv4route вписываем следующую строку
Перезапускаем настройки сети внутри контейнера
В root-системе необходимо добавить одно правило NAT и один маршрут на нашу сеть 192.168.16.0/30
Добавляем правило NAT
Сохраняем эти правила
Добавляем маршрут на нашу сеть 192.168.16.0/30 в /etc/net/ifaces/vzbr0/ipv4route
После этого подключенный пользователь по dialup-соединению должен спокойно выходить в сеть интернет