Как поднять VPN подключение клиента во FreeBSD/PCBSD

Сначала ставим mpd4

1.cd /usr/ports/net/mpd4 ; make install clean BATCH=yes
в ядре должно быть (на всяк пожарный все что может пригодиться, что не надо - вычеркиваем):

options         NETGRAPHoptions         NETGRAPH_ETHERoptions         NETGRAPH_NETFLOWoptions         NETGRAPH_SOCKEToptions         NETGRAPH_TEE#options         NETGRAPH_MPPC_ENCRYPTION#options         NETGRAPH_MPPC_COMPRESSIONoptions         NETGRAPH_BPFoptions         NETGRAPH_IFACEoptions         NETGRAPH_KSOCKEToptions         NETGRAPH_PPPoptions         NETGRAPH_PPTPGREoptions         NETGRAPH_TCPMSSoptions         NETGRAPH_VJCoptions         NETGRAPH_ONE2MANYoptions         NETGRAPH_RFC1490options         NETGRAPH_TTYoptions         NETGRAPH_UIИли то же самое можно подгрузить модулями.
Допишем в /boot/loader.conf :

netgraph_load="YES"ng_ether_load="YES"ng_netflow_load="YES"ng_socket_load="YES"ng_tee_load="YES"ng_bpf_load="YES"ng_iface_load="YES"ng_ksocket_load="YES"ng_ppp_load="YES"ng_pptpgre_load="YES"ng_tcpmss_load="YES"ng_vjc_load="YES"ng_one2many_load="YES"ng_rfc1490_load="YES"ng_tty_load="YES"ng_UI_load="YES"Во-первых надо выянить - какой у Вас шлюз:

> netstat -rnRouting tables Internet:Destination        Gateway           Flags   Refs      Use  Netif Expiredefault            10.27.24.1        UGS         0  3425048    nfe0...Добавляем в файл /etc/rc.conf строчки:

static_routes="dns1 dns2 vpn l2tp corbina"route_dns1="-host 213.234.192.8 ВАШ_ШЛЮЗ"route_dns2="-host 85.21.192.3 ВАШ_ШЛЮЗ"route_vpn="-net 85.21.0.0/24 ВАШ_ШЛЮЗ"route_l2tp="-net 85.21.17.0/24 ВАШ_ШЛЮЗ"route_corbina="-net 10.0.0.0/8 ВАШ_ШЛЮЗ" mpd_enable="YES"mpd_flags="-b"То есть были заданы статические маршруты для днс и впн серверов (pptp/l2tp) и внутренней сети Корбины.
Файл /usr/local/etc/mpd4/mpd.conf

default:    #load vpn    load l2tp vpn:    new -i ng0 vpn vpn    set auth authname "ВАШ_ЛОГИН"    set auth password "ВАШ_ПАРОЛЬ"    set bundle disable multilink    set iface up-script /usr/local/etc/mpd4/io-up.sh    set iface down-script /usr/local/etc/mpd4/io-down.sh    set link no pap acfcomp protocomp    set link disable chap    set link accept chap    set link keep-alive 30 10    set ipcp no vjcomp    set iface disable on-demand    set iface idle 0    open l2tp:    new -i ng0 l2tp l2tp    set iface idle 0    set auth authname "ВАШ_ЛОГИН"    set auth password "ВАШ_ПАРОЛЬ"    set bundle disable multilink    set iface up-script /usr/local/etc/mpd4/io-up.sh    set iface down-script /usr/local/etc/mpd4/io-down.sh    set link no pap    set link accept chap    set ipcp no vjcomp    set link keep-alive 60 180    set link max-redial 0    set bundle disable noretry    set iface enable tcpmssfix    openФайл /usr/local/etc/mpd4/mpd.links

vpn:    set link type pptp    set pptp peer vpn.corbina.ru    set pptp enable originate incoming outcall    set pptp disable windowingl2tp:  set link type l2tp  set l2tp peer l2tp.corbina.net  set l2tp enable originateФайл /usr/local/etc/mpd4/mpd.secret

1.ВАШ_ЛОГИН       "ВАШ_ПАРОЛЬ"Файл /usr/local/etc/mpd4/io-up.sh

#!/bin/sh # Получаем адрес шлюзаip_def_gw=`route -n get -inet default | grep gateway | awk '{ print $2 }'`echo $ip_def_fw > /tmp/ip_def_gw # Получаем адреса DNS-серверовdns_servers=`cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'` route delete $4route add $4 $ip_def_gwroute delete defaultroute add default $4 #vpn.corbina.netroute add -net 85.21.0.0/24        $ip_def_gw#l2tp.corbina.netroute add -net 85.21.17.0/24    $ip_def_gw  # Маршруты до DNS-серверовfor host_target in `echo $dns_servers`do  route add -host $host_target $ip_def_gwdone  ### Добавляем маршруты до внутренних серверовroute add -host 85.21.0.36         $ip_def_gwroute add -host 85.21.79.2        $ip_def_gwroute add -host 85.21.79.25        $ip_def_gwroute add -host 85.21.79.100       $ip_def_gwroute add -host 195.14.50.16       $ip_def_gwroute add -host 195.14.50.21       $ip_def_gw # ftp4.ru.freebsd.org, cvsup6.ru.freebsd.orgroute add -host 195.14.50.26       $ip_def_gwroute add -host 195.14.50.93       $ip_def_gwroute add -host 85.21.88.130 $ip_def_gw #corbina.tvroute add -host 85.21.79.12 $ip_def_gw #irc.corbina.ruroute add -host 10.2.3.14 $ip_def_gwroute add -host 10.187.11.1 $ip_def_gwroute add -host 10.187.58.100 $ip_def_gw# dc.corbina.netroute add -host 85.21.79.38 $ip_def_gwroute add -host 85.21.79.38 $ip_def_gw # Маршруты до DNS-серверовfor host_target in `echo $dns_servers`do  route add -host $host_target $ip_def_gwdone  echo $4 > /tmp/drФайл /usr/local/etc/mpd4/io-down.sh

#!/bin/sh dr=`cat /tmp/dr`ip_def_gw=`cat /tmp/ip_def_gw` route delete $drroute delete defaultroute add default $ip_def_gwrm -f /var/drrm -f /tmp/ip_def_gwЕсли необходимо сделать NAT для локалки, то в io-up.sh в конец добавляется следующий код:
В скрипте - nfe0 - интерфейс, смотрящий на корбину, rl0 - в локалку
192.168.0.0/24 - внутренняя подсеть

## Поднимает НАТ#Чистим. Можно только в io-down.shif [ -f /var/run/natd.pid ] ; thenkill `cat /var/run/natd.pid`fiif [ -f /var/run/natd2.pid ] ; thenkill `cat /var/run/natd2.pid`fi #Таблица к внутренним ресурсам# оно же правило через который nat куда ходить ipfw table 12 flushipfw table 12 add 195.14.0.0/16ipfw table 12 add 85.21.79.0/24ipfw table 12 add 10.1.0.0/16ipfw table 12 add 10.2.0.0/15ipfw table 12 add 10.4.0.0/14ipfw table 12 add 10.8.0.0/13ipfw table 12 add 10.16.0.0/12ipfw table 12 add 10.32.0.0/11ipfw table 12 add 10.64.0.0/10ipfw table 12 add 10.128.0.0/9ipfw table 12 add 83.102.232.0/24ipfw table 12 add 85.21.90.0/24ipfw table 12 add 85.21.52.0/24ipfw table 12 add 83.102.0.0/24ipfw table 12 add 78.107.69.98 ipfw delete 48ipfw delete 49ipfw delete 50ipfw delete 51ipfw delete 52  # первый Nat до локалкиipfw add 48 divert 8667 ip from table\(12\) to 192.168.0.0/24 in via nfe0ipfw add 49 divert 8667 ip from 192.168.0.0/24 to table\(12\) out via nfe0 # второй nat до инетаipfw add 51 divert 8668 ip from any to 192.168.0.0/24 in via ng0ipfw add 52 divert 8668 ip from 192.168.0.0/24 to not table\(12\) out via ng0 sleep 1# Стартуем демоны первый и второй/sbin/natd -n ng0/sbin/natd -p 8667 -P /var/run/natd2.pid -n nfe0