Freebsd и MPD

И так рано или поздно приходит мысль сделать удаленное соединение с работой ,  так сказать сделать эфект присутсвия — как будто ваш домашний компутер находиться в локалки работы (сейчас как правило это делают через спец девайсы — где безопасность , политики , сигнатуры угроз и тд если есть  куча денег — эта статья не для вас ) ниже представлено простой  не безопасный но и бесплатный вариант  .

Или к примеру соеденить туннелем 2 офиса  и так далее …..

И так для понимания немного теории :

Mpd – реализация multi-link PPP протокола для FreeBSD, основанная на netgraph(4). В его основу легли концепции скорости и гибкости настроек. Исходя из этих принципов настройка соединений происходит на пользовательском уровне (user land), в то время как передача данных является функцией ядра (kernel).

Mpd поддерживает множество типов соединений:

  • модем – для соединения различных асинхронных последовательных соединений (asychronous serial connections), включая модем, ISDN адаптеры, и нуль-модемное соединение (null-modem). Mpd включает в себя скриптовый язык обработки данных основанный на событиях (event-driven scripting language) для установки типа модема, утановки соединения, авторизации и т.д.
  • pptp – соединение точка-точка через Internet по протоколу PPTP (Point-to-Point Tunnelling Protocol). Данный протокол поддерживается большинством производителей операционных систем и оборудования.
  • l2tp – соединение через Internet используя протокол 2-го уровня L2TP (Layer Two Tunnelling Protocol). L2TP является дальнейшей реализацией протокола PPTP и также поддерживается современными производителями операционных систем и оборудования.
  • pppoe – соединение поверх Ethernet по протоколу PPP (PPP-over-Ethernet). Данный протокол в основном используется DSL провайдерами.
  • tcp – тунелирование PPP сессии поверх TCP соединения. Кодирование фреймов (Frames) происходит по аналогии с асинхронным соедиениеним (asychronous serial connections).
  • udp – туннелирование PPP сессии поверх UDP соединения. Каждый фрейм инкапсулируется в пакет с UDP датаграммой (UDP datagram packet).
  • ng – соединение различных устройств, поддерживаемых netgraph. Netgraph – система сетевых модулей уровня ядра, поддерживает синхронные последовательные соединения (synchronous serial connections), Cisco HDLC, Frame Relay, и многие другие протоколы.

MPD поддерживает некоторые реализации субпротоколов PPP и их расширений, таких как:

  • Multi-link PPP
  • PAP, CHAP, MS-CHAP и EAP автроризация
  • сжатие трафика (traffic compression (MPPC, Deflate, Predictor-1))
  • криптование трафика (traffic encryption (MPPE, DESE, DESE-bis))
  • IPCP и IPV6CP параметры согласования

И так для этого нам понадобиться поставить порт  mpd-5.5 ( наиболее свежий на данный момент )

# cd /usr/ports/
# make search name=»mpd-5.5″
Port:   mpd-5.5
Path:   /usr/ports/net/mpd5
Info:   Multi-link PPP daemon based on netgraph(4)
Maint:  mav@FreeBSD.org
B-deps: expat-2.0.1_1 libpdel-0.5.3_4
R-deps: expat-2.0.1_1 libpdel-0.5.3_4
WWW:    http://www.sourceforge.net/projects/mpd

И так нашли то что нам необходимо , приступаем к установки :

# cd /usr/ports/net/mpd5
# make && make install && male clean

Нам (для поставленной задачи) выбирать доп. опции нет необходимости , поэтому оставляем все как есть ( по умолчанию  ) и производит сборку и установку порта .

И так после сборки в /usr/local/etc/mpd5 появятся дефолтные конфиги — вот их и начнем править :

SERVER1#cat >> /usr/local/etc/mpd5/mpd.conf

startup:
# configure mpd users
#set user ksa
# configure the console
set console self 127.0.0.1 5005
set console open
# configure the web server
set web self  5006
set web open

default:
load lns2

lns2:
set ippool add pool1 10.100.6.2 10.100.6.254
create bundle template B
set iface up-script /usr/local/etc/mpd5/up-script.sh — это скрипт который будет выполняться при поднятии тунеля .
set iface down-script /usr/local/etc/mpd5/down-script.sh — это скрипт который будет выполняться при отключении тунеля .
set iface enable proxy-arp
set iface idle 1800
set iface enable tcpmssfix
        set iface route default
set ipcp ranges 10.100.6.13 10.100.6.13
create link template L l2tp
set link action bundle B
set link enable multilink
set link yes pap chap
set link mtu 1460
set l2tp self 10.100.6.6
set link enable incoming

Ставим авторизацию подключения клиентов через пароль :

SERVER1#cat >> /usr/local/etc/mpd5/mpd.secret

ksa             «123456»  10.100.6.14

И далее можно сделать скрипты ,которые будут выполняться при создании подключения (или отключении) туннеля ,  и так что можно  выполнять данными скриптами , к примеру я реализовать механизм автомитизации маршрутизации :

SERVER1#cat /usr/local/etc/mpd5/down-script.sh

#!/bin/sh

/sbin/route del 10.100.6.8/30 10.100.6.14
/sbin/route del 10.100.6.16/30 10.100.6.14
/sbin/route del 10.100.6.20/30 10.100.6.14
/sbin/route del 10.100.6.24/30 10.100.6.14

и так далее ….

SERVER1#cat /usr/local/etc/mpd5/up-script.sh


#!/bin/sh

/sbin/route add 10.100.6.8/30 10.100.6.14
/sbin/route add 10.100.6.16/30 10.100.6.14
/sbin/route add 10.100.6.20/30 10.100.6.14
/sbin/route add 10.100.6.24/30 10.100.6.14

После перезагрузки mpd  — /usr/local/etc/rc.d/mpd start  , у вас должен появиться новый интерфейс :

#ifconfig

ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1460
inet 10.100.6.13 —> 10.100.6.14 netmask 0xffffffff

Все серверную часть закончили , приступаем к настройки клиентской части .

Настройка клиентской части

Со стороны клиента , так же производим инсталяцию порта mpd :

 

# cd /usr/ports/
# make search name=»mpd-5.5″
Port:   mpd-5.5
Path:   /usr/ports/net/mpd5
Info:   Multi-link PPP daemon based on netgraph(4)
Maint:  mav@FreeBSD.org
B-deps: expat-2.0.1_1 libpdel-0.5.3_4
R-deps: expat-2.0.1_1 libpdel-0.5.3_4
WWW:    http://www.sourceforge.net/projects/mpd

И так нашли то что нам необходимо , приступаем к установки :

# cd /usr/ports/net/mpd5
# make && make install && male clean

Нам (для поставленной задачи) выбирать доп. опции нет необходимости , поэтому оставляем все как есть ( по умолчанию  ) и производит сборку и установку порта .

И так после сборки в /usr/local/etc/mpd5 появяться дефолтные конфиги — вот их и начнем править :

CLIENT1#cat >> /usr/local/etc/mpd5/mpd.conf

 startup:
set console port 5005
set console ip 127.0.01
set console user root
set web port 5006
set web user root passFTRfdg45645634
set web open

default:
load l2tp

l2tp:
create bundle static Bl2tp
set iface up-script /usr/local/etc/mpd5/up-script.sh
set iface down-script /usr/local/etc/mpd5/down-script.sh
set iface idle 0
create link static Ll2tp l2tp
set link action bundle Bl2tp
set link no acfcomp protocomp
set link disable pap chap
set link accept chap
set link keep-alive 15 60
set link max-redial 0
set link mtu 1460
set link mru 1460
set l2tp peer 10.100.6.6
set auth authname ksa
set auth password 123456
open

И так же поправляем скрипты

#!/bin/sh

/sbin/route del 0.0.0.0/0 10.100.6.1
/sbin/route add 10.100.6.4/30 10.100.6.1
/sbin/route add 0.0.0.0/0 10.100.6.13

После чего необходимо перестартовать клиента ,

Вот собственно и все /usr/local/etc/rc.d/mpd start  , после чего туннель должен подняться , и не забываем смотреть вывод ifconfig — для проверки .

Тут же можно сделать  логирование :

#cat >> /etc/syslog.conf

!mpd
*.*                                             /var/log/mpd.log

И ротацию логов mpd

#cat >> /etc/newsyslog.conf

/var/log/mpd.log                        600  7     100  *     JC

Все вот теперь  работа сдана под ключ , если что не так — смотрим как всегда логи ….находим проблему и решаем .

 

Системные настройки сервера

 

Есть некоторые моменты, которые следует учесть, если ваш сервер имеет большое количество соединений. Например, можно столкнуться с ситуацией, когда при выводе комманды ngctl list будет выдававаться No buffer space available. Чтобы этого избежать следует добавить в /boot/loader.conf:

kern.ipc.nmbclusters=16384
kern.ipc.maxsockets=16384
net.graph.maxalloc=2048
kern.maxusers=512
kern.ipc.maxpipekva=32000000

в /etc/sysctl.conf:

net.graph.maxdgram=128000
net.graph.recvspace=128000