URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 76186
[ Назад ]

Исходное сообщение
"mpd client + mpd server FREEBSD"

Отправлено MetallisT , 11-Сен-07 17:39 
Вечер добрый :)
Я только начинаю осваивать все прелести фрихи и хотел бы узнать как совместить на одной машине mpd client и mpd server.
собсно нужно оное для сервачка, который будет коннектися к другому серваку на фри по средствам vpn, и будет раздавать инэт тоже по средствам vpn в маленькую офисную сеть из 5-6 компов. стандартная схема: инэт <-> фри <-> минисеть.
Первую часть постоавленной задачи я, можно сказать, выполнил: установил mpd-3.18_4 и настроил его как клиент, всё работает, пинги проходят и на ftp.freebsd.org тоже получается поиметь доступ. вот файлы конфигурации:
mpd.conf

default:
    load vpn

default:
    load vpn

vpn:
    new -i ng0 vpn vpn
    set iface idle 0
        set iface up-script /usr/local/etc/mpd/vpn-up.sh
    set iface down-script /usr/local/etc/mpd/vpn-down.sh
    set bundle disable multilink
    set bundle authname "_USERNAME_"
    set bundle password "_PASSWORD_"
    set link yes acfcomp protocomp
    set link disable chap pap
    set link accept chap pap

    set link enable no-orig-auth
    set link keep-alive 10 75
    set ipcp yes vjcomp
#    set bundle enable compression закоментил компрессию. или она нужна?
    set ccp yes mppc
    set ccp yes mpp-e40

    set bundle enable crypt-reqd
        set ccp yes mpp-stateless
    open

mpd.links

vpn:
        set link type pptp
        set pptp self 192.168.151.190
        set pptp peer 192.168.151.1
    set pptp enable originate incoming outcall

файлы vpn-up.sh

#!/bin/sh

  ROUTE="/sbin/route"
  NETSTAT="/usr/bin/netstat"
  LINKFILE="/usr/local/etc/mpd/mpd.links"
  IFACE=$1

  if ! test -f $ROUTE ; then
    echo Cannot find program route.
    exit 1
  fi

   CAT="/bin/cat"

  if ! test -f $CAT ; then
    echo Cannot find program cat.
    exit 1
  fi

  if ! test -f $NETSTAT ; then
    echo Cannot find program netstat.
    exit 1
  fi

    GATEWAY=`$NETSTAT -rn |grep UG|tail -1|awk ' { print $2}'`
    
  if test -z "$GATEWAY" ; then
    echo Cannot find any default gateway
    exit 1
  fi

      VPNSERVER=`$CAT $LINKFILE |grep peer|tail -1|awk ' { print $4}'`

  if test -z "$VPNSERVER" ; then
    echo Cannot find vpn server
    exit;
  fi

    $ROUTE delete $VPNSERVER
    $ROUTE add $VPNSERVER $GATEWAY
    $ROUTE delete default
    $ROUTE add default -interface $IFACE

и vpn-down.sh

#!/bin/sh

  ROUTE="/sbin/route"
  NETSTAT="/usr/bin/netstat"
  LINKFILE="/usr/local/etc/mpd/mpd.links"

  if ! test -f $ROUTE ; then
    echo Cannot find program route.
    exit 1
  fi

   CAT="/bin/cat"

  if ! test -f $CAT ; then
    echo Cannot find program cat.
    exit 1
  fi

  if ! test -f $NETSTAT ; then
    echo Cannot find program netstat.
    exit 1
  fi

        GATEWAY=`$NETSTAT -rn |grep UG|tail -1|awk ' { print $2}'`

  if test -z "$GATEWAY" ; then
    echo Cannot find any default gateway
    exit 1
  fi

        VPNSERVER=`$CAT $LINKFILE |grep peer|tail -1|awk ' { print $4}'`

  if test -z "$VPNSERVER" ; then
    echo Cannot find vpn server
    exit;
  fi

    $ROUTE delete $VPNSERVER
    $ROUTE delete default
    $ROUTE add default $GATEWAY

ipfw пока не настраивал, а ядро соответственно скомпилено с FIREWALL_DEFAULT_TO_ACCEPT.

на машине стоит две сетевухи,вторая пока не включена, вот ifconfig до включения mpd:

re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 #внутренний iface
        options=18<VLAN_MTU,VLAN_HWTAGGING>
        inet 10.10.1.1 netmask 0xffffff00 broadcast 10.10.1.255
        ether 00:13:46:3b:c6:eb
        media: Ethernet autoselect (none)
        status: no carrier
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 #внешний iface
        options=8<VLAN_MTU>
        inet 192.168.151.190 netmask 0xffffff00 broadcast 192.168.151.255
        ether 00:16:ec:f4:ea:6f
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000

ifconfig после подключения:

re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=18<VLAN_MTU,VLAN_HWTAGGING>
        inet 10.10.1.1 netmask 0xffffff00 broadcast 10.10.1.255
        ether 00:13:46:3b:c6:eb
        media: Ethernet autoselect (none)
        status: no carrier
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 192.168.151.190 netmask 0xffffff00 broadcast 192.168.151.255
        ether 00:16:ec:f4:ea:6f
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1492
        inet 87.236.42.9 --> 87.236.42.1 netmask 0xffffffff


собсно сам вопрос: каким образом можно и нужно :) совместить клиент и сервер чтобы машины в минисети могли свободно пользоваться инэтом?


Содержание

Сообщения в этом обсуждении
"mpd client + mpd server FREEBSD"
Отправлено smb , 11-Сен-07 23:43 
Не в минисеть, а в локалке, ЛВС по-научному.

Требуется в mpd.conf примерно следующее:

pptp0:
    new -i ng0 pptp_link pptp_link
    set ipcp ranges 10.45.0.1/32 10.45.0.2/32
    load pptp_standart

pptp_standart:
    set iface disable on-demand
    set bundle enable multilink
    set link yes acfcomp protocomp
    set link no pap
    set link enable chap
    set link keep-alive 60 180
    set ipcp no vjcomp
    set iface enable proxy-arp
    set bundle disable compression
    set bundle disable crypt-reqd
    set pptp enable incoming
    set pptp disable originate
    set iface mtu 1500
    set link mtu 1500

(более точное объяснение всех параметров - см. ман/фак). Ключевые - pap+chap, proxy-arp, compression+crypt-reqd, ну и incoming, само собой.

Далее в mpd.links примерно следующее:

pptp_link:
    set phys type pptp
    set pptp self <local_phys_addr>

Впрочем, это еще не всё. Если чуть-чуть подумать мозгами, то очевидно, что не хватает NAT-а. ipnat в 7.0 приводил в LOR-у, пришлось юзать natd, заработал нормально. ng_nat мучать не стал, проблемки с логикой возникли у меня....


"mpd client + mpd server FREEBSD"
Отправлено www2 , 12-Сен-07 09:47 
В первую очередь обратите внимание на опции:
set pptp enable/disable incoming - разрешает/запрещает входящие соединения,
set pptp enable/disable originate - разрешает/запрещает входящие соединения,
в этом ключ, в остальном можно разобраться отдельно.

"mpd client + mpd server FREEBSD"
Отправлено www2 , 12-Сен-07 09:48 
>set pptp enable/disable originate - разрешает/запрещает входящие соединения,

Поправка


"mpd client + mpd server FREEBSD"
Отправлено www2 , 12-Сен-07 09:49 
>set pptp enable/disable originate - разрешает/запрещает входящие соединения,

Поправка

set pptp enable/disable originate - разрешает/запрещает _исходящие_ соединения,


"mpd client + mpd server FREEBSD"
Отправлено MetallisT , 12-Сен-07 21:42 
получается что и исходящее и входящие подключения будут проходить через ng0? или же для сервера свой интерфейс, для клиента свой?

кстати файл с клиентами и их паролями? тоже ведь нужен? подскажите как он должен выглядеть

и ещё, не совсем понимаю что значит вот это: set ipcp ranges 10.45.0.1/32 10.45.0.2/32


"mpd client + mpd server FREEBSD"
Отправлено www2 , 13-Сен-07 08:22 
>получается что и исходящее и входящие подключения будут проходить через ng0? или
>же для сервера свой интерфейс, для клиента свой?

У клиента свой интерфейс, у сервера свой.

>кстати файл с клиентами и их паролями? тоже ведь нужен? подскажите как
>он должен выглядеть

Файл с паролями нужен для сервера, клиент использует опции:
set bundle authname "login"
set bundle password "password"

Файл паролей имеет такой вид:
#имя пароль адрес
login1 passw0rd 192.168.1.33
user2 p@ssword 192.168.1.128/25
user3 pa$$word *

Первому пользователю будет разрешено подключаться только с указанного адреса,
второму - из указанной подсети, третьему - откуда угодно.

>и ещё, не совсем понимаю что значит вот это: set ipcp ranges
>10.45.0.1/32 10.45.0.2/32

Это соответственно адрес свой и удалённого хоста в тунеле. Масками можно варьировать допустимые адреса, если серверу и клиенту не удастся согласовать адреса внутри туннелей, соединение не будет установлено. Поэтому обычно эти настройки указываются только у сервера, а клиент их в таком случае просто примет.

Почитайте документацию на mpd в формате html, она идёт в комплекте с mpd, там довольно доходчиво всё разжёвано.


"mpd client + mpd server FREEBSD"
Отправлено MetallisT , 24-Сен-07 21:36 
народ, снова выручайте :) значит разобрался я как совместить и мпд клиент и сервер
вот что выдаёт ifconfig после загрузки фришки:

$ifconfig
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=18<VLAN_MTU,VLAN_HWTAGGING>
        inet 10.10.1.1 netmask 0xffffff00 broadcast 10.10.1.255
        ether 00:13:46:3b:c6:eb
        media: Ethernet autoselect (none)
        status: no carrier
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 192.168.151.190 netmask 0xffffff00 broadcast 192.168.151.255
        ether 00:16:ec:f4:ea:6f
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1492
        inet 87.236.42.5 --> 87.236.42.1 netmask 0xffffffff
ng1: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng2: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng3: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
$

ng0 - клиент, подключается к вышестоящему впн серверу, пинги проходят нормально

ng1-ng3 соответсвенно, интерфейсы на которые коннектятся клиенты, подключение удачно происходит и мы имеем после подключения клиента вот такой ifconfig:

$ifconfig
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=18<VLAN_MTU,VLAN_HWTAGGING>
        inet 10.10.1.1 netmask 0xffffff00 broadcast 10.10.1.255
        ether 00:13:46:3b:c6:eb
        media: Ethernet autoselect (none)
        status: no carrier
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 192.168.151.190 netmask 0xffffff00 broadcast 192.168.151.255
        ether 00:16:ec:f4:ea:6f
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1492
        inet 87.236.42.5 --> 87.236.42.1 netmask 0xffffffff
ng1: flags=8890<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1400
         inet 10.10.1.1 --> 192.168.10.10 netmask 0xffffffff
ng2: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng3: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
$

после подключения клиент не может поиметь инэт, даже не пингуется www.ru, хотя с самого сервера пинг проходит...

что нужно сделать, подскажите, а то я уже мосг сломал себе =(


"mpd client + mpd server FREEBSD"
Отправлено www2 , 25-Сен-07 07:22 
>
>после подключения клиент не может поиметь инэт, даже не пингуется www.ru, хотя
>с самого сервера пинг проходит...
>
>что нужно сделать, подскажите, а то я уже мосг сломал себе =(
>
>         inet 10.10.1.1 --> 192.168.10.10 netmask 0xffffffff

IPшники серые, значит нужен нат...

Если у Вас mpd версии до 4, то могу посоветовать поднять NAT динамически - из скриптов, которые вызываются при поднятии интерфейса:
set iface up-script script
set iface down-script script

А в скрипте уже прописать запуск нового NAT-демона и добавление правил ipfw divert.

Если же у Вас версия 4, то почитайте http://mpd.sourceforge.net/doc/mpd.html, там NAT описан отдельно.

Честно говоря ни то, ни другое не делал. У меня два сервера с mpd 3.18 работают каскадом:
1. подключён к инету через сетевую карту, на интерфейсе настроен нат. На другом интерфейсе настроен VPN-сервер.
2. подключается к первому серверу с внешнего интерфейса по VPN и сам принимает подключения VPN от клиентов на внутреннем интерфейсе.


"mpd client + mpd server FREEBSD"
Отправлено MetallisT , 25-Сен-07 09:21 
>2. подключается к первому серверу с внешнего интерфейса по VPN и сам
>принимает подключения VPN от клиентов на внутреннем интерфейсе.

вот и у меня именно такой случай, подключается к вышестоящему серваку через rl0, а сам принимает подключения через re0.

но как сделать чтобы у клиентов после этоо был инэт не могу понять...только начинаю разбираться в *никсах...
вы говорите динамический нат, у меня есть скрипты, срабатывающие при поднятии интерфеса ng0 (он отвечает за подключение к вышестоящему впн), я их уже размещал в первом сообщении трэда. подскажите пожалуйста, что же всё-таки нужно предпринять?



"mpd client + mpd server FREEBSD"
Отправлено www2 , 25-Сен-07 10:41 
>>2. подключается к первому серверу с внешнего интерфейса по VPN и сам
>>принимает подключения VPN от клиентов на внутреннем интерфейсе.
>
>вот и у меня именно такой случай, подключается к вышестоящему серваку через
>rl0, а сам принимает подключения через re0.

У Вас не такой случай. В Вашем случае на одном VPN соединении реальные IP, а на других VPN - серые, Вам нужно включить NAT на VPN-интерфейсе. У меня же есть один реальный Ethernet интерфейс с интернетовским IP, на котором и включен NAT, а всё остальное делается при помощи маршрутизации через VPN-сединения...

>
>но как сделать чтобы у клиентов после этоо был инэт не могу
>понять...только начинаю разбираться в *никсах...
>вы говорите динамический нат, у меня есть скрипты, срабатывающие при поднятии интерфеса
>ng0 (он отвечает за подключение к вышестоящему впн), я их уже
>размещал в первом сообщении трэда. подскажите пожалуйста, что же всё-таки нужно
>предпринять?

В скрипте попробовать добавить:
/sbin/ipfw add 500 divert natd all from any to any via ${1}
/sbin/natd -n ${1} -s -m -p 500

Если не поможет или будет работать нестабильно, то единственный совет - попробовать mpd 4.3


"mpd client + mpd server FREEBSD"
Отправлено MetallisT , 26-Сен-07 13:42 
>[оверквотинг удален]
>>размещал в первом сообщении трэда. подскажите пожалуйста, что же всё-таки нужно
>>предпринять?
>
>В скрипте попробовать добавить:
>/sbin/ipfw add 500 divert natd all from any to any via ${1}
>
>/sbin/natd -n ${1} -s -m -p 500
>
>Если не поможет или будет работать нестабильно, то единственный совет - попробовать
>mpd 4.3

всем спасибо большое за помощь :)
разобрался!

кое-что не правильно было в  самом конфиге mpd-шки, + помог нат! :)


"mpd client + mpd server FREEBSD"
Отправлено www2 , 26-Сен-07 15:46 
>
>кое-что не правильно было в  самом конфиге mpd-шки, + помог нат!
>:)

Не поделитесь решением?


"mpd client + mpd server FREEBSD"
Отправлено MetallisT , 28-Сен-07 00:02 
>Не поделитесь решением?

исправил подсети:
было
ng1: flags=8890<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1400
inet 10.10.1.1 --> 192.168.10.10 netmask 0xffffffff
стало
ng1: flags=8890<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1400
inet 192.168.10.1 --> 192.168.10.10 netmask 0xfffffff

в правилах ipfw добавил

add divert natd ip from 192.168.10.0/24 to any recv ng1 xmit ng0
add divert natd ip from not 192.168.10.0/24 to 87.236.42.142 recv ng0   #87.236.42.142 - адрес получаемый при поднятии ng0

и ещё в rc.conf

natd_enable="YES"
natd_flags="-a 87.236.42.142"

после этого клиенты подключаются и имеют доступ к инэту!

теперь появилась другая проблема, как пустить этих же клиентов в сеть провайдера 192.168.151.0/24 как я и указывал ранее у сервера ip 192.168.151.190
маршрутизация?
если до как


"mpd client + mpd server FREEBSD"
Отправлено www2 , 28-Сен-07 07:00 
>теперь появилась другая проблема, как пустить этих же клиентов в сеть провайдера
>192.168.151.0/24 как я и указывал ранее у сервера ip 192.168.151.190
>маршрутизация?
>если до как

Настроить второй NAT на интерфейсе, находящемся в сети провайдера (192.168.151.190). Больше ничего...


"mpd client + mpd server FREEBSD"
Отправлено MetallisT , 28-Сен-07 12:02 

>Настроить второй NAT на интерфейсе, находящемся в сети провайдера (192.168.151.190). Больше ничего...

Так Ведь я до этого в rc.conf уже указал, что все пакеты заварачиваются на адрес 87.236.42.142
natd_flags="-a 87.236.42.142"

а если эту строчку убрать то нат перестаёт правильно работать.



"mpd client + mpd server FREEBSD"
Отправлено MetallisT , 28-Сен-07 14:37 
>
>>Настроить второй NAT на интерфейсе, находящемся в сети провайдера (192.168.151.190). Больше ничего...
>
>Так Ведь я до этого в rc.conf уже указал, что все пакеты
>заварачиваются на адрес 87.236.42.142
>natd_flags="-a 87.236.42.142"
>
>а если эту строчку убрать то нат перестаёт правильно работать.

нашёл статью практически удовлетворяющую моей ситуации :)буду пробовать...

http://www.opennet.me/base/net/freebsd_2x_natd.txt.html


"mpd client + mpd server FREEBSD"
Отправлено MetallisT , 28-Сен-07 14:39 

>нашёл статью практически удовлетворяющую моей ситуации :)буду пробовать...
>
>http://www.opennet.me/base/net/freebsd_2x_natd.txt.html

сделал, всё работает, только клиенты могут выходить в инэт без подключения впн, буду дорабатывать данную схему под мои нужды.