Сен 282011
 

Итак, поставили передо мной задачу подключить удаленные филиалы к нашей локальной сети.

Имеем сервер на FreeBSD 7.4, одним интерфейсом смотрящий в интернет (поднимающий pppoe), другим в локальную сеть. Просто классика.
Правила ipfw.
VPN туннель будем поднимать средствами mpd5. И напишем простой скрипт для ведения красивых логов подключений.

В интернете на каждом углу валяются инструкции по установке mpd5. Немного повторим.

Устанавливаем из портов:

# cd /usr/ports/net/mpd5 && make config

В «Options for mpd 5.4» ничего не отмечаем.

# make install clean

После установки создаем конфиг и файл с логинами и паролями. Дадим им права только на чтение:

# touch /usr/local/etc/mpd5/mpd.conf

# touch /usr/local/etc/mpd5/mpd.secret

# chmod 440 /usr/local/etc/mpd5/mpd.conf

# chmod 440 /usr/local/etc/mpd5/mpd.secret

Отредактируем mpd.secret, просто список «Логин   Пароль»

# ee /usr/local/etc/mpd5/mpd.secret

Andrey                12345

Чтобы велся красивый лог подключений/отключений нарисуем два скрипта, запускаемых при поднятии коннекта и разрыве. И создадим сам файл лога /var/log/mpd.connect.log:

# touch /root/scripts/vpn/login.sh

# touch /root/scripts/vpn/logout.sh

# touch /var/log/mpd.connect.log

Сделаем скрипты исполняемыми:

# chmod +x /root/scripts/vpn/login.sh

# chmod +x /root/scripts/vpn/logout.sh

В скриптах нарисуем следующее:

cat /root/scripts/vpn/login.sh

#!/bin/sh

DATE=`date +%d-%m-%Y_%H:%M:%S`

echo "UP $DATE user:$5 ip:$8 local_ip:$4 $1" >> /var/log/mpd.connect.log

cat /root/scripts/vpn/logout.sh

#!/bin/sh

DATE=`date +%d-%m-%Y_%H:%M:%S`

echo "DOWN $DATE user:$5 local_ip:$4 $1" >> /var/log/mpd.connect.log

Где

$1 — имя интерфейса
$4 — Удаленный, IP (присвоенный при подключении)
$5 — Имя пользователя
$8 — Внешний IP удаленного компьютера

Редактируем конфиг:

# ee /usr/local/etc/mpd5/mpd.conf

У меня он выглядит так:

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

startup:

set user admin 12345 admin

set console self 127.0.0.1 5005

set console open

set web self 0.0.0.0 5006

set web open

default:

load pptp_server

pptp_server:

# Определяем диапазон выдаваемых IP удалённым клиентам у меня с ...192 по ...253

set ippool add poolsat 192.150.34.132 192.150.34.135

create bundle template B

set iface enable proxy-arp

set iface idle 0

set iface enable tcpmssfix

set ipcp yes vjcomp

# Скрипт, выполняемый при поднятии коннекта

set iface up-script /root/scripts/vpn/login.sh

# Скрипт, выполняемый при отключении

set iface down-script /root/scripts/vpn/logout.sh

# IP адрес сервера, который мы будем показывать клиентам

# в моем случае 192.150.34.10 (можно не реальный IP)

set ipcp ranges 192.150.34.10/25 ippool poolsat

# Здесь указываем DNS сервер

set ipcp dns 192.150.34.15

# Enable Microsoft Point-to-Point encryption (MPPE)

set bundle enable compression

set ccp yes mppc

set mppc yes compress e40 e56 e128 stateless

# Create clonable link template named L

create link template L pptp

# Set bundle template to use

set link action bundle B

# Multilink adds some overhead, but gives full 1500 MTU

set link enable multilink

set link yes acfcomp protocomp

set link no pap chap eap

set link enable chap

set link enable chap-msv1

set link enable chap-msv2

# We reducing link mtu to avoid GRE packet fragmentation.

set link mtu 1460

set link keep-alive 10 60

# Configure PPTP and open link

# Тут указываем IP сетевой карты или имя интерфейса смотрящего в интернет

set pptp self tun0

set link enable incoming

Чтобы mpd загружался при старте, добавим в /etc/rc.conf следующие строки:

mpd_enable="YES"

gateway_enable="YES"

Чтобы mpd вел лог (это не просто лог кто подключился) создадим файл лога:

# touch /var/log/mpd.log

# chmod 600 /var/log/mpd.log

В /etc/syslog.conf в конец файла добавим следующие строки:

# ee /etc/syslog.conf

!mpd

*.*     /var/log/mpd.log

Перезагружаем syslog:

# /etc/rc.d/syslogd reload

И теперь знаменательный момент:

# /usr/local/etc/rc.d/mpd5 start

Смотрим в процессы

#  ps axw | grep mpd

Должны увидеть что-то такое:

682  ??  Is     0:00.91 /usr/local/sbin/mpd5 -p /var/run/mpd5.pid -b

И на последок, если у вас стоит IPFW, как у меня, то надо mpd5 выпустить наружу, добавить в скрипт фаервола следующее:

#-------- VPN ---------

${FwCMD} add allow tcp from any to me 1723 in via ${LanOut}

${FwCMD} add allow tcp from me 1723 to any out via ${LanOut}

${FwCMD} add allow gre from me to any out via ${LanOut}

${FwCMD} add allow gre from any to me in  via ${LanOut}

${FwCMD} add allow ip from any to ${VpnIp} out

# Разрешает все входящие пакеты по протоколу ip от IP-адресов VPN-клиентов на Mail сервер

${FwCMD} add allow ip from ${VpnIp} to any in via ${MailServer}

# MailServer'у разрешены любые tcp к VPN-клиентам

${FwCMD} add allow tcp from ${MailServer} to ${VpnIp}

# vpn-клиентам тоже

${FwCMD} add allow tcp from ${VpnIp} to ${MailServer}

${FwCMD} add allow udp from ${VpnIp} to ${MailServer}

По переменным, думаю, не должно возникнуть вопросов.

VpnIp=192.150.34.132,192.150.34.133,192.150.34.134,192.150.34.135     # Здесь указываем IP адреса, которые будут присваиваться пользователям vpn (см. mpd.conf)

При подключении в файле mpd.connect.log мы должны увидеть примерно такое:

UP 28-09-2011_12:58:18 user:Andrey ip:95.32.124.121 local_ip:192.150.34.132 ng0
DOWN 28-09-2011_13:16:33 user:Andrey local_ip:192.150.34.132 ng0

Удачи =)

  7 комментариев to “FreeBSD + mpd5”

  1. Андрюх добавь название темы. а так нормально.

  2. Вообще огромный респект, спасибо за статью.

  3. Спасибо.

  4. Андрей а у меня нету такого:
    # touch /root/scripts/vpn/login.sh

    # touch /root/scripts/vpn/logout.sh

    я ию ввиду директории root (тут же можно любую директорию указать???)

    • Андрей а у меня нету такого:
      # touch /root/scripts/vpn/login.sh

      # touch /root/scripts/vpn/logout.sh

      Создай.

      я ию ввиду директории root (тут же можно любую директорию указать???)

      Да.

  5. Sposibo za otlichniy sayt.

  6. Интересный вариант настройки.
    Я на данный момент использую mydns, стоит ли мне поменять днс сервер?

 Leave a Reply

(required)

(required)

40 Запросов к базе. 0,432 Генерации страницы, 36MB Использование памяти.
Вы зашли с IP: 54.225.16.10