1 (08.02.2012 13:00:50 отредактировано bormant)

Добрый день.
Есть сервак правда на Слакваре. Он раздаёт нэт в локалку. Интернэт ADSL  и поднимаетса с помощью pppoe, при этом появляетса интерфейс ррр0. Даный комп имеет реальный айпишку. Я хоче поднать на нём pptpd для того чтобы можно было поднимать ВПН. С настройками pptp хотел разобратса для начала на тестовой машыне. Настроил вроде всё норм. Но вот что мне нуна: у меня на реальном шлюзе уже есть интерфейс ррр0, тырнэт тоисть, мне нужна чтобы следующие интерфейси назначались например так - ррр10, ррр11 и т.д. В настройках pptp я что то похожее нашол, это директива
unit которая как я понял должна задать для сервера pptp значения с которого нужно создавать виртуальний интерфейс. Я поставил значения такое в файле options.pptpd

unit 10

Я её прописал на тэстовом серваке, но она работает тока для первого соединения по ВПН, а если при активном первом соединении к серверк ВПН подконектитса ещё один клиент, всё директива не работае, создаётса интэрфейс ррр0. Помогите мне как решыть это. Мне нуна чтобы были интерфейсы подряд  ррр10, ррр11...
options.pptpd

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
debug
lock
nobsdcomp
novj
novjccomp
nologfd
defaultroute
unit 10
unit 11

pptpd.conf

debug
localip 192.168.3.2
remoteip 192.168.3.10-12
Trouble  in WINDOWS reboot, trouble in UNIX be root.

2 (08.02.2012 15:04:11 отредактировано bormant)

Точного ответа не знаю, но... options.pptpd -- это параметры pppd, c которыми его вызовет pptpd для создания интерфейса.
unit задаёт номер интерфейса ppp, который создаст pppd.

Первый пришедший в голову вариант -- в скрипте ip-up или ip-pre-up (интерфейс уже создан, но не поднят) увеличивать или искать свободное значение из диапазона для следующего интерфейса.

ps. Второй -- пропатчить pppd, чтобы при наличии директивы unit в параметрах начинал поиск свободного ppp+ не с 0, а со значения в unit.
pps. Третий -- не вы первый. https://bugzilla.altlinux.org/show_bug. … mp;id=9800 директива minunit.

3

Ага, и самый главный вопрос -- а зачем?
Если "чтобы настроить фаервол при подъёме ADSL" то для этого есть и иные возможности (man pppd раздел Scripts).

4

Поскольку при применении https://bugzilla.altlinux.org/show_bug. … mp;id=9800 на ppp-2.4.5 есть режекты, выкладываю содержимое причёсанного ppp-2.4.5-alt-minunit.patch

diff -ruN ppp-2.4.5.orig/pppd/options.c ppp-2.4.5/pppd/options.c
--- ppp-2.4.5.orig/pppd/options.c    2009-11-17 01:26:07.000000000 +0300
+++ ppp-2.4.5/pppd/options.c    2012-02-08 14:44:59.983680313 +0400
@@ -113,6 +113,7 @@
 bool    tune_kernel;        /* may alter kernel settings */
 int    connect_delay = 1000;    /* wait this many ms after connect script */
 int    req_unit = -1;        /* requested interface unit */
+int    req_minunit = -1;    /* requested minimal interface unit */
 bool    multilink = 0;        /* Enable multilink operation */
 char    *bundle_name = NULL;    /* bundle name for multilink */
 bool    dump_options;        /* print out option values */
@@ -272,8 +273,13 @@
       "PPP interface unit number to use if possible",
       OPT_PRIO | OPT_LLIMIT, 0, 0 },
 
+    { "minunit", o_int, &req_minunit,
+      "PPP interface minimal unit number",
+      OPT_PRIO | OPT_LLIMIT, 0, 0 },
+
     { "dump", o_bool, &dump_options,
       "Print out option values after parsing all options", 1 },
+
     { "dryrun", o_bool, &dryrun,
       "Stop after parsing, printing, and checking options", 1 },
 
diff -ruN ppp-2.4.5.orig/pppd/pppd.8 ppp-2.4.5/pppd/pppd.8
--- ppp-2.4.5.orig/pppd/pppd.8    2009-11-17 01:26:07.000000000 +0300
+++ ppp-2.4.5/pppd/pppd.8    2012-02-08 14:42:47.547678792 +0400
@@ -1050,6 +1050,12 @@
 Sets the ppp unit number (for a ppp0 or ppp1 etc interface name) for outbound
 connections.
 .TP
+.B minunit \fInum
+Such as unit, but always select bigger interface
+.TP
+.B minunit \fInum
+PPP interface minimal unit number. Such as unit, but always select bigger interface
+.TP
 .B updetach
 With this option, pppd will detach from its controlling terminal once
 it has successfully established the ppp connection (to the point where
diff -ruN ppp-2.4.5.orig/pppd/pppd.h ppp-2.4.5/pppd/pppd.h
--- ppp-2.4.5.orig/pppd/pppd.h    2009-11-17 01:26:07.000000000 +0300
+++ ppp-2.4.5/pppd/pppd.h    2012-02-08 14:47:36.982680668 +0400
@@ -80,6 +80,7 @@
 #define MAXARGS        1    /* max # args to a command */
 #define MAXNAMELEN    256    /* max length of hostname or name for auth */
 #define MAXSECRETLEN    256    /* max length of password or secret */
+#define MAXUNIT        255    /* max ppp interface */
 
 /*
  * Option descriptor structure.
@@ -313,6 +314,7 @@
 extern int    connect_delay;    /* Time to delay after connect script */
 extern int    max_data_rate;    /* max bytes/sec through charshunt */
 extern int    req_unit;    /* interface unit number to use */
+extern int    req_minunit;    /* interface minimal unit number to use */
 extern bool    multilink;    /* enable multilink operation */
 extern bool    noendpoint;    /* don't send or accept endpt. discrim. */
 extern char    *bundle_name;    /* bundle name for multilink */
diff -ruN ppp-2.4.5.orig/pppd/sys-linux.c ppp-2.4.5/pppd/sys-linux.c
--- ppp-2.4.5.orig/pppd/sys-linux.c    2009-11-17 01:26:07.000000000 +0300
+++ ppp-2.4.5/pppd/sys-linux.c    2012-02-08 14:42:47.550678967 +0400
@@ -627,13 +627,26 @@
         || fcntl(ppp_dev_fd, F_SETFL, flags | O_NONBLOCK) == -1)
         warn("Couldn't set /dev/ppp to nonblock: %m");
 
-    ifunit = req_unit;
-    x = ioctl(ppp_dev_fd, PPPIOCNEWUNIT, &ifunit);
-    if (x < 0 && req_unit >= 0 && errno == EEXIST) {
+    if (req_minunit > -1) {
+        for(ifunit = req_minunit;req_minunit < MAXUNIT; ifunit = ++req_minunit) {
+        x = ioctl(ppp_dev_fd, PPPIOCNEWUNIT, &ifunit);
+        if (x < 0 && errno == EEXIST) {
+            warn("Couldn't allocate PPP unit %d as it is already in use try to attempt next", req_minunit);
+        }
+        if (x >= 0)
+            break;
+        }
+    }
+    if ((x < 0) || (req_minunit == -1)) {
+        ifunit = req_unit;
+        x = ioctl(ppp_dev_fd, PPPIOCNEWUNIT, &ifunit);
+        if (x < 0 && req_unit >= 0 && errno == EEXIST) {
         warn("Couldn't allocate PPP unit %d as it is already in use", req_unit);
         ifunit = -1;
         x = ioctl(ppp_dev_fd, PPPIOCNEWUNIT, &ifunit);
+        }
     }
+
     if (x < 0)
         error("Couldn't create new ppp unit: %m");
     return x;

Забрать содержимое /source/n/ppp/
Положить рядом патч в ppp-2.4.5-alt-minunit.patch
Поправить SlackBuild, в части BUILD-а и добавив строчку с применением патча после zcat $CWD/ppp.slack.diff.gz | ...

BUILD=${BUILD:-1mu}

zcat $CWD/ppp.slack.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit
cat $CWD/ppp-2.4.5-alt-minunit.patch | patch -p1 --verbose --backup --suffix=.orig || exit

Собрать новый пакет и поставить вместо существующего:

 Консоль:

# ./ppp.SlackBuild
# upgradepkg --install-new --reinstall /tmp/ppp-2.4.5-*-1mu.t?z

Добавить в options.pptpd

minunit 10

5

СПС. Попробую. После тэстов отпишусь.

Trouble  in WINDOWS reboot, trouble in UNIX be root.

6

Сори что долго не писал, но что то не собираетса. Вот выхлоп ошыбки

...
ppp-2.4.5/scripts/ppp-off
ppp-2.4.5/scripts/ppp-on
ppp-2.4.5/scripts/ppp-on-dialer
ppp-2.4.5/scripts/ppp-on-rsh
ppp-2.4.5/scripts/ppp-on-ssh
ppp-2.4.5/scripts/redialer
ppp-2.4.5/scripts/secure-card
ppp-2.4.5/solaris/
ppp-2.4.5/solaris/Makedefs
ppp-2.4.5/solaris/Makedefs.gcc
ppp-2.4.5/solaris/Makedefs.sol2
ppp-2.4.5/solaris/Makefile.sol2
ppp-2.4.5/solaris/Makefile.sol2-64
ppp-2.4.5/solaris/Makefile.sol2-64x
ppp-2.4.5/solaris/Makefile.sol2gcc
ppp-2.4.5/solaris/Makefile.sol2gcc-64
ppp-2.4.5/solaris/Makefile.sol2gcc-64x
ppp-2.4.5/solaris/Makefile.top
ppp-2.4.5/solaris/ppp.c
ppp-2.4.5/solaris/ppp.conf
ppp-2.4.5/solaris/ppp_ahdlc.c
ppp-2.4.5/solaris/ppp_ahdlc_mod.c
ppp-2.4.5/solaris/ppp_comp.c
ppp-2.4.5/solaris/ppp_comp_mod.c
ppp-2.4.5/solaris/ppp_mod.c
ppp-2.4.5/solaris/ppp_mod.h
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -r -u ppp-2.4.2.orig/pppd/Makefile.linux ppp-2.4.2/pppd/Makefile.linux
|--- ppp-2.4.2.orig/pppd/Makefile.linux 2003-11-27 13:55:19.000000000 -0800
|+++ ppp-2.4.2/pppd/Makefile.linux      2004-02-22 21:36:11.000000000 -0800
--------------------------
Patching file pppd/Makefile.linux using Plan A...
Hunk #1 succeeded at 32 (offset 1 line).
Hunk #2 succeeded at 62 (offset 1 line).
done
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ruN ppp-2.4.5.orig/pppd/options.c ppp-2.4.5/pppd/options.c
|--- ppp-2.4.5.orig/pppd/options.c    2009-11-17 01:26:07.000000000 +0300
|+++ ppp-2.4.5/pppd/options.c    2012-02-08 14:44:59.983680313 +0400
--------------------------
Patching file pppd/options.c using Plan A...
Hunk #1 FAILED at 113.
Hunk #2 succeeded at 272.
1 out of 2 hunks FAILED -- saving rejects to file pppd/options.c.rej
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ruN ppp-2.4.5.orig/pppd/pppd.8 ppp-2.4.5/pppd/pppd.8
|--- ppp-2.4.5.orig/pppd/pppd.8    2009-11-17 01:26:07.000000000 +0300
|+++ ppp-2.4.5/pppd/pppd.8    2012-02-08 14:42:47.547678792 +0400
--------------------------
Patching file pppd/pppd.8 using Plan A...
Hunk #1 succeeded at 1050.
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ruN ppp-2.4.5.orig/pppd/pppd.h ppp-2.4.5/pppd/pppd.h
|--- ppp-2.4.5.orig/pppd/pppd.h    2009-11-17 01:26:07.000000000 +0300
|+++ ppp-2.4.5/pppd/pppd.h    2012-02-08 14:47:36.982680668 +0400
--------------------------
Patching file pppd/pppd.h using Plan A...
Hunk #1 FAILED at 80.
Hunk #2 FAILED at 313.
2 out of 2 hunks FAILED -- saving rejects to file pppd/pppd.h.rej
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ruN ppp-2.4.5.orig/pppd/sys-linux.c ppp-2.4.5/pppd/sys-linux.c
|--- ppp-2.4.5.orig/pppd/sys-linux.c    2009-11-17 01:26:07.000000000 +0300
|+++ ppp-2.4.5/pppd/sys-linux.c    2012-02-08 14:42:47.550678967 +0400
--------------------------
Patching file pppd/sys-linux.c using Plan A...
patch unexpectedly ends in middle of line
Hunk #1 FAILED at 627.
1 out of 1 hunk FAILED -- saving rejects to file pppd/sys-linux.c.rej
done

Как быть что не так.????

Trouble  in WINDOWS reboot, trouble in UNIX be root.

7 (16.02.2012 19:43:15 отредактировано bormant)

Вот собранный в 13.37 с патчем: http://ifolder.ru/28749847

 Консоль:

# cat /etc/*version
Slackware 13.37.0
# mkdir ~/bld ; cd ~/bld
# wget -r -nH --cut-dirs=5 ftp://ftp.osuosl.org/pub/slackware/slackware-13.37/source/n/ppp
# cd ppp
# cp ~/ppp-2.4.5-alt-minunit.patch ./
# mcedit *Build
# ./*Build

8

Проинсталировал пакет, который вы выложыли, прописал в options.pptpd директиву minunit 10, а оно мне вот что

Feb 16 08:46:56 RM-0 pptpd[3912]: GRE: read(fd=6,buffer=8058c20,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Feb 16 08:46:56 RM-0 pptpd[3912]: CTRL: PTY read or GRE write failed (pty,gre)=(6,8)
Feb 16 08:46:58 RM-0 pppd[3915]: In file /etc/ppp/options.pptpd: unrecognized option 'minunit'
Feb 16 08:46:58 RM-0 pptpd[3914]: GRE: read(fd=6,buffer=8058c20,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Feb 16 08:46:58 RM-0 pptpd[3914]: CTRL: PTY read or GRE write failed (pty,gre)=(6,8)
Feb 16 08:46:58 RM-0 pppd[3917]: In file /etc/ppp/options.pptpd: unrecognized option 'minunit'

Как я понимаю нет такой директивы.

Trouble  in WINDOWS reboot, trouble in UNIX be root.

9 (16.02.2012 19:48:18 отредактировано bormant)

Действительно нет.
Пересобрал, перепроверил, перевыложил, ссылку поправил выше:

 Консоль:
# upgradepkg ppp-2.4.5-i486-2mu.txz

в помощь.

Насчёт "что не так" с применением патча: текст сообщения на форуме плохое место для выкладывания патчей, табы были заменены пробелами и вот результат.

10

СПС борман всё заработало. Плюсанул
Тема решена.

Trouble  in WINDOWS reboot, trouble in UNIX be root.

11

Тоже имею сервер vpn на pptpd , и также при 2-м подключении выдет ppp0,а можно этот патч перелить?

и как его применить для arch linux,

Спасибо

12

moogprodigy, что именно не получается?

13

ну выставляю в option.pptpd

unit 1
unit 2
unit 3 
etc

и при подключении клиентов, одному выдаеться  0 интерфейс,  проверил /usr/include/pppd, не нахожу там  unit.h ,значит pptpd мой не пропатченый,

14

moogprodigy, переформулирую вопрос: что не получается с пересборкой пакета с применением патча?
Если правильно понял прочитанное на Вики арча, подготовить abs, перекинуть pptpd в local, положить рядом патч, дописать в pkgbuild в build перед configure применение патча, собрать. Но это все же лучше спрашивать у арчеводов.
Или нужно отрихтовать патч под вашу версию pptpd? Под какую?