← Все записи

FreeBSD. Использование mpd5 в качестве vpn-клиента (pptp)

vpn

После танцев с бубном с pptpclient, особенно напрягала проблема с “/bin/ip not found”, я всётаки решил использовать в качестве vpn-клиента mpd5! :)

Предыстория

У меня не было интернета, поэтому я скачивал пакеты с ftp.freebsd.org (с другой машины), клал на флешку и устанавливал на “сервер” которому нужен был vpn-клиент для работы в интернете.

Итак, действующие лица:

  • На стороне клиента (то есть меня)
    • Лептоп с Windows XP
    • Сервер с FreeBSD 7.1
      • Сетевой интерфейс rl1 для подключения к интернету
      • Сетевой интерфейс rl0 для подключения к локальной сети (нам это не интересно)
  • На стороне сервера (Провайдер AirNet)
    • FreeBSD 5.2.1 (SPARC)
    • DHCP-сервер
    • Gateway: 192.168.128.33
    • DNS: 192.168.128.33
    • VPN: vpn.airnet.lan (192.168.128.7)

При подключении в Windows наблюдаем следующую картину:

  • Используется “Безопасный пароль”
  • Шифрование отключено

windows-vpn

Установка mpd5

Заходим на ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.1-release/ и на http://www.freshports.org/ (для поиска пакетов).

  1. Качаем mpd (net/mpd-5.1_1.tbz)
  2. Качаем expat (textproc/expat-2.0.1.tbz)
  3. Качаем libpdel (devel/libpdel-0.5.3_4.tbz)

Сливаем все на флешку и монтируем ее во фрю:

# mount_msdosfs /dev/da0s1 /mnt

Устанавливаем мопед

# pkg_add  mpd-5.1_1.tbz

Остальные пакеты (зависимости) сами поставятся, если они находятся на одном уровне с mpd-5.1_1.tbz

Вы можете скачать все эти пакеты с моего сайта: mpd-51_1, expat-201 и libpdel-053_4

Настройка pptp_client

Отредактируем /etc/rc.conf до вида:


# Запускаем при загрузке MPD
mpd_enable="YES"
# Для интерфейса rl1 используем DHCP
ifconfig_rl1="DHCP"

Отредактируем файл /etc/resolv.conf и добавим DNS-адреса


nameserver 192.168.128.33

Отредактируем файл /usr/local/etc/mpd5/mpd.conf до вида:


startup:

default:
    load pptp_client

pptp_client:
    create bundle static B1
    set iface route default
    set ipcp ranges 0.0.0.0/0 0.0.0.0/0

    create link static L1 pptp
    set link action bundle B1
    set auth authname "ЛОГИН"
    set auth password "ПАРОЛЬ"
    set link max-redial 0
    set link mtu 1460
    set link keep-alive 20 75
    set pptp peer vpn.airnet.lan
    set pptp disable windowing
    open

Для дополнительной информации о коммандах и опциях обращайтесь к оф. страницам руководства.

Для рестарта DHCP-клиента используйте: # dhclient -d rl1

Теперь у вас должно все заработать! Если нет, пишите камменты :)

А теперь, продолжение моей истории…

Конфиг был полностью рабочий, однако подключение не удавалось создать!


Multi-link PPP daemon for FreeBSD

process 1080 started, version 5.1 (root@freebsd.org 18:20  9-Sep-2008)
[B1] Bundle: Interface ng1 created
[L1] [L1] Link: OPEN event
[L1] LCP: Open event
[L1] LCP: state change Initial --> Starting
[L1] LCP: LayerStart
[L1] PPTP call successful
[L1] Link: UP event
[L1] Link: origination is local
[L1] LCP: Up event
[L1] LCP: state change Starting --> Req-Sent
[L1] LCP: SendConfigReq #1
[L1]   ACFCOMP
[L1]   PROTOCOMP
[L1]   ACCMAP 0x000a0000
[L1]   MRU 1500
[L1]   MAGICNUM a04506b0
[L1] LCP: rec'd Configure Ack #1 (Req-Sent)
[L1]   ACFCOMP
[L1]   PROTOCOMP
[L1]   ACCMAP 0x000a0000
[L1]   MRU 1500
[L1]   MAGICNUM a04506b0
[L1] LCP: state change Req-Sent --> Ack-Rcvd
[L1] LCP: state change Ack-Rcvd --> Req-Sent
[L1] LCP: SendConfigReq #2
[L1]   ACFCOMP
[L1]   PROTOCOMP
[L1]   ACCMAP 0x000a0000
[L1]   MRU 1500
[L1]   MAGICNUM a04506b0
[L1] LCP: rec'd Configure Ack #2 (Req-Sent)
[L1]   ACFCOMP
[L1]   PROTOCOMP
[L1]   ACCMAP 0x000a0000
[L1]   MRU 1500
[L1]   MAGICNUM a04506b0
[L1] LCP: state change Req-Sent --> Ack-Rcvd
[L1] LCP: rec'd Configure Request #148 (Ack-Rcvd)
[L1]   ACFCOMP
[L1]   PROTOCOMP
[L1]   MRU 1500
[L1]   MAGICNUM 4a711d50
[L1]   AUTHPROTO CHAP MSOFTv2
[L1] LCP: SendConfigAck #148
[L1]   ACFCOMP
[L1]   PROTOCOMP
[L1]   MRU 1500
[L1]   MAGICNUM 4a711d50
[L1]   AUTHPROTO CHAP MSOFTv2
[L1] LCP: state change Ack-Rcvd --> Opened
[L1] LCP: auth: peer wants CHAP, I want nothing
[L1] LCP: LayerUp
[L1] CHAP: rec'd CHALLENGE #1 len: 21
[L1]   Name: ""
[L1] CHAP: Using authname "andreevmv"
[L1] CHAP: sending RESPONSE #1 len: 63
[L1] CHAP: sending RESPONSE #1 len: 63
[L1] CHAP: rec'd FAILURE #1 len: 31
[L1]   MESG: E=691 R=0 M=Login incorrect
[L1] LCP: authorization failed
[L1] LCP: parameter negotiation failed
[L1] LCP: state change Opened --> Stopping
...

Была найдена проблема, провайдер не выдавал нормальный IP-адрес по DHCP оборудованию, не закрепленному за пользователем. То есть моя сетевая карта на сервере являлась не зарегистрированной, а карта на лептопе - являлась зарегистрированной в биллинговой системе.

Было тут же найдено решение, использовать поддельный MAC-адрес от сетевой карты лептопа!

Подменяем MAC на сервере:


# ifconfig rl1 ether 00:00:00:00:00:00

И получилось у нас сменить MAC и получить по DHCP нормальный IP-адрес:


...
rl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8<VLAN_MTU>
    ether 00:00:00:00:00:00
    inet 192.168.135.18 netmask 0xffff0000 broadcast 192.168.255.255
    media: Ethernet autoselect (none)
    status: no carrier
...

Для того чтобы не менять каждый раз, я добавил в /etc/rc.conf:


# Для rl1 подменяем MAC-адрес
ifconfig_rl1="ether 00:00:00:00:00:00"

После чего еще раз попробовал подсоединится по vpn:

# mpd5

И у меня получилось авторизоваться и получить внешний IP-адрес!


...
[L1] CHAP: Using authname "andreevmv"
[L1] CHAP: sending RESPONSE #1 len: 63
[L1] CHAP: rec'd SUCCESS #1 len: 46
[L1]   MESG: S=7E9FBD94F23E66ED6EF6E8105664B9F8A20982C8
[L1] LCP: authorization successful
...
[B1] IPCP: LayerUp
[B1]   172.16.4.41 -> 93.92.200.24
[B1] IFACE: Up event
...

Наконец-то получилось поднять интерфейс ng1 и выйти в интернет!


...
rl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8<VLAN_MTU>
    ether 00:00:00:00:00:00
    inet 192.168.135.18 netmask 0xffff0000 broadcast 192.168.255.255
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active
...
ng0: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1500
ng1: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1460
    inet 172.16.4.41 --> 93.92.200.20 netmask 0xffffffff 

Мои благодарности:

  • Родному форуму Pyha.ru, а так же phpdude за поддержание дискуссии :)
  • Форуму провайдера AirNet (к сожалению форум доступен только изнутри http://forum.airnet.lan/showthread.php?t=1759) и конкретно пользователям CoDe и Technogen за помощь в поиске бага!
  • Пользователю alexshur за провокации в сторону mpd5 :)

Комментарии 16

Архив обсуждения. Новые комментарии закрыты.

dallone

Однако. Я почему-то всегда был уверен что к vpn можно средствами “по умолчанию” во FreeBSD приконнектится. Век живи век учись :)

adw0rd

Ну VPN это не обязаловка, даже в *ubunta, которые очень дружелюбны - нет pptp клиента :)

paulpred

Похожая проблема, но не получается получить настройки по dhcp при подмене mac-адреса:
rc.conf:

ifconfig_sk0="inet 10.55.10.201 netmask 255.255.255.0"
ifconfig_sk1="DHCP"
ifconfig_sk1="ether 00:11:95:1d:2e:02"

когда вставляю “родную” сетевуху, dhcp отдается… :(

adw0rd

Может подменять надо раньше чем подключатся к DHCP?
Попробуйте:

  1. Закомментите и в ребут

ifconfig_sk1="DHCP"
ifconfig_sk1="ether 00:11:95:1d:2e:02"
# ifconfig sk1 ether 00:11:95:1d:2e:02
# dhclient -d sk1
Roys

ng0: flags=88d1 metric 0 mtu 1456
inet 62.33.239.136 –> 172.18.100.1 netmask 0xffffffff
Коннект есть. Сессия весит около 1 мин, потом рвется, внешнея сеть не пингуется. МОжет маршрут нужен?

Черный ягуар

Вообще, столкнулся с ситуацией, когда невозможно было сделать ifconfig ether из rc-скрипта. Дело в том, что сеть (mpd5) поднималась быстрее, чем менялся MAC карты.
Выход:
touch /etc/start_if.%ifname%
echo ifconfig %ifname% ether 00:11:22:33:44:55 >/etc/start_if.%ifname%

где %ifname% - имя нужного нам сетевого интерфейса.

alex230103

Спасибо огромное !!!!!))))
неделю мучился и твой конфиг оказался 100% рабочий !!!

tehnikpc@ukr.net

Для того чтобы не менять каждый раз, я добавил в /etc/rc.conf:
# Для rl1 подменяем MAC-адрес
ifconfig_rl1="ether 00:00:00:00:00:00"

Не сработает только через alias:
ifconfig_r11_alias0=“ether 00:00:00:00:00:00”

dtulyakov

есть такая штука, называется ман так вот - man dhclient.conf
и там:
send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;

Morgan

Здравствуйте, а можно ли в freebsd подключить 2 параллельных vpn соединения?

adw0rd

Можно, разброс трафика можно сделать через ipfw, почитайте про шейпинг

BSD kill Live

Хорошая статья третий день ищу чтото подобное

Alex Keda

чисто для сведения, чтобы не городить в файрволле странных конструкций
00900 0 0 allow tcp from any to any via ng*
01000 10 1060 allow udp from any to any via ng*
01100 33 2604 allow icmp from any to any via ng*
01200 0 0 allow ip from any to any via ng*