Настройка PPPoE-релея в Debian

Хочется наконец закрыть тему с настройкой RP-PPPoE и описать описать настройку PPPoE-релея. Одной из нерассмотренных плюшек останется настройка PPPoE-сервера в связке с RADIUS-сервером, но это уже не относится напрямую к пакету RP-PPPoE, а скорее относится именно к RADIUS-серверу.

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

И так, одной из проблем, которая мне мешала попытаться настроить PPPoE-релей было отсутствие третьего компьютера. Эту проблему я тогда наметил обойти с помощью эмуляции необходимого количества компьютеров с помощью какой-нибудь виртуальной машины. В одной из прошлых заметок я остановился на эмуляторе QEmu.

Для начала настроим PPPoE-сервер в соответствии с прошлыми статьями: Настройка PPPoE-сервера в Debian и deb-пакет и сценарии для запуска PPPoE сервера.

С настройкой PPPoE-клиента на этот раз я решил соригинальничать. У меня есть готовый образ диска QEmu, с установленной на него NetBSD 5.0. В NetBSD имеется PPPoE-клиент, работающий на уровне ядра. Его и настроим. В файл /etc/ifconfig.pppoe0 пропишем следующее:

create
!/sbin/ifconfig ne2 up
!/sbin/pppoectl -e ne2 $int
!/sbin/pppoectl $int myauthproto=chap 'myauthname=test' 'myauthsecret=testpasswd' hisauthproto=none max-auth-failure=1
0.0.0.0 0.0.0.1 up

Более подробно настройка QEmu и сети в QEmu описаны в двух моих статьях: Эмуляторы VirtualBox и QEmu в Debian и QEmu и настройка сети. О начальной настройке NetBSD можно почитать вот тут: Раскручиваем свежеустановленную NetBSD

Теперь нужно заняться настройкой PPPoE-релея. Во-первых, создадим на компьютере, выполняющем роль релея, tap-интерфейс, который будет использоваться для связи с виртуальной машиной-клиентом в QEmu. Для этого в файл /etc/network/interfaces добавляем следующие строчки:

auto tap1
iface tap1 inet manual
  up ifconfig tap1 up
  down ifconfig tap1 down
  tunctl_user stupin

Где stupin - это тот пользователь, под которым вы работаете и от имени которого запускаете QEmu.

Теперь, устанавливаем пакет pppoe_3.8-3_i386.deb, сборка которого рассмотрена мной в статье deb-пакет и сценарии для запуска PPPoE сервера:

# wget pppoe_3.8-3_i386.deb
# dpkg -i pppoe_3.8-3_i386.deb

И зафиксируем установленный пакет, чтобы он не был замещён версией из репозитория при следующем обновлении:

# aptitude hold pppoe

Создадим сценарий для запуска PPPoE-релея, создав файл /etc/init.d/pppoe-relay:

#!/bin/sh

### BEGIN INIT INFO
# Provides:          pppoe-relay
# Required-Start:    $network $syslog
# Required-Stop:     $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Roaring Peguin PPPoE relay
# Description:       Roaring Peguin PPPoE relay
### END INIT INFO

CONFIG=/etc/default/pppoe-relay

if test -f $CONFIG
then
  . $CONFIG
else
  echo "PPPoE relay: No config-file!"
fi

if test x$RUN = xno
then
  echo "PPPoE relay: disabled."
  exit
fi

if test x"$OPTIONS" = x
then
  echo "PPPoE relay: no options defined!"
  exit
fi

if test x$PIDFILE = x
then
  PIDFILE=/var/run/pppoe-relay.pid
fi

case $1 in
  start)
    echo -n "Starting PPPoE relay: "
    /usr/sbin/pppoe-relay -F $OPTIONS &
    echo $! > $PIDFILE
    echo "pppoe-relay."
    ;;
  stop)
    echo -n "Stopping PPPoE relay: "
    kill `cat $PIDFILE`
    rm $PIDFILE
    echo "pppoe-relay."
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
    echo "Usage: $0 start|stop|restart"
    ;;
esac

Сделаем его исполняемым:

# chmod +x /etc/init.d/pppoe-relay

И добавим на уровни запуска по умолчанию:

# update-rc.d pppoe-relay defaults

Теперь создадим файл настроек PPPoE-релея /etc/default/pppoe-relay:

# Run pppoe-relay at startup
RUN="yes"

# Options, that provided to pppoe-relay
OPTIONS="-S br0 -C tap1"

# File with PID of pppoe-relay
PIDFILE="/var/run/pppoe-relay.pid"

Как видно из файла настроек, сеть с PPPoE-сервером подключена к интерфейсу br0, а сеть с PPPoE-клиентом - к интерфейсу tap1.

Запускаем pppoe-relay:

# invoke-rc.d pppoe-relay start

Или по-старинке:

# /etc/init.d/pppoe-relay start

Теперь пришло время запустить настроенную QEmu. Запускать её нужно с помощью следующей командной строки (она у меня прописана в сценарии netbsd.sh):

$ qemu -M pc -m 128 -no-kqemu -no-acpi -hda /home/stupin/netbsd-disk.bin -net nic,vlan=0 -net tap,vlan=0,ifname=tap1 -boot c

Смотрим на клиенте (в NetBSD под QEmu) список интерфейсов:

$ ifconfig -a

Если в списке появился интерфейс pppoe0 с адресами 192.168.0.2 и 192.168.0.1, значит PPPoE-подключение установлено. Если не появился - пробуем перезапустить сетевую подсистему:

# /etc/rc.d/network restart

На сервере проверить установку связи можно по появившемуся интерфейсу с именем ppp0 (или ppp1 или ppp2) с адресами 192.168.0.1 и 192.168.0.2.

Для более-менее окончательного завершения разбора RP-PPPoE в Debain осталось:

  1. переписать сценарии запуска на использование start-stop-daemon,
  2. добавить в deb-пакет сценарии pppoe-server и pppoe-relay,
  3. добавить в deb-пакет post-install-сценарии вызывающие update-rc.d для добавления в систему сценариев pppoe-server и pppoe-relay,
  4. добавить в deb-пакет файлы настроек pppoe-server, pppoe-relay, pppoe-server-options,
  5. отправить мэнтейнеру пакета pppoe все эти скрипты и файлы настроек,
  6. написать на основе этой и предыдущих статей подробное руководство по настройке PPPoE-клиента, сервера и релея.

Написать автору