LinuxForum.Fans
Тема

Настройка pptpd в Slackware

Автор: kisil 14 сообщений 7405 просмотров
#227805

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

text
unit 10

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

text
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

text
debug
localip 192.168.3.2
remoteip 192.168.3.10-12
#227823

Точного ответа не знаю, но... 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.cgi?format=multiple&id=9800 директива minunit.

#227858

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

#227860

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

text

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 | ...

text

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

Собрать новый пакет и поставить вместо существующего:
[console]
# ./ppp.SlackBuild
# upgradepkg --install-new --reinstall /tmp/ppp-2.4.5-*-1mu.t?z
[/console]
Добавить в options.pptpd

text

minunit 10
#227967

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

#229673

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

text

...
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

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

#229694

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

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

#229862

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

text
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'

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

#229994

Действительно нет.
Пересобрал, перепроверил, перевыложил, ссылку поправил выше:
[console]# upgradepkg ppp-2.4.5-i486-2mu.txz[/console]
в помощь.

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

#231334

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

#357324

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

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

Спасибо

#357343

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

#357344

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

unit 1
unit 2
unit 3
etc

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

#357394

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

Войдите или зарегистрируйтесь, чтобы ответить.