FreeBSD. Использование mpd5 в качестве vpn-клиента (pptp)
После танцев с бубном с 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 наблюдаем следующую картину:
- Используется "Безопасный пароль"
- Шифрование отключено
Установка mpd5
Заходим на ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.1-release/ и на (для поиска пакетов).
- Качаем mpd (net/mpd-5.1_1.tbz)
- Качаем expat (textproc/expat-2.0.1.tbz)
- Качаем 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 (к сожалению форум доступен только изнутри и конкретно пользователям CoDe и Technogen за помощь в поиске бага!
- Пользователю alexshur за провокации в сторону mpd5 :)


Комментарии
Однако. Я почему-то всегда был уверен что к vpn можно средствами "по умолчанию" во FreeBSD приконнектится. Век живи век учись :)
Ну VPN это не обязаловка, даже в *ubunta, которые очень дружелюбны - нет pptp клиента :)
Похожая проблема, но не получается получить настройки по dhcp при подмене mac-адреса:
rc.conf:
когда вставляю "родную" сетевуху, dhcp отдается... :(
Может подменять надо раньше чем подключатся к DHCP?
Попробуйте:
2.
3.
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% - имя нужного нам сетевого интерфейса.
А где мы говорим, что именно rl1 смотрит в нет???
Спасибо огромное !!!!!))))
неделю мучился и твой конфиг оказался 100% рабочий !!!
Думаю сменить мак-адрес и указать DHCP аналогично как тут
Не сработает только через 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*
Оставьте свой комментарий