Установка PPPoE сервера в Debian/Ubuntu Linux

PPPoE (сокр. от Point-to-Point Protocol over Ethernet) — сетевой протокол передачи PPP-пакетов поверх сети Ethernet. Преимущественно используется xDSL-провайдерами, однако не стоит недооценивать его пользу и в обычных домашних сетях — обратите внимание на его возможности (аутентификация, сжатие данных, шифрование).

Необходимо проинсталировать пакеты ppp, pppoe и pppstatus.

$ sudo apt-get install ppp pppoe pppstatus
Далее создаем файл /etc/ppp/pppoe-server-options со следующим содержанием:

require-chap
ktune
login
ms-dns 10.0.0.1
nobsdcomp
noendpoint
noproxyarp
noipdefault
noipx
novj
logfile /home/oc/pppoe-server.log

Так же там указано, что pppoe-server работает в kernel mode. Настройки доступа хранятся в файле /etc/ppp/chap-secrets в формате

# логин сервер пароль ip_адрес_клиента
«test» * «changeme» *
Что бы после перезапуска сервера pppoe server поднимался автоматически необходимо добавить в файл /etc/rc.local:

PROV=NET-PLUS
MAX=5
BASE=172.28.6.65
PLA=172.28.6.64/26
MYIP=172.28.6.1

pppoe-server pty \
-T 60 \
-I eth1 \
-L $MYIP \
-N $MAX \
-C $PROV \
-S $PROV \
-R $PLA

exit 0
Важно не забыть подгрузить модуль ядра pppoe при старте системы — для этого добавляем запись «pppoe» в /etc/modules. Сам модуль можно подгрузуть в любой момент с помощью modprobe.

В iptables хорошо бы добавить

-A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp mss-to-pmtu
В /etc/sysctl.conf должна быть раскомментирована строчка «net.ipv4.ip_forward=1», иначе Linux не будет перенаправлять пакеты с одного интерфейса на другой. Эту же опцию можно сменить с помощью утилиты sysctl.

В таблице маршрутизации должен быть один default router — адрес провайдера (при условии, что на машине несколько поднятых интерфейсов). В итоге вывод `netstat -rn`должен выглядеть примерно так

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Iface
172.28.6.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
74.56.59.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 74.56.59.1 0.0.0.0 UG 0 0 0 eth0