7 мая 2009 г. MPD PPTP FreeBSD VPN

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 :)

Комментарии

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

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

Похожая проблема, но не получается получить настройки по 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 отдается... :(

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

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

ifconfig_sk1="DHCP"
ifconfig_sk1="ether 00:11:95:1d:2e:02"

2.

# ifconfig sk1 ether 00:11:95:1d:2e:02

3.

# dhclient -d sk1

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

Черный ягуар 2 февраля 2010 г. 8:50

Вообще, столкнулся с ситуацией, когда невозможно было сделать 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% - имя нужного нам сетевого интерфейса.

А где мы говорим, что именно rl1 смотрит в нет???

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

Думаю сменить мак-адрес и указать DHCP аналогично как тут

Для того чтобы не менять каждый раз, я добавил в /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"

Раньше работало

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

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

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

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

чисто для сведения, чтобы не городить в файрволле странных конструкций
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*

Оставьте свой комментарий

Markdown