OpenVZ Forum


Home » International » Russian » ppp inside VPS
ppp inside VPS [message #6427] Sat, 16 September 2006 12:31 Go to next message
Rommer is currently offline  Rommer
Messages: 25
Registered: January 2006
Location: Belarus
Junior Member

Такое вообще возможно?
Делаю так:
[root@server]# modprobe ppp_generic
[root@server]# vzctl set 100 --devices c:108:0:rw --save
Setting devices
Saved parameters for VPS 100
[root@server]# vzctl enter 100
entered into VPS 100
-bash-3.00# mknod /dev/ppp c 108 0
-bash-3.00# pptp vpn-server.com
/usr/sbin/pppd: This system lacks kernel support for PPP.  This could be because
the PPP kernel module could not be loaded, or because PPP was not
included in the kernel configuration.  If PPP was included as a
module, try `/sbin/modprobe -v ppp'.  If that fails, check that
ppp.o exists in /lib/modules/`uname -r`/net.
See README.linux file in the ppp distribution for more details.

-bash-3.00# 

[Updated on: Sat, 16 September 2006 12:33]

Report message to a moderator

Re: ppp inside VPS [message #6448 is a reply to message #6427] Mon, 18 September 2006 08:36 Go to previous messageGo to next message
Vasily Tarasov is currently offline  Vasily Tarasov
Messages: 1345
Registered: January 2006
Senior Member
Пришлите прожалуйста strace pppd:
strace -f -o strace.out pppd 


Спасибо.

P.S. А также версию pppd.
Re: ppp inside VPS [message #6454 is a reply to message #6448] Mon, 18 September 2006 09:32 Go to previous messageGo to next message
Rommer is currently offline  Rommer
Messages: 25
Registered: January 2006
Location: Belarus
Junior Member

-bash-3.00# pppd --version
pppd version 2.4.3

strace в аттаче
  • Attachment: strace.out
    (Size: 9.20KB, Downloaded 1086 times)
Re: ppp inside VPS [message #6463 is a reply to message #6454] Mon, 18 September 2006 11:46 Go to previous messageGo to next message
Vasily Tarasov is currently offline  Vasily Tarasov
Messages: 1345
Registered: January 2006
Senior Member
Итак, у нас имеется:
16120 open("/dev/ppp", O_RDWR)          = -1 EPERM (Operation not permitted)

Вы упоминали, что права "дадены"... Хммм... Ну что ж пробую воспроизвести у себя:

2.6.16-026test017
template: fc4
pppd (fc4):
-bash-3.1# rpm -qa | grep ppp
ppp-2.4.2-7


Имею ту же ситпацию! Rolling Eyes
Смотрю в исходники ядра:

drivers/net/ppp_generic.c:
...
static int ppp_open(struct inode *inode, struct file *file)
{
        /*
         * This could (should?) be enforced by the permissions on /dev/ppp.
         */
        if (!capable(CAP_NET_ADMIN))
                return -EPERM;
        return 0;
}
...


Ага, значит VE нужны NET_ADMIN права. Останавливаю VE и даю ей эти права
(без перезапуска VE установка прав не работает)
(вообще это "грязный хак", и так делать не стоит. Smile. Это баг что проверяется NET_ADMIN, а не VE_NET_ADMIN, будем фиксить)
[hw]# vzctl stop 35
Stopping VPS ...
VPS was stopped
VPS is unmounted
[hw]# vzctl set 35  --capability net_admin:on --save
Saved parameters for VPS 35
[hw]# vzctl start 35
Starting VPS ...
VPS is mounted
Setting CPU units: 1000
Setting devices
VPS start in progress...
[root@dhcp0-174 tmp]# vzctl enter 35
entered into VPS 35
-bash-3.1# pppd
pppd     pppdump
-bash-3.1# pppd
-bash-3.1# echo $?
1
-bash-3.1# pppd
-bash-3.1# echo $?
1


Ага. Прошли куда-то дальше и там провалились...
Что же в логах:
-bash-3.1# cat /var/log/messages | grep pppd
Sep 18 00:57:42 hw pppd[17673]: pppd 2.4.2 started by root, uid 0
Sep 18 00:57:42 hw pppd[17673]: Couldn't set tty to PPP discipline: Invalid argument
Sep 18 00:57:42 hw pppd[17673]: Exit.
Sep 18 01:12:23 hw pppd[20190]: pppd 2.4.2 started by root, uid 0
Sep 18 01:12:23 hw pppd[20190]: Failed to open /dev/pts/0: Device or resource busy
Sep 18 01:12:23 hw pppd[20190]: Exit.


Установка некоего discipline фейлиться... Посмотрим что там в коде pppd:
    if (ioctl(tty_fd, TIOCSETD, &ppp_disc) < 0) {
        if ( ! ok_error (errno) ) {
            error("Couldn't set tty to PPP discipline: %m");
            return -1;
        }
    }


Между тем ppp_disc = N_PPP. Посмотрим кто его провайдит в ядре:

linuxsrc $ grep -r tty_register_ldisc ./ | grep N_PPP
./drivers/net/ppp_async.c:      err = tty_register_ldisc(N_PPP, &ppp_ldisc);
linuxsrc $ cat kernel-2.6.16-026test017-i686.config.ovz | grep CONFIG_PPP_ASYNC
CONFIG_PPP_ASYNC=m


Т.е. в OpenVZ он скомпилен модулем. Видимо он у нас на HW не загружен! Проверяем и загружаем:

[hw]# lsmod | grep ppp
ppp_generic            20620  0
slhc                    6240  1 ppp_generi
[root@dhcp0-174 ~]# modprobe ppp_async
[root@dhcp0-174 ~]# echo $?
0
[root@dhcp0-174 ~]# lsmod | grep ppp
ppp_async               8960  0
crc_ccitt               2048  1 ppp_async
ppp_generic            20620  1 ppp_async
slhc                    6240  1 ppp_generic


Отлично пробуем сызнова =)

-bash-3.1# pppd
-bash-3.1# echo $?
1
-bash-3.1# tail -3 /var/log/messages
Sep 18 01:59:15 dhcp0-174 pppd[25632]: pppd 2.4.2 started by root, uid 0
Sep 18 01:59:15 dhcp0-174 pppd[25632]: Couldn't create new ppp unit: Operation not permitted
Sep 18 01:59:15 dhcp0-174 pppd[25632]: Exit.


Значит приключения не кончаются! =)
strace даёт:

25784 ioctl(10, PPPIOCNEWUNIT, 0x80083c08) = -1 EPERM (Operation not permitted)


Между тем в логаз на ноде появилось:
PPP: couldn't register device ppp0 (-1)


что соответствует следующему в ядре

        ret = register_netdev(dev);
        if (ret != 0) {
                printk(KERN_ERR "PPP: couldn't register device %s (%d)\n",
                       dev->name, ret);
                goto out2;
        }



значит провалились в register_netdev()....
Смотря дальше по коду попадаем в функцию register_netdevice, которая проверяет следющеее:
        ret = -EPERM;
        if (!ve_is_super(get_exec_env()) && ve_is_dev_movable(dev))
                goto out;

Т.е. зарегестрировать net_devive из VE можно только, если он в списке так называемых "movable". К ним относится например: tun, loopback, ...
Почему не относится ppp? Очень просто - это баг! Будем фиксить.

В результате ответ на ваш вопрос
Quote:

Такое вообще возможно?

Пока нет! Rolling Eyes
Пока нет. Сейчас зафайлю баг и в ближайшее вермя профикшу.


Огромное вам спасибо,
за обнаружение!
Re: ppp inside VPS [message #6464 is a reply to message #6463] Mon, 18 September 2006 11:58 Go to previous messageGo to next message
Vasily Tarasov is currently offline  Vasily Tarasov
Messages: 1345
Registered: January 2006
Senior Member
Если хотите проставьте себя в CC в bugzille чтобы следить за прогрессов в исправлении bugа:
http://bugzilla.openvz.org/show_bug.cgi?id=268

Ещё раз спасибо.
Re: ppp inside VPS [message #6469 is a reply to message #6427] Mon, 18 September 2006 12:36 Go to previous messageGo to next message
Rommer is currently offline  Rommer
Messages: 25
Registered: January 2006
Location: Belarus
Junior Member

Спасибо.
В CC себя добавил. Буду ждать.
Re: ppp inside VPS [message #6689 is a reply to message #6427] Thu, 21 September 2006 11:03 Go to previous messageGo to next message
northwood is currently offline  northwood
Messages: 4
Registered: September 2006
Junior Member
Столкнулся с вышеописанной проблемой, с нетерпением жду решения Rolling Eyes
Re: ppp inside VPS [message #6690 is a reply to message #6689] Thu, 21 September 2006 11:07 Go to previous messageGo to next message
Vasily Tarasov is currently offline  Vasily Tarasov
Messages: 1345
Registered: January 2006
Senior Member
В принципе патч уже в багзилле - если хотите скомпильте ядро сами [2.6.16].
Re: ppp inside VPS [message #6691 is a reply to message #6427] Thu, 21 September 2006 11:29 Go to previous messageGo to next message
Rommer is currently offline  Rommer
Messages: 25
Registered: January 2006
Location: Belarus
Junior Member

А можно сделать бэкпорт патча в стабильную ветку?
Или это только принципиально в test'е?
Re: ppp inside VPS [message #6692 is a reply to message #6691] Thu, 21 September 2006 11:42 Go to previous messageGo to next message
Vasily Tarasov is currently offline  Vasily Tarasov
Messages: 1345
Registered: January 2006
Senior Member
Когда гуру проревьювят патч для 2.6.16 будут и backport'ы. Smile
Re: ppp inside VPS [message #6695 is a reply to message #6427] Thu, 21 September 2006 12:23 Go to previous messageGo to next message
northwood is currently offline  northwood
Messages: 4
Registered: September 2006
Junior Member
Не могу понять где ошибка Sad

наложил patch-026test015-combined на ванильное ядро 2.6.16 и патч из багзиллы (http://bugzilla.openvz.org/attachment.cgi?id=159)
все прошло без ошибок

ppp в ядре собран модулями и подгружен на ноде

#lsmod
Module Size Used by
...
pppoe 14336 0
pppox 4368 1 pppoe
ppp_mppe 7944 0
ppp_generic 23840 3 pppoe,pppox,ppp_mppe
...

собрал ppp-2.4.3 (система gentoo x86_64) без ошибок

при запуске pppd выдает ту же ошибку
...
24023 open("/dev/ppp", O_RDWR) = -1 EACCES (Permission denied)
24023 write(2, "pppd: This system lacks kernel s"..., 375) = 375
...

p.s. все capability включил в on


Re: ppp inside VPS [message #6698 is a reply to message #6695] Thu, 21 September 2006 12:59 Go to previous messageGo to next message
Umka is currently offline  Umka
Messages: 56
Registered: September 2006
Member
northwood wrote on Thu, 21 September 2006 08:23

Не могу понять где ошибка Sad

24023 open("/dev/ppp", O_RDWR) = -1 EACCES (Permission denied)
24023 write(2, "pppd: This system lacks kernel s"..., 375) = 375
...

p.s. все capability включил в on


vzctl set $id --devnodes ppp ?
Re: ppp inside VPS [message #6702 is a reply to message #6698] Thu, 21 September 2006 13:34 Go to previous messageGo to next message
northwood is currently offline  northwood
Messages: 4
Registered: September 2006
Junior Member
спасибо, команда vzctl set $id --devnodes ppp0:rw помогла pppd запуститься Smile

но теперь другие грабли: Crying or Very Sad

pptp[22068]: warn[pptp_gre_bind:pptp_gre.c:82]: socket: Address family not supported by protocol
pptp[22068]: fatal[main:pptp.c:284]: Cannot bind GRE socket, aborting.

хотя GRE опять таки в ядре есть Crying or Very Sad

p.s. на HN все отлично работает
Re: ppp inside VPS [message #6822 is a reply to message #6702] Sun, 24 September 2006 12:43 Go to previous messageGo to next message
northwood is currently offline  northwood
Messages: 4
Registered: September 2006
Junior Member
Наконец-то решение найдено

в сырцах ядра, добавил в файл socket.c строчку "case IPPROTO_GRE:"

int vz_security_proto_check(int family, int type, int protocol)
{
#ifdef CONFIG_VE
if (ve_is_super(get_exec_env()))
return 0;

switch (family) {
case PF_UNSPEC:
case PF_PACKET:
case PF_NETLINK:
case PF_UNIX:
break;
case PF_INET:
switch (protocol) {
case IPPROTO_IP:
case IPPROTO_ICMP:
case IPPROTO_TCP:
case IPPROTO_UDP:
case IPPROTO_RAW:
case IPPROTO_GRE:
break;

...

после чего все успешно завелось Cool

вопрос к разработчикам: отсутствие поддержки других IP-протоколов (например GRE) имеет какие то причины или это баг? Shocked

[Updated on: Sun, 24 September 2006 17:17]

Report message to a moderator

Re: ppp inside VPS [message #32849 is a reply to message #6427] Tue, 02 September 2008 17:58 Go to previous message
Night Nord is currently offline  Night Nord
Messages: 4
Registered: July 2008
Location: Russia, SPb
Junior Member

-- удалено в переносом вопроса в отдельный топик в английском Support --

[Updated on: Fri, 05 September 2008 16:41]

Report message to a moderator

Previous Topic: Как опубликовать template?
Next Topic: не работает NFS в VE
Goto Forum:
  


Current Time: Thu Mar 28 19:42:29 GMT 2024

Total time taken to generate the page: 0.01773 seconds