[devel] Q: /etc/net 0.8 и Compact 3.0

Sviatoslav Sviridov =?iso-8859-1?q?svd_=CE=C1_altlinux=2Eru?=
Вс Апр 16 15:01:55 MSD 2006


Sviatoslav Sviridov пишет: 
> ...
>
> Какие еще существенные изменения будут в 0.8.0? Подозреваю, что "код 
> лучше" может быть причиной появления новых "неисправимых преимуществ" ;)
>
> В частности, меня интересует будут ли какие-нить изенения в части 
> работы с pptp и с resolv.conf?

Ну вот, сегодня опять пришлось руками лезть в ipv4route... решил по 
горячим следам вспомнить давнишние свои размышления на эту тему и 
попытаться воплотить их в коде...

Итого:
Имеется настроенное pptp соединение (интерфейс ppp0).
Проблема в том, что defaultroute на это соединение мне поднимать не 
надо, а значит надо прописывать маршруты на подсеть (подсети). etcnet 
сам этого делать не умеет, поэтому надо это делать самостоятельно в 
/etc/net/ifaces/ipv4route.

Первая проблема в том, что для того, чтобы прописать правильный маршрут 
надо как минимум один раз поднять pp(t)p интерфейс и посмотреть кто же 
там будет peer и адрес из какой сети нам дадут.

Если с адресом сети в моем случае и нет проблемы, я его знаю и он 
меняться не собирается, то вот peer является второй проблемой. Он может 
менятся вермя от времени... т.е., в совершенно неожиданные моменты 
времени я могу получить неработающее соединение (до тех пор, пока не 
обновлю ipv4rote).. Итого, я несколько раз уже добавлял маршруты в 
ipv4route (срабатывает только один, на остальные идет ругань, но зато 
так меньше вероятность сломаться :))... Сегодня пришлось бы вписывать 
четвертую строчку с маршрутом на одну и ту же сеть...

Однако попытался пойти другим путем :)

На данный момент имеем ситуацию, при которой нельзя настроить впн 
соединение так, чтобы оно "просто работало" (головная боль писателя 
конфигуратора? ;) ) Если возможность создавать требуемые маршруты не 
можеть быть встроена непосредственно в etcnet (как я понимаю, pilot 
этого делать не собирается), то было бы неплохо предоставить такие 
возможности, чтобы требуемую конфигурацию можно было бы легко создать 
имеющимися средствами. В данном случае - чтобы в ipv4route можно было бы 
задавать правила, которые раскрывались бы в момент исполнения в 
соостветствии с текущей конфигурацией. Например, так:

$MY_NETWORK/$MY_MASK via $PEER

Для простоты реализации я воспользовался шеллом как готовым средством, 
умеющим раскрывать значения переменных ;) Тем более, что сам etcnet 
вовсю этим пользуется внутри себя (здесь появляется дополнительное 
ограничение: имена надо выбирать таким образом, чтобы они не 
пересекались с теми, что уже используются в etcnet).

Алгоритм следующий:
- в ipv4route прописываются маршруты с использованием шелловских переменных
- перед обработкой ipv4route обрабатывается вывод "$IP addr show dev 
$NAME" и устанавливаются значения необходимых переменных
- во время обработки ipv4route в каждой строчке раскрываются значения 
переменных. Если какая-то переменная не раскрылась, то такая строчка 
просто отбрасывается
- по окончании обработки созданные переменные удаляются

При этом такой подход можно использовать не только для ipv4route, но и в 
других местах etcnet.

То, что получилось и сейчас работает, приаттачено.

Сейчас для меня важно было только подхватывать правильный peer, поэтому 
только это и сделано :)
Следующим шагом хотелось вычислить адрес сети на основании заданной 
маски (в случае pp(t)p адрес сети не назначется сервером, а маска 
выставляется только для peer, причем там я видел только /32). Для 
соединений типа link/ether маску сети можно брать прямо из 
установленного адреса (вида x.x.x.x/m), для link/ppp ее  надо будет 
задавать извне... но в данный момент мне заниматься этим стало лень и 
некогда :), так что отсылаю на суд общественности то, что есть :) Это не 
готовый патч для включения в состав, а всего лишь proof of concept пока что.

У меня это работает со следующим содержимым ipv4route:

10.6.0.0/16 via $PEER_IPADDR1
172.27.0.0/16 via $PEER_IPADDR1

Для задания универсальной конфигурации, которая работала бы "из коробки" 
без вмешательства пользователя, надо по полученному ip адресу задать 
адрес сети, взяв маску, соответствующую классу сети.

Здесь, конечно, есть большая неприятность в том, что фалы конфигурации 
становятся подвержены shell injection... Каким образом можно снизить 
такой риск?

-- 
Best regards,
Sviatoslav Sviridov
--
Q:  How many IBM CPU's does it take to execute a job?
A:  Four; three to hold it down, and one to rip its head off.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : etcnet-smartroutes.patch
Тип     : text/x-patch
Размер  : 1388 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20060416/dd277c90/attachment-0002.bin>
----------- следующая часть -----------
An embedded and charset-unspecified text was scrubbed...
Name: parse.awk
URL: <http://lists.altlinux.org/pipermail/devel/attachments/20060416/dd277c90/attachment-0001.ksh>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : signature.asc
Тип     : application/pgp-signature
Размер  : 252 байтов
Описание: OpenPGP digital signature
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20060416/dd277c90/attachment-0003.bin>


Подробная информация о списке рассылки Devel