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


Автор admin

Сначала ставим mpd4
cd /usr/ports/net/mpd4 ; make install clean BATCH=yes

в ядре должно быть (на всяк пожарный все что может пригодиться, что не надо - вычеркиваем):
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_NETFLOW
options NETGRAPH_SOCKET
options NETGRAPH_TEE
#options NETGRAPH_MPPC_ENCRYPTION
#options NETGRAPH_MPPC_COMPRESSION
options NETGRAPH_BPF
options NETGRAPH_IFACE
options NETGRAPH_KSOCKET
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_TCPMSS
options NETGRAPH_VJC
options NETGRAPH_ONE2MANY
options NETGRAPH_RFC1490
options NETGRAPH_TTY
options 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 -rn
Routing tables

Internet:
Destination Gateway Flags Refs Use Netif Expire
default 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 windowing
l2tp:
set link type l2tp
set l2tp peer l2tp.corbina.net
set l2tp enable originate

Файл /usr/local/etc/mpd4/mpd.secret
ВАШ_ЛОГИН "ВАШ_ПАРОЛЬ"

Файл /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 $4
route add $4 $ip_def_gw
route delete default
route add default $4

#vpn.corbina.net
route add -net 85.21.0.0/24 $ip_def_gw
#l2tp.corbina.net
route 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_gw
done


### Добавляем маршруты до внутренних серверов
route add -host 85.21.0.36 $ip_def_gw
route add -host 85.21.79.2 $ip_def_gw
route add -host 85.21.79.25 $ip_def_gw
route add -host 85.21.79.100 $ip_def_gw
route add -host 195.14.50.16 $ip_def_gw
route add -host 195.14.50.21 $ip_def_gw # ftp4.ru.freebsd.org, cvsup6.ru.freebsd.org
route add -host 195.14.50.26 $ip_def_gw
route add -host 195.14.50.93 $ip_def_gw
route add -host 85.21.88.130 $ip_def_gw #corbina.tv
route add -host 85.21.79.12 $ip_def_gw #irc.corbina.ru
route add -host 10.2.3.14 $ip_def_gw
route add -host 10.187.11.1 $ip_def_gw
route add -host 10.187.58.100 $ip_def_gw
# dc.corbina.net
route add -host 85.21.79.38 $ip_def_gw
route 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_gw
done


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 $dr
route delete default
route add default $ip_def_gw
rm -f /var/dr
rm -f /tmp/ip_def_gw

Если необходимо сделать NAT для локалки, то в io-up.sh в конец добавляется следующий код:
В скрипте - nfe0 - интерфейс, смотрящий на корбину, rl0 - в локалку
192.168.0.0/24 - внутренняя подсеть
## Поднимает НАТ
#Чистим. Можно только в io-down.sh
if [ -f /var/run/natd.pid ] ; then
kill `cat /var/run/natd.pid`
fi
if [ -f /var/run/natd2.pid ] ; then
kill `cat /var/run/natd2.pid`
fi

#Таблица к внутренним ресурсам
# оно же правило через который nat куда ходить

ipfw table 12 flush
ipfw table 12 add 195.14.0.0/16
ipfw table 12 add 85.21.79.0/24
ipfw table 12 add 10.1.0.0/16
ipfw table 12 add 10.2.0.0/15
ipfw table 12 add 10.4.0.0/14
ipfw table 12 add 10.8.0.0/13
ipfw table 12 add 10.16.0.0/12
ipfw table 12 add 10.32.0.0/11
ipfw table 12 add 10.64.0.0/10
ipfw table 12 add 10.128.0.0/9
ipfw table 12 add 83.102.232.0/24
ipfw table 12 add 85.21.90.0/24
ipfw table 12 add 85.21.52.0/24
ipfw table 12 add 83.102.0.0/24
ipfw table 12 add 78.107.69.98

ipfw delete 48
ipfw delete 49
ipfw delete 50
ipfw delete 51
ipfw delete 52


# первый Nat до локалки
ipfw add 48 divert 8667 ip from table(12) to 192.168.0.0/24 in via nfe0
ipfw 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 ng0
ipfw 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

http://allwork.kiev.ua

Обновлено: 12.03.2015