Зачастую при огранизациии так называемого VPN-подключения в рамках сети Интернет необходимо обеспечить полноценную маршрутизацию между IP-сетями, подключенными к обоим сторонам соединения «точка-точка».  На клиенте ppp это решается очень просто — в файле ppp.conf в соответствующей метке добавляется строка

add 192.168.1.0/24 HISADDR

А как быть на стороне сервера, если нужно промаршрутизировать клиенту некоторую сеть? В сервере mpd это решается достаточно просто путем добавления в конфигуционный  файл строк:

  iface up-script /usr/local/etc/mpd5/vpn_up_mpd.pl
iface down-script /usr/local/etc/mpd5/vpn_down_mpd.pl

Не обращайте внимание на такое «нечеловеческое» название файлов, это плод моего больного воображения. В файлах vpn_up_mpd.pl и vpn_down_mpd.pl можно писать всё, что вам заблагорассудиться, естественно в рамках возможностей perl, также это может быть и sh и любой другой скрипт или даже скомпилированный бинарник. Преимуществом mpd является тот факт, что в означенные скрипты передается еще ряд аргумекнтов, позволяющих различать соединения по логину, адресу и т.д. Однако mpd, как бы так сказать, несколько «склонен к панике» при внезапном обрыве связи между сервером и клиентом — это может быть перегрузка коммутатора/конвертора/маршрутизатора либо изменение bgp-маршрутизауции. Такие вещи могут запросто закончится аварийной перегрузкой или, что ещше непрятнее, «зависанием» сервера, в частности некоторые системные платы не всегда могут корректно перегрузиться при получении команды аварийной перегрузки в таком случае. Если требования по полосе канала не велики и не требуется трансляция адресов то для повышения стабильности можно использовать ppp уровня пользователя — в FreeBSD это pppd и ppptpd (poptop).  Настройке самого poptop уже посвящена отдельная статья, однако тема маршрутизауции клиентам сетей не раскрыта. В google полно инструцкции для linux, причем, как и положено, для каждого дистрибутива они разные. Вы можете найти описания скриптов /etc/ppp/if-up.d/, /etc/ppp/ip-up  и целый зоопарк названий конкретного скрипта. Ну linux  он такой linux… Забудьте! В FreeBSD есть только 2 файла:

  • /etc/ppp/ppp.linkup
  • /etc/ppp/ppp.linkdown

В них можно добавить метку, такую же, как и в основном конфигурационном файле ppp.conf, по умолчанию это метка pptp.  Содержимое файла ppp.linkup может быть таким:

pptp:
add 192.168.0.0/24 172.16.0.2

Где 172.16.0.2 — IP-адрес, назначенный pptp-клиенту.

Вот, собственно говоря, и всё. Особого анализа, какой именно это клиент и какой маршрут надо поднять, к сожалению нет, во всяком случае я его сходу не нашел. Но в крайнем случае, если вам нужно добавлять различные маршруты различным клиентам (естественно со статическими IP-адресами), то вы можете просто перечислить все маршруты подряд, хуже от это не будет.