VPN тунель под FreeBSD

Давно известно, что в сетях некоторых провайдеров, есть проблемы с поднятием VPN из под FreeBSD.
Пару лет назад наткнулся на эту проблему в своей сети, не стал долго думать и поставил железный  роутер и был доволен. Но, как известно, человек предполагает, а инет располагает. В общем назрела эта проблема вновь. Гугление выдает великое множество ссылок на различные рецепты шаманских танцев с бубном и без оного, но мне не удалось найти ни одного нормального описания приводящего к желаемому результату. Однако поднять VPN-туннель у меня получилось 🙂
На самом деле, все элементарно.
На FeeBSD 6.2 с mpd4-4.0b4 все поднимается на ура.

Ниже рецепт на примере одной сети:

Дано:
локальный IP 10.22.2.7 c маской 255.0.0.0
шлюз 10.0.0.2
DNS1 85.93.129.2
DNS2 85.93.128.2
VPN-server 10.0.0.2

Настройка сети
1. Добавляем нужные строки в конфиги

в /etc/rc.conf:

ifconfig_em0=»inet 10.22.2.7 netmask 255.0.0.0″
defaultrouter=»10.0.0.2″
в /etc/resolv.conf:

nameserver 85.93.129.2
nameserver 85.93.128.2
2. Рестартуем сервисы:

/etc/rc.d/netif restart
/etc/rc.d/routing restart
3. После проверяем связь с DNS-сервером:

ping 85.93.129.2
Если ping проходит, то идем дальше.
Если нет, то значит где-то допустили ошибку. Проверяем настройки сети.

Настройка VPN

4. Устанавливаем mpd-4.x

так:

pgk_add -r mpd-4.x
или так:

cd /usr/ports/net/mpd4 && make install clean
5. Создаем 4 файла в /usr/local/etc/mpd4/ с нижеприведенным содержимым:

mpd.conf:

startup:
set web ip 127.0.0.1
set web port 5006
set web user vpn vpn
set web open

default:
load vpn-pptp

vpn-pptp:
new -i ng0 netline_pptp vpn
set iface mtu 1460
set iface idle 0
set iface enable tcpmssfix
set iface up-script /usr/local/etc/mpd4/up-vpn.sh
set iface down-script /usr/local/etc/mpd4/down-vpn.sh
# меняем LOGIN и PASSWORD на свои
set auth authname LOGIN
set auth password PASSWORD
set link keep-alive 60 180
set link accept chap
set link no pap
set link max-redial 0
set bundle disable multilink
set bundle disable crypt-reqd
set bundle disable noretry
set ccp yes mpp-e40
set ccp no mpp-e128
set ccp no mpp-stateless
set ipcp no vjcomp
open

mpd.links

vpn:
set link type pptp
set pptp peer 10.0.0.2
set pptp enable originate
set pptp disable incoming windowing

up-vpn.sh:

#!/bin/sh

netgw=`10.0.0.2`
route delete $4
route add $4 $netgw
route delete default
route add default $4
echo $4 > /tmp/pptpgw

down-vpn.sh:

#!/bin/sh

netgw=`10.0.0.2`
vpngw=`cat /tmp/pptpgw`
route delete $vpngw
route delete default
route add default $netgw
6. Стартовый скрипт mpd4:

переименовываем:

mv /usr/local/etc/rc.d/mpd4.sh.sample /usr/local/etc/rc.d/mpd4.sh
и запускаем:

/usr/local/etc/rc.d/mpd4.sh start
останавливаем соответственно:

/usr/local/etc/rc.d/mpd4.sh stop
Вот и все.