Вечер добрый :)
Я только начинаю осваивать все прелести фрихи и хотел бы узнать как совместить на одной машине mpd client и mpd server.
собсно нужно оное для сервачка, который будет коннектися к другому серваку на фри по средствам vpn, и будет раздавать инэт тоже по средствам vpn в маленькую офисную сеть из 5-6 компов. стандартная схема: инэт <-> фри <-> минисеть.
Первую часть постоавленной задачи я, можно сказать, выполнил: установил mpd-3.18_4 и настроил его как клиент, всё работает, пинги проходят и на ftp.freebsd.org тоже получается поиметь доступ. вот файлы конфигурации:
mpd.confdefault:
load vpndefault:
load vpnvpn:
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 papset 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-e40set bundle enable crypt-reqd
set ccp yes mpp-stateless
openmpd.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=$1if ! test -f $ROUTE ; then
echo Cannot find program route.
exit 1
fiCAT="/bin/cat"
if ! test -f $CAT ; then
echo Cannot find program cat.
exit 1
fiif ! test -f $NETSTAT ; then
echo Cannot find program netstat.
exit 1
fiGATEWAY=`$NETSTAT -rn |grep UG|tail -1|awk ' { print $2}'`
if test -z "$GATEWAY" ; then
echo Cannot find any default gateway
exit 1
fiVPNSERVER=`$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
fiCAT="/bin/cat"
if ! test -f $CAT ; then
echo Cannot find program cat.
exit 1
fiif ! test -f $NETSTAT ; then
echo Cannot find program netstat.
exit 1
fiGATEWAY=`$NETSTAT -rn |grep UG|tail -1|awk ' { print $2}'`
if test -z "$GATEWAY" ; then
echo Cannot find any default gateway
exit 1
fiVPNSERVER=`$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 $GATEWAYipfw пока не настраивал, а ядро соответственно скомпилено с 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 0xff000000ifconfig после подключения:
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.conf примерно следующее:
pptp0:
new -i ng0 pptp_link pptp_link
set ipcp ranges 10.45.0.1/32 10.45.0.2/32
load pptp_standartpptp_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 мучать не стал, проблемки с логикой возникли у меня....
В первую очередь обратите внимание на опции:
set pptp enable/disable incoming - разрешает/запрещает входящие соединения,
set pptp enable/disable originate - разрешает/запрещает входящие соединения,
в этом ключ, в остальном можно разобраться отдельно.
>set pptp enable/disable originate - разрешает/запрещает входящие соединения,Поправка
>set pptp enable/disable originate - разрешает/запрещает входящие соединения,Поправка
set pptp enable/disable originate - разрешает/запрещает _исходящие_ соединения,
получается что и исходящее и входящие подключения будут проходить через ng0? или же для сервера свой интерфейс, для клиента свой?кстати файл с клиентами и их паролями? тоже ведь нужен? подскажите как он должен выглядеть
и ещё, не совсем понимаю что значит вот это: set ipcp ranges 10.45.0.1/32 10.45.0.2/32
>получается что и исходящее и входящие подключения будут проходить через 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, там довольно доходчиво всё разжёвано.
народ, снова выручайте :) значит разобрался я как совместить и мпд клиент и сервер
вот что выдаёт 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, хотя с самого сервера пинг проходит...
что нужно сделать, подскажите, а то я уже мосг сломал себе =(
>
>после подключения клиент не может поиметь инэт, даже не пингуется www.ru, хотя
>с самого сервера пинг проходит...
>
>что нужно сделать, подскажите, а то я уже мосг сломал себе =(
>
> inet 10.10.1.1 --> 192.168.10.10 netmask 0xffffffffIPшники серые, значит нужен нат...
Если у Вас 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 от клиентов на внутреннем интерфейсе.
>2. подключается к первому серверу с внешнего интерфейса по VPN и сам
>принимает подключения VPN от клиентов на внутреннем интерфейсе.вот и у меня именно такой случай, подключается к вышестоящему серваку через rl0, а сам принимает подключения через re0.
но как сделать чтобы у клиентов после этоо был инэт не могу понять...только начинаю разбираться в *никсах...
вы говорите динамический нат, у меня есть скрипты, срабатывающие при поднятии интерфеса ng0 (он отвечает за подключение к вышестоящему впн), я их уже размещал в первом сообщении трэда. подскажите пожалуйста, что же всё-таки нужно предпринять?
>>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
>[оверквотинг удален]
>>размещал в первом сообщении трэда. подскажите пожалуйста, что же всё-таки нужно
>>предпринять?
>
>В скрипте попробовать добавить:
>/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-шки, + помог нат!
>:)Не поделитесь решением?
>Не поделитесь решением?исправил подсети:
было
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
маршрутизация?
если до как
>теперь появилась другая проблема, как пустить этих же клиентов в сеть провайдера
>192.168.151.0/24 как я и указывал ранее у сервера ip 192.168.151.190
>маршрутизация?
>если до какНастроить второй NAT на интерфейсе, находящемся в сети провайдера (192.168.151.190). Больше ничего...
>Настроить второй NAT на интерфейсе, находящемся в сети провайдера (192.168.151.190). Больше ничего...Так Ведь я до этого в rc.conf уже указал, что все пакеты заварачиваются на адрес 87.236.42.142
natd_flags="-a 87.236.42.142"а если эту строчку убрать то нат перестаёт правильно работать.
>
>>Настроить второй 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сделал, всё работает, только клиенты могут выходить в инэт без подключения впн, буду дорабатывать данную схему под мои нужды.