Как поднять 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