27
Netgraph/Mpd «изнутри» Alexander Motin [email protected]

Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

  • Upload
    doanque

  • View
    231

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

Netgraph/Mpd «изнутри»

Alexander [email protected]

Page 2: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• О себе:– 1996 - 2002 Днепропетровский Национальный

Университет Железнодороджного Транспорта (ДИИТ),– 2000 - 2006 ООО «Алькар-Телепорт», ISP, системный

администратор, программист отдела биллинга,– 2006 - 2007 ООО «Оптима-Телеком», системный

администратор, программист отдела интернет биллинга,– 2007 - 2009 OAO «Фарлеп-Инфест», ведущий

программист отдела развития клиентского биллинга,– с 2003 участвую в проекте Mpd,– с 2007 являюсь FreeBSD source коммиттером.

Page 3: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

Netgraph

• Netgraph - это подсистема ядра дляобработки пакетной информации, в первуюочередь сетевого трафика.

• Netgraph отличают высокая гибкость ирасширяемость и вместе с тем высокаяпроизводительность.

• Netgraph - это не конечный продукт дляпотребителя, но инструмент дляразработчика и администриратора.

Page 4: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• В начале было слово, и было оно два байтаи больше ничего не было...

Netgraph

Page 5: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Для взаимодействия с Netgraph служитмодуль ng_socket и утилита ngctl.

Netgraph

ngctl

socket

data control

Page 6: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Вид на ноду socket глазами ngctl:

Page 7: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Простейший UDP тунель с использованиеммодулей ng_iface и ng_ksocket.

Netgraph

ngctl

socket

data control

ifaceksocket ng0UDP

inet/dgram/udp

ng0

inet10.0.1.1:10000 <--> 10.0.0.2:10000

Page 8: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• то-же, но из командной строки:

Page 9: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• осталось только установить соединение:

Page 10: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Нужна так-же поддержка IPv6? Легко!

Netgraph

ngctl

socket

data control

iface

ksocket

ng0

UDP

inet/dgram/udp

ng0

inet

ksocketUDP

28/2/17inet6

Page 11: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• А теперь немного сложнее - TCP тунель.

Netgraph

ngctl

socket

data control

ifaceksocket ng0TCP

inet/stream/tcp

ng0

inet10.0.1.1:10000 <--> 10.0.0.2:10000

async

async sync

Page 12: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• pppoed - PPPoE сервер для «бедных». :)

Netgraph

ppp

socket

datacontrol

etherfxp0

orphans

pppoe

ethernet

pppoe-<pid>

pppoed tun0

socket

data

pppoe-<pid>

exec-<pid>

exec-<pid>

Page 13: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• mpd - PPP для взрослых. PPPoE.

Netgraph

bundlelink

socket

control

etherfxp0

pppoe

mpd

data

socket

controldata

ppp

iface ng0

Page 14: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• mpd - PPP для взрослых. Multilink PPPoE.

Netgraph

bundlelink1/link2

socket

control

etherfxp0

pppoe

mpd

data

socket

controldata

ppp

iface ng0etherfxp1

pppoe

Page 15: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• mpd - PPP для взрослых. L2TP.

Netgraph

socket

control

ksocketUDP

l2tp

mpd

data

socket

controldata

ppp

iface ng0

Page 16: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• mpd - PPP для взрослых. PPTP.

Netgraph

socket

control

ksocketGRE

pptpgre

mpd

socket

controldata

ppp

iface ng0

TCP

Page 17: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• mpd - PPP для взрослых. Modem.

Netgraph

socket

control

ttyserial

async

mpd

socket

controldata

ppp

iface ng0

serial

Page 18: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• ..., TCP, UDP, Sync, ... Чего еще изволите?

Netgraph

socket

control

?

mpd

socket

controldata

ppp

iface ng0

?

Page 19: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• LAC - L2TP Access Concentrator.

Netgraph

link1 link2

socket

control

ttyserial

async

mpd

socket

controldata

l2tp

ksocket UDP

serial

Page 20: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• PAC - PPTP Access Concentrator.

Netgraph

socket

control

etherfxp0

pppoe

mpd

data

socket

controldata

pptpgre

ksocket GRE

TCP

Page 21: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• TSA - Tunnel Switching Aggregator.

Netgraph

socket

control

l2tp

mpd

socket

controldata

l2tp

ksocket UDP

data

ksocketUDP

ksocketUDP

ksocketUDP

l2tpl2tp

Page 22: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Сжатие (VJC, MPPC, Deflate, Predictor-1),шифрование (MPPE, DESE)

Netgraph

mpd

socket

controldata

ppp iface ng0

mppc deflate

Page 23: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Netflow, фильтры, шейпы, аккаунтинг, NAT

Netgraph

mpd

socket

controldata

ppp

iface ng0

netflow

bpf

car

car

ksocket

UDP

tcpmss

nat

Page 24: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Но не стоит забывать о user-level демоне:– управление netgraph,– внешнее взаимодействие:

• консоль,• Telnet сервер,• HTTP сервер:

– WEB интерфейс,– технический интерфейс (API),

• RADIUS клиент и сервер,– файлы конфигурации,– язык управления модемом,– выдача IP адресов

Page 25: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Но не стоит забывать о user-level демоне:– аутентификация:

• PAP,• CHAP,• MS-CHAPv1,• MS-CHAPv2,• EAP,

– авторизация и аккаунтинг:• internal (файл с паролями),• system (passwd/utmp/wtmp),• PAM,• external (вызов внешних скриптов),• RADIUS,

Page 26: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Но не стоит забывать о user-level демоне:– динамическая авторизация:

• обрыв сессии:– Telnet консоль– WEB-интерфейс– RADIUS-client аккаунтинг– RADIUS-server Disconnect-Request

• изменение параметров сессии «на лету»:– RADIUS-server Change of Authorization (CoA)

– управление ограничением и подсчетом трафика.

Page 27: Netgraph/Mpd «изнутри - people.freebsd.orgmav/ng-mpd.pdf · • mpd - PPP для взрослых. Multilink PPPoE. Netgraph link1/link2 bundle socket control fxp0 ether pppoe

• Ну и конечно производительность!На Core2Duo 2.4GHz с 512MB (менее $1000 даже всерверном исполнении) под FreeBSD 7.2, mpd5.3,oops и quagga одновременно обслуживаются:

• 2500 PPPoE сессий,• 500Mbit/s трафика,• до 100 новых подключений в секунду,• поклиентные фильтры/классификаторы трафика,• поклиентные шейпы для каждого фильтра,• RADIUS аккаунтинг поклиентно по типам трафика

каждые 2.5 минуты,• генерация Netflow,• режим мягкого отключения (captive portal),• ...