|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Alexander Burylov 2:5054/75.1 25 Oct 2004 22:21:49 To : All Subject : Warning: iface add: ioctl(SIOCAIFADDR... -------------------------------------------------------------------------------- Столкнулся тут с пpоблемой... Есть сеть, для доступа в инет стоит сервер, на нём pppoed+ppp+самописная биллинговая система. Юзерам выдаются карточки, причём все карточки разделены на два диапазона по выдаваемым IP адресам - для ограничения по ширине пропускания. Локальная сеть: 192.168.1.0/255.255.255.0 Адрес сервера: 192.168.1.1 PPPoE сеть 192.168.255.0/255.255.255.0 Полностью приводить конфиги не буду, вот только то, что относится к делу: ppp.conf: set ifaddr 192.168.255.1 192.168.255.30-192.168.255.249 ppp.secret: user1 pass1 * user2 pass2 192.168.255.2-192.168.255.29 Т.е в данном случае имеем: user1 получает адрес из диапазона 192.168.255.30-192.168.255.249 user2 получает адрес из диапазона 192.168.255.2-192.168.255.29 В конце концов через трубы и очереди эти два юзера имеют разные ограничения на ширину пропускания канала. Для этого всё и задумывалось. Hо дело не в этом. В логах постоянно появляются варнинги типа: Oct 22 12:41:27 inet ppp[3068]: tun2: Warning: iface add: ioctl(SIOCAIFADDR, 192.168.1.1 -> 192.168.255.30): File exists Смотрим логи ppp: Соединяется user1: Phase: Using interface: tun1 Phase: deflink: Created in closed state tun1: Command: pppoe-server: set speed sync tun1: Command: pppoe-server: set server /var/run/ppp/tun%d-pppoe ******** 0177 tun1: Phase: Listening at local socket /var/run/ppp/tun1-pppoe. tun1: Command: pppoe-server: enable pap passwdauth tun1: Command: pppoe-server: disable acfcomp protocomp tun1: Command: pppoe-server: deny acfcomp protocomp tun1: Command: pppoe-server: disable vjcomp deflate pred1 mppe tun1: Command: pppoe-server: deny vjcomp deflate pred1 mppe tun1: Command: pppoe-server: set mru 1492 tun1: Command: pppoe-server: set timeout 3600 tun1: Command: pppoe-server: set ifaddr 192.168.255.1 192.168.255.30-192.168.255.249 tun1: ID0: 10 = socket(2, 2, 0) tun1: ID0: 0 = ioctl(10, 2151704858, 0xbfbfdb70) tun1: IPCP: Selected IP address 192.168.255.30 [...skipped...] Тут проверка паролей и тд. tun1: IPCP: deflink: SendConfigAck(7) state = Ack-Rcvd tun1: IPCP: IPADDR[6] 192.168.255.30 tun1: IPCP: PRIDNS[6] 192.168.255.250 tun1: IPCP: SECDNS[6] 255.255.255.255 tun1: IPCP: deflink: State change Ack-Rcvd --> Opened tun1: IPCP: deflink: LayerUp. tun1: IPCP: myaddr 192.168.255.1 hisaddr = 192.168.255.30 tun1: ID0: 1 = socket(2, 2, 0) tun1: ID0: 1 = socket(2, 2, 0) tun1: ID0: 0 = ioctl(1, 3223349521, 0xbfbfe020) tun1: ID0: 0 = ioctl(1, 2149607696, 0xbfbfe020) tun1: ID0: 0x2830f220 = fopen("/etc/ppp/ppp.linkup", "r") tun1: ID0: 0x2830f220 = fopen("/etc/ppp/ppp.linkup", "r") tun1: ID0: 0 = ioctl(6, 2148037723, 0xbfbfe090) tun1: ID0: 1 = socket(17, 3, 0) tun1: ID0: 124 = write(1, data, 124) Тут всё нормально: при соединении ppp выбрал начальный адрес 192.168.255.30, в процессе IPCP переговоров user1 с этим согласился и ему назначился именно этот адрес. Сразу после этого соединяется user2: Phase: Using interface: tun2 Phase: deflink: Created in closed state tun2: Command: pppoe-server: set speed sync tun2: Command: pppoe-server: set server /var/run/ppp/tun%d-pppoe ******** 0177 tun2: Phase: Listening at local socket /var/run/ppp/tun2-pppoe. tun2: Command: pppoe-server: enable pap passwdauth tun2: Command: pppoe-server: disable acfcomp protocomp tun2: Command: pppoe-server: deny acfcomp protocomp tun2: Command: pppoe-server: disable vjcomp deflate pred1 mppe tun2: Command: pppoe-server: deny vjcomp deflate pred1 mppe tun2: Command: pppoe-server: set mru 1492 tun2: Command: pppoe-server: set timeout 3600 tun2: Command: pppoe-server: set ifaddr 192.168.255.1 192.168.255.30-192.168.255.249 tun2: ID0: 10 = socket(2, 2, 0) tun2: ID0: -1 = ioctl(10, 2151704858, 0xbfbfdb70) ^^^^^^^^^^^^^^^^^^^^^--какОго хрена спрашивается tun2: Warning: iface add: ioctl(SIOCAIFADDR, 192.168.1.1 -> 192.168.255.30): File exists ^^^^^^^^^^^^^^^^^^^^^--ppp выбрал тот же адрес tun2: ID0: 10 = socket(2, 2, 0) tun2: ID0: 0 = ioctl(10, 2151704858, 0xbfbfdb70) tun2: IPCP: Selected IP address 192.168.255.113 [...skipped...] В конце концов user2 получит адрес совсем из другого диапазона, который указан в ppp.secret В процессе соединения с использованием динамических адресов ppp два раза изменяет адрес ифейса и таблицу маршрутизации: (можно посмотреть по route monitor) 1 - когда он случайным образом выбрал адрес из диапазона адресов; 2 - после проведения IPCP переговоров (адрес может быть выдан совсем из другого диапазона) Во втором случае - всё нормально, ppp не выдаёт адреса, которые уже выданы. А вот в первом случае - ppp случайным образом выбирает адрес и сразу (ещё IPCP переговоры даже не проведены) пытается создать ифейс и изменить таблицу роутинга. Допустим диапазон из 20 адресов, чем больше подключается клиентов (понятно, что максимум 20) тем больше вероятность, что ppp случайным образом выберет существующий адрес, после того как он обломится - он выберет другой адрес. Это что так и должно быть? или я чего не так делаю? Получается, что messages завален одними этими варнингами. Как ему сказать, чтоб не надо так делать, не надо создавать ифейс с существующим адресом и лезти в таблицу роутинга до того, как пройдут IPCP переговоры и уже будет конкретная договорённость с адресами? PS: Из практики - чем больше юзеров подключено - тем больше варнингов можно увидеть. До свидания, Alexander. --- GoldED+/W32 1.1.5-30228 * Origin: Homenet Gate (2:5054/75.1) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/2775417d2835.html, оценка из 5, голосов 10
|