Как впустить удалённых сотрудников в локальную сеть офиса по зашифрованному каналу с помощью VPN (Часть 3) [2008]
Итак, мы собрались ставить свеженький MPD5 и по правилам хорошего и удобного тона из портов, конечно же, благо, они свежие и ещё не успели совсем остыть:
# whereis mpd5 /usr/ports/net/mpd5 # cd /usr/ports/net/mpd5 ; make install clean
Options for mpd 5.1
[ ] NG_CAR Use ng_car kernel module from port (< 7.0 only)
[ ] NG_IPACCT Use ng_ipacct kernel module from port
[...................]
[ OK ] Cancel
Я ничего не выбирал и вам не советую, так что жмём Oll Klear и понеслась. После добавим сразу стартовую строку для MPD в /etc/rc.conf:
цифра в версии в данном случае не имеет значения. Приведённые строки после echo добавились в конец rc.conf, можете проверить командой "cat имяфайла" или "less (либо more) имяфайла". Займёмся теперь конфигурационным файлом нашего будущего VPN сервера:
# cd /usr/local/etc/mpd5
Именно сюда установились необходимые нам файлы, но пока только примеры - .sample расширения. Перед тем как переименовывать файлы, сделайте их резервную копию, чтобы в случае чего можно было всегда вернуться и посмотреть как сделано в примере.
# mkdir sample # cp *.sample sample/
Переименовать множество файлов можно следующим скриптом (из-под деко не сработает, т.к. ";" - не воспринимается, нужно записать в исполняемый файл всю строку и затем его запустить):
# for i in *.sample; do mv $i `basename $i ".sample"`; done
Я доправил свой конфиг mpd.conf до такого состояния:
# ee mpd.conf
startup:
# настройки локальных мониторов по следующим реквизитам (vpngod:12345) для пользователя с
# admin-привелегиями:
set user vpngod 12345 admin
# можно подлючиться с консоли
set console self 127.0.0.15005
set console open
# или с веба
set web self 192.168.0.25006
set web open
default: # загружаем по умолчанию профиль vpn
load vpn
vpn: # сам профиль
# Определяем диапазон выдаваемых удалённым клиентам алиасов (адреса виртуальных подключений)
# у меня с 249го по 254ый
set ippool add poolsat 192.168.0.249192.168.0.254
# Create clonable bundle template named B - эту секцию не менял
create bundle template B
set iface enable proxy-arp
set iface idle 1800
set iface enable tcpmssfix
set ipcp yes vjcomp
# Specify IP address pool for dynamic assigment - здесь задаём "шлюзовой" адрес для vpn-сервера
# который обслуживает наш поддиапазон - 192.168.0.255 в моём случае, и не думайте, такой адрес
# возможен.
# вместо виртуально выдуманного 0.255 можно задать адрес сетевой bce1 - 192.168.0.2.
# но в целях дополнительной конспирации я этого делать не стал.
set ipcp ranges 192.168.0.255/32 ippool poolsat
set ipcp dns 192.168.0.2192.168.0.3 # внутрикорпоративные dns-сервера, могут быть и внешние
# set ipcp nbns 192.168.0.1 - у меня его нет
# The five lines below enable Microsoft Point-to-Point encryption
# (MPPE) using the ng_mppc(8) netgraph node type. Поддержка шифрования Microsoft
# для Windows-клиентов, не изменял секцию
set bundle enable compression
set ccp yes mppc
set mppc yes e40
set mppc yes e128
set mppc yes 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
# различные настройки для поддержания MTU в 1500 байт
set link enable multilink
set link yes acfcomp protocomp
# We reducing link mtu to avoid GRE packet fragmentation.
set link mtu 1460
# запрещаем pap (никакой защиты), включаем поддержку chap (хоть какое-то предвар.рукопожатие)
set link no pap chap
set link enable chap
# Здесь можно подключить авторизацию по RADIUS базе, мы не используем
# иначе, нужно создать ещё одну секцию 'radius' и там задать доп.параметры
# load radius
set link keep-alive 1060
# Configure PPTP - это мой внешний IP адрес, на котором будет слушать MPD, на приём пациентов.
set pptp self 218.22.33.218
# Allow to accept calls - включаем входящие "звонки" (запрос на соединение)
set link enable incoming
В MPD5 по умолчанию поддерживаются стандартные настройки внешних виндовых клиентов, то есть, после обычного мастера настроек, вам нужно только ввести имя и пароль и больше ничего - раньше приходилось отключать шифрование пакетов и/или сжатие данных в настройках подключения (WinXP SP2/2003), об этом позже. Теперь нам необходимо задать список пар реквизитов для авторизации внешних клиентов, он может хранится в файле mpd.secret (ещё в БД, RADIUS или в самом mpd.conf - но последнее резко не рекомендую): # cat mpd.secret
Мы завели троих пользователей, при чём, user1 и tolya при подключении получат случайный адрес из диапазона 192.168.0.248/29, а akakij всегда будет получать адрес 192.168.0.253. Файл mpd.script в данном случае не используется - у меня нет dial-up интерфейсов, подключение статичное. Для того чтобы видеть все всплески настроения даемона, создадим для него лог-файл, который по умолчанию почему-то не предусмотрен в стартовом скрипте. Для этого, откроем для редактирования:
# ee /etc/syslog.conf
И добавим в конец файла:
!mpd
*.* /var/log/mpd.log
Создадим соответствующий файл, зададим ему права только на чтение root'ом и перезапустим syslog:
Multi-link PPP Daemon for FreeBSD
Current status summary
Bund Iface IPCP IPV6CP CCP ECP Link LCP User Device Peer
L Initial pptp DOWN
B Down Initial Initial Initial Initial
B-1 ng0 Up Opened Initial Opened Initial L-1 >
>Opened tolya pptp UP *.*.*.* <= [Open][Close]
Чтобы зайти с консоли сервера (на localhost=127.0.0.1), задействуем telnet с теми же реквизитами (vpngod:12345):
# telnet 127.0.0.1 5005 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Multi-link PPP daemon for FreeBSD
Username: vpngod Password:
Welcome! Mpd pid 98350, version 5.0 (root@*******.ru 12:50 12-Apr-2008) [] ? Available commands: bundle : Choose/list bundles close : Close a layer create : Create new item destroy : Destroy item exit : Exit console iface : Choose bundle by iface help : Help on any command link : Choose link load : Read from config file log : Set/view log options msession : Ch. bundle by msession-id open : Open a layer quit : Quit program repeater : Choose/list repeaters session : Choose link by session-id set : Set parameters show : Show status []
Надо отметить, что через консольные команды доступно очень немало действий, просмотрите хотя бы самостоятельно команду show. В случае, если у вас не указан чёткий адрес для логина, то по этому логину можно подключаться со стольки клиентов (windows-машин,например), сколько адресов у вас в подсети выделенной для VPN, т.е.:
это я зашёл с двух разных PC по одним и тем же реквизитам - разные vpn-адреса. Если что не так, смотрите логи, ошибки windows-клиентов и ещё пользуйтесь tcpdump (встроена в FreeBSD) и например, trafshow:
# whereis trafshow trafshow: /usr/ports/net/trafshow # cd /usr/ports/net/trafshow; make install clean ; rehash ; trafshow