• Информация
  • Теги

  • Firefox
    в
    картинках,сборка
    Mozilla
    Firefox,руководство
    пользователя

    <

    Облако тегов требует для просмотра Flash Player 9 или выше.

  • Статистика
Главная - FreeBSD - Настройка VPN для Beeline

Настройка VPN для Beeline

by Автор - ДатаКомментарии

Настройка VPN Beeline во FreeBSD

Как оказалось, подключение компьютера с FreeBSD на борту к провайдеру Corbina / Beeline нетривиальная задача. Ни одно из найденных в сети руководств не помогло в этом деле. Скорее всего, по причине изменения версий как ОС, так и PPP клиента MPD. В результате нам пришлось разбираться с этим самим, что и вылилось в данную статью.

Была установлена свежая система FreeBSD 8.2-RELEASE. Машина является роутером и имеет локальный IP 192.168.1.1
В качестве программы-клиента VPN выбрана MPD5:

Mpd is a netgraph(4) based implementation of the multi-link PPP protocol for FreeBSD. It is designed to be both fast and flexible. It handles configuration and negotiation in user land, while routing all data packets strictly in the kernel. It supports several of the numerous PPP sub-protocols and extensions, such as:
Multi-link PPP capability PAP, CHAP, MS-CHAP and EAP authentication PPP compression and encryption IPCP and IPV6CP parameter negotiation.

Для того, чтобы задействовать ядерный NAT, пересоберите ядро со следующими опциями:

  1. options IPFIREWALL
  2. options IPFIREWALL_VERBOSE 
  3. options IPFIREWALL_VERBOSE_LIMIT=50 
  4. options IPFIREWALL_FORWARD 
  5. options IPDIVERT
  6. options IPFIREWALL_NAT
  7. options LIBALIAS 
  8. options ROUTETABLES=2

В файл sysctl.conf добавляем

    net.inet.ip.fw.one_pass=1
    

Ставим MPD5:

  1. #cd /usr/ports/net/mpd5 && make install clean

Следующие файлы должны лежать в директории /usr/local/etc/mpd5/:
up.sh, down.sh, mpd.conf.

Содержимое файла up.sh:

    #!/bin/sh
    gw=`netstat -rn | awk '$1=="default"{print $2}'`
    route delete $4
    route add $4 $gw
    route delete default
    route add default $4
    echo $4  > /tmp/mpd_dr
    echo $gw > /tmp/mpd_gw
    sleep 20
    
    #Удаляем правило NAT для локалки
    ipfw delete 1000
    
    ###Rules for kernel NAT
    ipfw nat 2 config log if ng0 deny_in reset same_ports
    
    #Добавляем правило NAT через ng0
    ipfw add 1000 nat 2 ip from any to any via ng0
    
    #Пропиликаем "Ура!"
    (kldload speaker && /bin/echo -e "l2b.f+.p16a.c+.p" > /dev/speaker && kldunload speaker)&
    

Содержимое файла down.sh:

    #!/bin/sh
    dr=`cat /tmp/mpd_dr`
    gw=`cat /tmp/mpd_gw`
    route delete $dr
    route delete default
    route add default $gw
    rm -f /tmp/mpd_dr
    rm -f /tmp/mpd_gw
    
    #Удаляем NAT через ng0
    ipfw delete 1000
    
    #Возвращаем NAT в локалку Корбины
    ipfw add 1000 nat 1 ip from any to any via fxp0
    
    #Пропиликаем "Оторвалось!" 
    kldload speaker
    /bin/echo -e "gc.c8dee2" > /dev/speaker
    kldunload speaker
    

Содержимое файла mpd.conf:

    startup:
            #детальный лог без событий и пакетов 
            log +ALL -EVENTS -FRAME
            # configure mpd users
            set user <пользователь> <пароль> admin
            set user foo1 bar1
            # консоль доступна с любого IP (опасно, укажите свой IP!)
            set console self 0.0.0.0 5005
            #открыть консоль
            set console open
            #WEB-сервер доступен с любого IP (опасно, укажите свой IP!)
            set web self 0.0.0.0 5006
            #открыть WEB-сервер
            set web open
            
    #По-умолчанию подключение следующее:
    default:
    #       load Corbina_L2TP
            load Corbina_PPTP
    
    
    Corbina_L2TP:
            create bundle static L2TP
            set bundle disable compression
            set bundle disable round-robin
            set bundle disable encryption
            set bundle disable crypt-reqd
            set bundle disable bw-manage
            set bundle disable ipv6cp
            set bundle enable ipcp
            set ipcp no vjcomp
            set iface mtu 1460
            set iface idle 0
            set iface enable tcpmssfix
            set iface up-script /usr/local/etc/mpd5/up.sh
            set iface down-script /usr/local/etc/mpd5/down.sh
            create link static L2 l2tp
            set link action bundle L2TP
            set link latency 0
            #Пытаться связаться до опупенья        
            set link max-redial 0
            #Пауза между попытками поднять туннель, по рекомендации провайдера 
            set link redial-delay 60
            set link disable incoming acfcomp protocomp magicnum check-magic shortseq
            set link deny chap-msv2 chap-msv1 pap eap acfcomp protocomp shortseq
            set link accept chap-md5
            #После 10 секунд отсутствия активности проверить соединение LCP пакетами, 
            #повторять каждые 10 секунд. По истечении 75 секунд разорвать линк.
            set link keep-alive 10 75
    	#Здесь выбираем рабочий пир для вашей подсетки        
    	#set l2tp peer l2tp.corbina.net
            set l2tp peer tp.corbina.net
    	#set l2tp peer 85.21.0.255
    	#set l2tp peer tp.internet.beeline.ru
            set auth authname "<ВАШ ЛОГИН>"
            set auth password "<ВАШ ПАРОЛЬ>"
            open
    	
    	
    Corbina_PPTP:
            create bundle static PPTP
            set bundle disable compression
            set bundle disable round-robin
            set bundle disable encryption
            set bundle disable crypt-reqd
            set bundle disable bw-manage
            set bundle disable ipv6cp
            set bundle enable ipcp
            set ipcp no vjcomp
            set iface mtu 1460
            set iface idle 0
            set iface enable tcpmssfix
            set iface up-script /usr/local/etc/mpd5/up.sh
            set iface down-script /usr/local/etc/mpd5/down.sh
            create link static L1 pptp
            set link action bundle PPTP
            set link latency 0
            #Пытаться связаться до опупенья
            set link max-redial 0
            #Пауза между попытками поднять туннель, по рекомендации провайдера 
            set link redial-delay 60
            set link disable incoming acfcomp protocomp magicnum check-magic shortseq
            set link deny chap-msv2 chap-msv1 pap eap acfcomp protocomp shortseq
            set link accept chap-md5
            #После 10 секунд отсутствия активности проверить соединение LCP пакетами, 
            #повторять каждые 10 секунд. По истечении 75 секунд разорвать линк.
            set link keep-alive 10 75
            set pptp peer vpn.corbina.net
            set auth authname "<ВАШ ЛОГИН>"
            set auth password "<ВАШ ПАРОЛЬ>"
            open
    

Дать права на запуск скриптов:

  1. chmod +x /usr/local/etc/mpd5/*.sh

Следующие файлы должны лежать в директории /etc:
rc.conf, ipfw/firewall.sh.

Содержимое файла rc.conf, указанные строки обязательны для нашей сети, у вас могут быть и другие помимо них.

  1. synchronous_dhclient="YES" 
  2. defaultrouter="10.213.8.1"	#Здесь шлюз по умолчанию, можно узнать с помощью netstat -rn
  3. inetd_enable="YES"
  4. ifconfig_fxp0="dhcp"	#Сетевой интерфейс, подключенный к провайдеру.
  5. ifconfig_nfe0="inet 192.168.1.1 netmask 255.255.255.0"	#Сетевой интерфейс, подключенный  
  6. #к локальной сети
  7. firewall_enable="YES"	#правила из файла /etc/rc.firewall
  8. firewall_nat_enable="YES"	#Включаем ядерный NAT
  9. firewall_script="/etc/ipfw/firewall.sh"	#набор правил брандмауэра
  10. gateway_enable="YES"	#выступать в качестве шлюза
  11. firewall_nat_interface="fxp0"	#обозначаем, через какой интерфейс будем ходить в интернет
  12. mpd_enable="YES" #PPP клиент
  13. mpd_flags="-b"	#PPP клиент

Содержимое файла ipfw/firewall.sh.

  1. #!/bin/sh
  2. #set variables
  3. fwcmd="ipfw -q" 	#command ipfw 
  4. LanIf="nfe0"		#Interface LAN
  5. LanNet="192.168.0.0/16"		#LAN IP
  6. LanIp=`ifconfig nfe0 | grep inet | awk '{print $2}'`
  7. WanIf="fxp0"	#Interface WAN
  8. #определяем IP WAN
  9. WanIp=`ifconfig fxp0 | grep inet | awk '{print $2}'`
  10. ipfw -q -f flush		#Сбрасываем правила
  11. ${fwcmd} add 1 allow ip from any to any via lo0	#Loopback
  12. ${fwcmd} add 300 deny ip from any to 127.0.0.0/8 via ${WanIf}	#Loopback
  13. ${fwcmd} add 301 deny ip from 127.0.0.0/8 to any via ${WanIf}	#Loopback
  14. #Beeline! ${fwcmd} add 302 deny ip from any to 10.0.0.0/8 in via ${WanIf} #RFC 1918 private IP
  15. ${fwcmd} add 303 deny ip from any to 172.16.0.0/12 in via ${WanIf}	#RFC 1918 private IP
  16. ${fwcmd} add 304 deny ip from any to 192.168.0.0/16 in via ${WanIf} #RFC 1918 private IP
  17. ${fwcmd} add 305 deny ip from any to 0.0.0.0/8 in via ${WanIf}	#Loopback
  18. ${fwcmd} add 306 deny all from 169.254.0.0/16 to any in via ${WanIf} #DHCP auto-config
  19. ${fwcmd} add 307 deny all from 192.0.2.0/24 to any in via ${WanIf}   #reserved for docs
  20. ${fwcmd} add 308 deny all from 204.152.64.0/23 to any in via ${WanIf} #Sun cluster interconnect
  21. ${fwcmd} add 309 deny all from 224.0.0.0/3 to any in via ${WanIf}    #Class D, E multicast
  22. ${fwcmd} add 500 check-state	#check method keep-state
  23. ${fwcmd} add 600 allow all from any to me via ${LanIf}	#Пускаем на машину из локалки
  24. #NAT
  25. ${fwcmd} nat 1 config log if ${WanIf} deny_in reset same_ports
  26. ${fwcmd} add 1000 nat 1 ip from any to any via ${WanIf}
  27. ${fwcmd} add 1001 allow all from any to any #for NAT
  28. ${fwcmd} add 65000 deny ip from any to any		#The END.

WEB-интерфейс MPD открывается по адресу http://192.168.1.1:5006/
Подключение и отключение VPN производится нажатием ссылок [open] [close]