URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 92760
[ Назад ]

Исходное сообщение
"PPPoE сервер и DHCP"

Отправлено mr_tee , 14-Дек-11 15:48 

Доброго и светлого))

Итак настроил PPPoE сервер на linux-e с авторизацией на RADIUS-е по этой статье http://www.opennet.ru/base/modem/pppoe_server_setup.txt.html

В настройках по умолчанию клиентам выдаются адреса из подсети 10.0.0.0, можно задать свою подсеть.

Вопрос, можно ли настроить pppoe-server так, чтобы адрес для клиента брался с DHCP сервера, установленного локально, или на другом компе в сети?


Содержание

Сообщения в этом обсуждении
"PPPoE сервер и DHCP"
Отправлено Hawk , 14-Дек-11 19:06 
а зачем? демону pppd можно указать брать ip из пула.



"PPPoE сервер и DHCP"
Отправлено mr_tee , 15-Дек-11 07:55 
> а зачем? демону pppd можно указать брать ip из пула.

DHCP сервер регистрирует записи PTR вида ip <--> <username>.pppoe на MS DNS
Для резервирования таких серверов два.


"PPPoE сервер и DHCP"
Отправлено mr_tee , 02-Окт-12 08:14 
>> а зачем? демону pppd можно указать брать ip из пула.
> DHCP сервер регистрирует записи PTR вида ip <--> <username>.pppoe на MS DNS
> Для резервирования таких серверов два.

Сделано так:
ip берутся из пула, в папку /etc/ppp/ip-up.d/
установил скрипт, который перехватывает ip адрес и регистрирует его на DNS серверах, за одно добавляя нужные правила в iptables для нужного уровня доступа:


#!/bin/bash

LOGFILE=/var/log/squid/my_pppoe.log
IPT=/sbin/iptables
#DNS_SERVERS="dns1 dns2"
DNS_SERVERS="localhost"

exec 6>&1           # Связать дескр. #6 со stdout. Сохраняя stdout.
exec >> $LOGFILE    # stdout замещается файлом "logfile.txt".

filter=$(grep Filter-Id /var/run/radattr.$IFNAME | cut -d " " -f 2)

ip_reverse=$(echo $IPREMOTE | awk -F '.' '{print $4"."$3"."$2"."$1}').in-addr.arpa
dns_zone=${ip_reverse#*.}
dns_ptr=${PEERNAME##*\\}.$(echo $IPREMOTE | awk -F '.' '{print $3"-"$4}').pppoe

dns_delete="update delete $ip_reverse"
dns_update=""
if [[ ${0##*-} == "up" ]]; then
  dns_update="update add $ip_reverse 86400 ptr $dns_ptr"
  $IPT -D pppoe_packets -i $IFNAME -j $filter
  $IPT -A pppoe_packets -i $IFNAME -j $filter
else
  $IPT -D pppoe_packets -i $IFNAME -j $filter
fi

echo $IFNAME[$PPID] ${0##*-} $IPREMOTE $filter $PEERNAME

for dns in $DNS_SERVERS; do
  cat <<EOF | nsupdate
server $dns
zone $dns_zone
$dns_delete
$dns_update
send
EOF
  echo -- $dns update $ip_reverse PTR  $dns_ptr result=$?
done

exec 1>&6 6>&-

P.S.: Опубликовал для себя, чтобы через +100500 лет не сочинять снова © madixi