FreeBSD. Подключение к Билайн по протоколам PPTP/L2TP средствами mpd5.



Имеется домашний сервер на FreeBSD 8.1 и проводное подключение к Билайн. Требуется установить и настроить подключение к интернету по протоколам PPTP/L2TP с последующей раздачей в локальную сеть. Самым удобным средством для этого является MPD5 имеющий больший потенциал, чем требуется нам, но об этом позднее.

Установка MPD5.

# cd /usr/ports/net/mpd5
# make config
Выставляем параметры с которыми будет установлен порт, в нашем случае можно все убрать.
# make install clean
Ждем окончания установки порта.

Настройка MPD5.

Переходим в директорию с настройками MPD5 /usr/local/etc/mpd5 в которой находятся примеры конфигурации порта.
Создаем рабочий файл конфигурации
# touch /usr/local/etc/mpd5/mpd.conf
Внимательно читая документацию по MPD5 редактируем данный файл. У меня получился следующего содержания:
startup:
set user %mpd_username% %mpd_password% admin
set console self %mpd_console_address% %mpd_console_port%
set console open
set web self %mpd_web_address% %mpd_web_port%
set web open
set link enable report-mac

default:
load l2tp_client

pptp_client:

 create bundle static B1
 set iface enable nat
 set iface enable tcpmssfix
 set iface up-script /usr/local/etc/mpd5/ng0-up.sh
 set iface down-script /usr/local/etc/mpd5/ng0-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 B1
 set link accept chap
 set auth authname %beeline_username%
 set auth password %beeline_password%
 set link max-redial 0
 set link latency 0
 set link mtu 1460
 set link keep-alive 60 180
 set pptp peer vpn.internet.beeline.ru
 open

l2tp_client:

 create bundle static B1
 set iface enable nat
 set iface enable tcpmssfix
 set iface up-script /usr/local/etc/mpd5/ng0-up.sh
 set iface down-script /usr/local/etc/mpd5/ng0-down.sh
 set ipcp ranges 0.0.0.0/0 0.0.0.0/0
 set ipcp no vjcomp
 
 create link static L1 l2tp
 set link action bundle B1
 set link accept chap
 set auth authname %beeline_username%
 set auth password %beeline_password%
 set link max-redial 0
 set link latency 0
 set link mtu 1460
 set link keep-alive 60 180
 set l2tp peer tp.internet.beeline.ru
 open
Далее создаем скрипты смены маршрута по умолчанию. В скрипте /usr/local/etc/mpd5/ng0-up.sh будет удаляться локальный маршрут и устанавливаться маршрут интернет соединения, а скрипте /usr/local/etc/mpd5/ng0-down.sh обратное действие.
# touch /usr/local/etc/mpd5/ng0-up.sh
# chmod +x /usr/local/etc/mpd5/ng0-up.sh
Редактируем:
#!/bin/sh

ip_local_gateway=`route get default | grep gateway | awk '{print $2}'`
net_vpn=`echo $5 | awk 'sub(/.[0-9]*$/,"")'`

route -q delete $5
route -nq add "$net_vpn.0/24" $ip_local_gateway
route change default $4

echo "$ip_local_gateway" > /tmp/mpd_ip_local_gateway
echo "$net_vpn.0/24" > /tmp/mpd_net_vpn
Создаем и редактируем /usr/local/etc/mpd5/ng0-down.sh:
# touch /usr/local/etc/mpd5/ng0-down.sh
# chmod +x /usr/local/etc/mpd5/ng0-down.sh
#!/bin/sh

ip_local_gateway=`cat /tmp/mpd_ip_local_gateway`
net_vpn=`cat /tmp/mpd_net_vpn`

route delete "$net_vpn.0/24"
route change default $ip_local_gateway

Настройка системы.

Добавляем строки для автозапуска MPD5 в /etc/rc.conf:
mpd_enable="YES"
mpd_flags="-b"
synchronous_dhclient="YES"
Создаем файл где куда будут записывать логи MPD5
# touch /var/log/mpd.log
Даем права только root для чтения и записи в /var/log/mpd.log
# chmod 600 /var/log/mpd.log
Добавляем строки для того что бы можно было смотреть логи MPD5 в /etc/syslog.conf:
!mpd
*.*                                             /var/log/mpd.log
Перезапускаем syslogd
# /etc/rc.d/syslogd reload
Настраиваем ротацию лога MPD5 в /etc/newsyslog.conf:
/var/log/mpd.log                        600  7     100  *     JC
Перезапускаем newsyslog
# /etc/rc.d/newsyslog restart
В 6-7-й ветке необходимо загрузить модули ng_ipfw, ng_nat, либо собирать ядро с опциями NETGRAPH,NETGRAPH_IPFW, NETGRAPH_NAT.
# kldload ng_ipfw
# kldload ng_nat
Для последующей автозагрузке модулей добавить в /boot/loader.conf следующие записи:
ng_nat_load="YES"
ng_ipfw_load="YES"
В 8-й ветке все работает "из коробки" с ядром GENERIC.

Комментариев нет: