Добрый день.
Есть сервак правда на Слакваре. Он раздаёт нэт в локалку. Интернэт 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
Точного ответа не знаю, но... options.pptpd -- это параметры pppd, c которыми его вызовет pptpd для создания интерфейса.
unit задаёт номер интерфейса ppp, который создаст pppd.
Первый пришедший в голову вариант -- в скрипте ip-up или ip-pre-up (интерфейс уже создан, но не поднят) увеличивать или искать свободное значение из диапазона для следующего интерфейса.
Ага, и самый главный вопрос -- а зачем?
Если "чтобы настроить фаервол при подъёме ADSL" то для этого есть и иные возможности (man pppd раздел Scripts).
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 | ...
Собрать новый пакет и поставить вместо существующего:
[console]
# ./ppp.SlackBuild
# upgradepkg --install-new --reinstall /tmp/ppp-2.4.5-*-1mu.t?z
[/console]
Добавить в options.pptpd
Сори что долго не писал, но что то не собираетса. Вот выхлоп ошыбки
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
Проинсталировал пакет, который вы выложыли, прописал в 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'
moogprodigy, переформулирую вопрос: что не получается с пересборкой пакета с применением патча?
Если правильно понял прочитанное на Вики арча, подготовить abs, перекинуть pptpd в local, положить рядом патч, дописать в pkgbuild в build перед configure применение патча, собрать. Но это все же лучше спрашивать у арчеводов.
Или нужно отрихтовать патч под вашу версию pptpd? Под какую?