Установка
# cd /usr/ports/net/mpd5
# make install clean
В опциях установки ничего не выбирал.
Настройка
Добавляем в /etc/rc.conf
:
mpd_enable="YES"
Конфиги хранятся в папке /usr/local/etc/mpd5
. Файл mpd.conf
:
startup:
# логин и пароль для консоли управления
set user пользователь пароль
set console self 127.0.0.1 5005
set console open
set web self 127.0.0.1 5006
set web open
default:
# или load vpn-pptp
# все зависит от того как хочется подключаться
load vpn-l2tp
vpn-pptp:
create bundle static PPTP
set iface up-script "/usr/local/etc/mpd5/up.sh PPTP"
set iface down-script /usr/local/etc/mpd5/down.sh
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set ipcp no vjcomp
create link static L1 pptp
set link action bundle PPTP
set link accept chap
set link latency 0
set link max-redial 0
set link mtu 1460
set link keep-alive 60 180
set pptp peer 85.21.0.17
set auth authname логин
set auth password пароль
set pptp disable windowing
open
vpn-l2tp:
create bundle static L2TP
set iface up-script "/usr/local/etc/mpd5/up.sh L2TP"
set iface down-script /usr/local/etc/mpd5/down.sh
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set ipcp no vjcomp
create link static L2 l2tp
set link action bundle L2TP
set link accept chap
set link latency 0
set link max-redial 0
set link mtu 1460
set link keep-alive 60 180
set l2tp peer tp.corbina.net
set auth authname логин
set auth password пароль
open
Файл /usr/local/etc/mpd5/up.sh
:
#!/bin/sh
gate=`netstat -rn | grep default | awk '{print $2}'`
vpn=`echo $5 | awk 'sub(/.[0-9]*$/,"")'`
time=`date "+%H:%M:%S"`
echo "$vpn.0/24" > /tmp/vpn_gw
/sbin/route -q delete $5
/sbin/route -nq add "$vpn.0/24" $gate
/sbin/route change default $5 -ifp $2
netstat=`netstat -rnf inet`
ifconfig=`ifconfig ng0`
echo "*************************************************************************
$time -$1- $2->$2 $3->$3 WAN($4)->$4 GW($5)->$5
interface = $2
gate = $gate
vpn_lan = $vpn/24
--------------------------------------------------------------------------
$ifconfig
--------------------------------------------------------------------------
$netstat
--------------------------------------------------------------------------
" >> /var/log/mpd.log
Файл /usr/local/etc/mpd5/down.sh
:
#!/bin/sh
gate=`netstat -rn | grep 10.0.0.0 | awk '{print $2}'`
vpn=`cat /tmp/vpn_gw`
/sbin/route -q delete $vpn
/sbin/route delete default
/sbin/route -nq add default $gate
netstat=`netstat -rnf inet`
echo "*************************************************************************
gate = $gate -> UP
vpn_lan = $vpn -> DOWN
$time -$1- DOWN
--------------------------------------------------------------------------
$netstat
--------------------------------------------------------------------------
" >> /var/log/mpd.log
Возможные проблемы
Бывает так, что если ваша сеть построена по принципу:
---- комп1
интернет ---- freebsd (mpd5 + pf) ---- роутер ---- комп2
---- комп3
то с компьютеров может все пинговаться, но ничего не открываться в браузере. Все это происходит из-за параметра MTU. В компьютерных сетях термин Maximum Transmission Unit (MTU) используется для определения максимального размера блока (в байтах), который может быть передан на канальном уровне коммуникационного протокола. Что можно сделать? Можно попробовать уменьшить значение mtu в конфиге mpd5 до 1462. Вот что на эту тему говорится в википедии:
Технология Path MTU discovery
Хотя фрагментация решает проблему несоответствия размеров пакетов и значения MTU, она ощутимо снижает производительность сетевых устройств. В связи с этим, в 1988 году была предложена альтернативная технология, названная Path MTU discovery (RFC 1191). Суть технологии заключается в том, что при соединении двух хостов, устанавливается параметр DF (don’t fragment, не фрагментировать), который запрещает фрагментацию пакетов. Это приводит к тому, что узел, значение MTU которого меньше размера пакета, отклоняет передачу пакета и отправляет сообщение ICMP (Internet Control Message Protocol) типа Destination is unreachable (Хост недоступен). К сообщению об ошибке прилагается значение MTU узла. Хост-отправитель уменьшает размер пакета и отсылает его заново. Такая операция происходит до тех пор, пока пакет не будет достаточно мал, чтобы дойти до хоста-получателя без фрагментации.
Однако, и у этой технологии существуют потенциальные проблемы. Все большее число систем настраиваются администраторами на блокирование ICMP пакетов (в том числе с целью предотвращения отказ в обслуживании). В результате, если размер пакета не соответствует значению MTU на определенном участке, пакет отбрасывается, а хост-отправитель не может получить информацию о значении MTU и не отправляет пакет заново. Поэтому соединение между хостами не устанавливается. Проблема получила название MTU Discovery Black Hole (RFC 2923). Одной из распространенных проблем при работе в сети, блокирующей ICMP пакеты, является работа в IRC, когда пользователь успешно проходит авторизацию, но не может получить так называемое MOTD (message of the day), в результате чего использование сети представляется невозможным.
Проблема представляет потенциальную опасность для любого PPPoE соединения, использующего MTU меньше типового (1500 байт).
Существует несколько вариантов решения этой проблемы. Самым простым, безусловно, является отмена фильтрации пакетов ICMP. Однако зачастую подобная операция находится вне компетенции пользователя. Поэтому проблему решают путем ручной настройки размера передаваемого пакета на шлюзе пользователя. Для этого меняют значение MSS (максимальный размер сегмента, меньше MTU на 40 байт). При установке соединения хосты обмениваются информацией о максимальном размере сегмента, который каждый из них сможет принять. Поэтому меняя значение MSS, заставляют оба хоста обмениваться пакетами, которые заведомо сможет принять шлюз пользователя без фрагментации.
Кроме того, существуют методы отмены бита DF c целью разрешения фрагментации. Однако метод корректировки MSS является предпочтительным.
Лучше всего бороться с mtu через параметр
set iface enable tcpmssfix