Установка p2p-сервера на ОС FreeBSD
04.01.2010 20:54
Администратор
Установка p2p-сервера verlihub
Автор: catdog_. Оригинал - http://www.lissyara.su/articles/freebsd/programms/verlihub/
У меня в городской локалке трафик в пределах района бесплатный. Собственна решил объединить юзеров района, чтобы могли обмениваться файлами нахаляву :) Сейчас у меня FreeBSD 6.3 BETA2, но и на 6.2 хаб вставал и работал без проблем.
Ставим сервер из портов: cd /usr/ports/net-p2p/verlihub/ make install clean
Устанавливается без ошибок и прочих проблем. Для работы хаба нужен запущенный сервер баз данных MySQL. Как его поставить и настроить уже писал lissyara (http://www.lissyara.su/?id=1189). Читаем, ставим, запускаем и проверяем :) //> /usr/local/etc/rc.d/mysql-server status mysql is running as pid 48383.
или вот так: /usr/MY/> ps -aux | grep mysql mysql 22262 0,0 0,2 5180 4696 p1- IN 18:38 0:00,10 /usr/local/libexec/ mysql 48349 0,0 0,1 1748 1272 p1- I 17:22 0:00,01 /bin/sh /usr/local/ mysql 48381 0,0 0,2 5180 4696 p1- SN 17:22 0:00,01 /usr/local/libexec/ mysql 48382 0,0 0,2 5180 4696 p1- SN 17:22 0:00,04 /usr/local/libexec/ mysql 48383 0,0 0,2 5180 4696 p1- IN 17:22 0:00,00 /usr/local/libexec/
Сервер БД работает - можно запускать хаб. Сначала даем команду vh-install
и отвечаем на несколько вопросов (в большинстве случаев достаточно нажать enter). -------------------------------- Your name ? (root)
Hello root, let's start with configuration of database access..
-------------------------------- mysql database for verlihub will be called? (verlihub) mysql user to access verlihub gonna be? (verlihub) password to access verlihub be? (1195486071) mysql server will run where? (localhost) -------------------------------- user = verlihub password = 1195486071 host = localhost database = verlihub -------------------------------- This database account cannot be accessed -------------------------------- Is this info correct ? (Y/N)y Do you want to create database now? (Y/N)
--------------------------------
root, you need to choos a place for the configuration files -------------------------------- The order of folder that verlihub is looking for is following:
1 - variable $VERLIHUB_CFG - -inexisting- 2 - ./.verlihub - /root/.verlihub -inexisting- 3 - /root/.verlihub - /root/.verlihub -inexisting- 4 - /usr/local/etc/verlihub - /usr/local/etc/verlihub -inexisting- 5 - /etc/verlihub - /etc/verlihub -inexisting- if two or more of these exist, lower number has priority --------------------------------
-------------------------------- what is will be the configuration folder ? (/etc/verlihub) The config folder /etc/verlihub does not exist and would be created -------------------------------- Do you want to continue with these settings (if not then select another folder) ? (Y/N)y -------------------------------- Written: /etc/verlihub/dbconfig
--------------------------------
ERROR: Your installation is NOT complete Either you were unable to create database or config folder Without both valid I cannot continue Come back with necessary info, permissions and running mysql server and run me again
Странно, но нарисовало ошибку :) Пробуем снова /root/> vh_install -------------------------------- Your name ? (root)
Hello root, let's start with configuration of database access..
-------------------------------- mysql database for verlihub will be called? (verlihub) mysql user to access verlihub gonna be? (verlihub) password to access verlihub be? (1195486071) mysql server will run where? (localhost) -------------------------------- user = verlihub password = 1195486071 host = localhost database = verlihub -------------------------------- This database account cannot be accessed -------------------------------- Is this info correct ? (Y/N)y Do you want to create database now? (Y/N)y -------------------------------- Ok preparing mysql.. You probably need administrator access to mysql database mysql administrator username? (root) root
--------------------------------
You'll be now promted by mysql client for password of root@localhost Enter password: -------------------------------- This database account exists --------------------------------
--------------------------------
root, you need to choos a place for the configuration files -------------------------------- The order of folder that verlihub is looking for is following:
1 - variable $VERLIHUB_CFG - -inexisting- 2 - ./.verlihub - /root/.verlihub -inexisting- 3 - /root/.verlihub - /root/.verlihub -inexisting- 4 - /usr/local/etc/verlihub - /usr/local/etc/verlihub -inexisting- 5 - /etc/verlihub - /etc/verlihub drwxrwxrwx if two or more of these exist, lower number has priority --------------------------------
-------------------------------- what is will be the configuration folder ? (/etc/verlihub) This config folder already exists and may be overwitten (with a backup) -------------------------------- Do you want to continue with these settings (if not then select another folder) ? (Y/N)y Do you want to overwrite the existing configuration ? (Y/N)y -------------------------------- FYI: original configuration has been moved to /etc/verlihub/_backup Written: /etc/verlihub/dbconfig
--------------------------------
Wait few seconds.. /usr/local/bin/vh_install: line 65: 22060 Killed: 9 $bindir/verlihub 22 >&/dev/null -------------------------------- root, now I will ask you few more questions about your future hub, if you permit..
-------------------------------- Try to not put many special characters, you'll be able to put some laer
Give me your DC hub master nickname.. ([SU]root) Catdog Choose your password.. (1195486402) 12345 Which will be default ONE hub port number? (411) What will be your hub hostname? (catdog.sampo.ru) Give me the name of your hub (hub of root) MyHub -------------------------------- Hub: 'MyHub' url: 'dchub://catdog.sampo.ru:411' Master user: 'Catdog' Master's password: '12345' -------------------------------- Is this info correct ? (Y/N)y FYI: settings are going to be created or updated /etc/verlihub /etc/verlihub /etc/verlihub will invoke the command class is 10 nick is Catdog password is 12345 done
На этот раз успешно :) Пришло время запустить наконец сервер (не забудь добавить в /etc/rc.conf строку verlihub_enable="YES"): /root/> /usr/local/etc/rc.d/verlihub start Starting verlihub. /root/>
Теперь нужно выбрать клиента, и законнектиться с хабом. Я выбрал linuxdc (на старых версиях у него были проблемы при скачке с кодировками, сейчас все ОК) cd /usr/ports/net-p2p/linuxdcpp/ make install clean
Теперь заходим на хаб из linuxdc под главной учеткой (у меня Catdog) с паролем (у меня 12345). В приват придут поздравления :) Рулить хабом очень просто. Чтобы получить текущие настройки, дай команду !getconfig
Список настроек упадет в приват. Чтобы изменить настройку, скажи !set "что меняешь" "на что меняешь"
, например, !set hub_name NewName
Это изменит текущее имя хаба на NewName. После смены настроек дай команду !reload
Я обычно изменяю следующие настройки: переименовываю ботов, ставлю минимальную шару (1гб), ограничиваю длину ников и сообщений юзеров. Остально по желанию :). Сообщение дня (motd) - выводится когда входишь на хаб, правила, фак - обычные текстовые файлы, находящиеся в папке с конфигом хаба (помните: what is will be the configuration folder ? (/etc/verlihub)). Там можно понаписать (или нарисовать в ASCII) чего угодно :) (возможно так же сделать разные сообщения для разных юзеров типа админов, простых смертных, операторов и т. д.) Кикать юзера (без кавычек) !kick "ip" "причина"
банить не сложнее !ban_2w "ip" "причина"
время задается цифрой с буквой: Second - s; Minute - m; Hour - h; Day - d; Week - w; Month - M; Year - y. Разбанить unban "ip" "причина"
Послать широковещательный спам можно командой !broadcast Хаб отправляется в ребут. Заходи через минуту или пошел ты нафек :))
Осталось зарегать соседа в качестве админа, чтобы самому не делать грязную работу и готово :) (5 - это группа админов) !regnewuser user 5
Ну вот и все. Нафлудил на районном форуме о хабе и народ потянулся :). P.S. Полный мануал по хабу инсталлится сюда /usr/local/share/doc/verlihub/verlihub_manual.html
Обновлено 28.05.2010 18:14
Мониторинг ICQ-переписки с помощью AimSniff
04.01.2010 20:52
Администратор
Оригинал: http://www.lissyara.su/articles/freebsd/programms/aimsniff/ Постановка задачи Необходимо создать систему, позволяющую перехватывать, хранить и отображать в удобной форме ICQ-переписку сотрудников компании. Судя по диалогам на соответствующих форумах, рассматриваемая задача периодически возникает, поэтому я описал один из способов ее решения, примененный в нашей Компании.
Исходные данные Имеется сервер с FreeBSD, через который сотрудники компании тем или иным способом (NAT, прокси-сервер и т.п.) выходят в Интернет. Для установки системы не требуется какая-либо перенастройка этого сервера. Самое главное - Вы должны тем или иным способом ограничить список портов, которые могут использовать клиенты ICQ, чтобы продвинутые пользователи не смогли "обмануть" сниффер. В качестве сниффера мы будем использовать AimSniff, для хранения перехваченныйх сообщений - сервер MySQL (процесс настройки сервера MySQL не расматривается в данной статье за исключением создания базы данных и пользователя aimsniff), для просмотра отчетов - Web Aim Sniff (WAS) и Web-сервер Apache (процесс настройки сервера Apache не рассматривается в данной статье за исключением добавления возможности отображения необходимых отчетов). Почти все перечисленное программное обеспечение будет устанавливаться из портов, поэтому я настоятельно рекомендую Вам обновить их перед выполнением действий, описанных ниже (лично я использовал FreeBSD 7.0 и последние на конец 2008 года версии портов для нее). Ссылки на источники информации будут приводиться применительно к конкретным разделам статьи.
Установка и настройка AimSniff Установку AimSniff необходимо выполнить из портов:cd /usr/ports/security/aimsniff make install clean
Сразу после завершения установки необходимо выполнить команду: aimsniff -d=bge1 --nodb
Естественно, bge1 необходимо заменить на имя внутреннего интерфейса. Данная команда запускает мониторинг пакетов ICQ, проходящих через заданный интерфейс, и отображение содержимого декодированных пакетов на экране без записи в базу данных. Если после выполнения команды вместо сообщений "INCOMINMG MESSAGE..." и "OUTGOING MESSAGE..." выдается сообщение: "Can't locate GDBM_File.pm in @INC (…) at /usr/local/bin/aimsniff line 47. BEGIN failed--compilation aborted at /usr/local/bin/aimsniff line 47., следует пересобрать Perl с поддержкой GDBM: cd /usr/ports/lang/perl5.8 make deinstall make WITH_GDBM=yes reinstall
По умолчанию AimSniff "не понимает" интересующие нас сообщения в кодировке UTF-8. Для исправления такого поведения необходимо загрузить пропатченную версию скрипта AimSniff и установить порт p5-Unicode-Map8 (если он не был установлен ранее): fetch http://www.aimsniff.com/releases/aimSniff.Cyr-005.tar.gz tar -xf aimSniff.Cyr-005.tar.gz chmod 555 aimSniff.Cyr-005.pl mv aimSniff.Cyr-005.pl /usr/local/bin cd /usr/ports/converters/p5-Unicode-Map8 make install clean
Для проверки работоспособности руссифицированного AimSniff необходимо выполнить команду: aimSniff.Cyr-005.pl -d=bge1 --nodb
После того, как первичная настройка будет завершена, необходимо создать базу данных aimsniff и пользователя aimsniff для работы с этой базой данных. Для этого нужно запустить клиент MySQL командой: mysql -u <имя пользователя-администратора> -p
ввести пароль и выполнить три SQL-запроса: CREATE DATABASE aimsniff; GRANT ALL ON aimsniff.* TO aimsniff@localhost IDENTIFIED BY 'aimsniff'; FLUSH PRIVILEGES;
После завершения работы клиента MySQL необходимо создать таблицы базы данных aimsniff: mysql -u <имя пользователя-администратора> -p aimsniff \ < /usr/local/share/doc/aimsniff/table.struct
После завершения подготовки базы данных необходимо создать файл конфигурации AimSniff. В моем случае он называется aimSniff.cfg, находится в папке /usr/local/etc и имеет следующее содержимое: dev=bge1 filter='tcp and port 3128' daemon=1 host=localhost database=aimsniff user=aimsniff password=aimsniff useSyslog=1
В данном файле заданы следующие значения параметров: dev - имя интерфейса; filter - фильтр, определяющий какие пакеты следует "вылавливать" (зависит от способа выхода клиентов ICQ в Интернет, в моем случае для выхода клиентов ICQ в Интернет используется прокси-сервер, "слушающий" порт 3128); daemon - признак работы в режиме демона; host / database / user / password - параметры доступа к базе данных; useSyslog - признак использования syslog'а для записи служебных сообщений. Самым последним этапом настройки AimSniff является доработка скрипта автозапуска, выполняемого при запуске операционной системы. Образец такого скрипта поставляется в составе AimSniff (файл rc.aimsniff в папке /usr/local/share/doc/aimsniff), однако его нужно немного адаптировать. Во-первых, нужно указать корректный интерпретатор shell в первой строке (в моем случае это /bin/sh), а во вторых заменить имя скрипта и файла конфигурации в шестой строке на: /usr/local/bin/aimSniff.Cyr-005.pl -C=/usr/local/etc/aimSniff.cfg
После этого необходимо сделать скрипт исполняемым и скопировать его в папку usr/local/etc/rc.d: cd /usr/local/share/doc/aimsniff chmod 555 rc.aimsniff cp rc.aimsniff /usr/local/etc/rc.d/aimsniff.sh
На этом настройка AimSniff заканчивается. Перезагрузите сервер, и после запуска операционной системы демон AimSniff начнет "вылавливать", декодировать и записывать перехваченные сообщения ICQ в базу данных.
Установка и настройка WAS WAS (Web Aim Sniff) - Web-интерфейс для доступа к базе данных AimSniff, написанный на языке PHP. К сожалению, пока он не добавлен в коллекцию портов FreeBSD, в связи с чем придется ставить его из исходных тестов. Перед началом установки WAS необходимо добавить в файл конфигурации необходимого виртуального хоста Apache следующие строки:Alias /was "/usr/local/www/was/" <Directory "/usr/local/www/was"> AuthName "This server require authorization!" AuthUserFile /usr/local/etc/apache/htpasswd AuthType Basic Require user <Список пользователей, которым разрешен доступ> Order deny,allow Deny from all Allow from ... Allow from ... </Directory>
Как видно из фрагмента файла конфигурации для установки WAS была выбрана папка /usr/local/www/was, доступ к которой разрешен только с определенных IP-адресов и только после прохождения процедуры Basic-аутентификации. Вам нужно подставить реальные IP-адреса в директивы Allow from и добавить необходимых пользователей в файл htpasswd и директиву Require user. О том, как это сделать, подробно написано в разделе Authentication, Authorization, and Access Control официальной документации Apache. Не забудьте перезапустить Web-сервер после внесения изменений в его конфигурацию. Когда Web-сервер будет подготовлен, необходимо загрузить, распаковать и переместить WAS в нужную папку, удалить все лишнее и сделать владельцем файлов WAS пользователя, от имени которого работает Web-сервер:mkdir /usr/local/www/was cd /usr/local/www/was fetch http://aimsniff.com/releases/was-0.1.2b.tar.gz tar -xf was-0.1.2b.tar.gz mv was-0.1.2b/* was-0.1.2b/.[a-zA-Z]* . rm -Rf was-0.1.2b was-0.1.2b.tar.gz chown -R www:www * .[a-zA-Z]*
После этого необходимо слегка подкорректировать файлы WAS. Во-первых, в файлах .header.php и index.html неоходимо исправить charset=iso-8859-1 на charset=koi8-r (это приведет к корректному выбору кодировки браузером и, соответственно, корректному отображению русских символов). Во-вторых, в файле index.php необходимо исправить img src=./typesGraph.php на img src=./images/typesGraph.php (это исправит ошибку, допущенную разработчиком WAS). В третьих, мне показалось более удобным видеть в списке сообщений не IP-адреса, а имена компьютеров локальной сети. Если Вы согласны со мной, исправьте в файле .global.php <td><B>IP</td> на <td><B>Computer</td>, а также исправьте в теле функции printMessages $rs["ip"] на ucwords(gethostbyaddr($rs["ip"])). Вообще, следует заметить, что WAS - очень "сырой" пакет. К сожалению, у меня нет времени на его адаптацию, да и PHP я знаю лишь поверхностно, поэтому в настоящий момент приходится довольствоваться тем, что есть. Все работает, хотя за эргономику я бы не поставил больше тройки. После доработки файлов WAS необходимо открыть в браузере URL http://host.company.com/was/admin.php, естественно, изменив host.company.com на имя используемого Вами виртуального хоста. В браузер будет загружена страница, на которой можно задать параметры WAS. В первую очередь необходимо изменить параметры Database User / Database Password и нажать кнопку Submit. Остальные параметры могут быть изменены или не изменены, исходя из личных предпочтений. На этом настройка WAS заканчивается.
Заключение С учетом простоты рассмотренной системы с одной стороны и огромной популярностью ICQ с другой Вам скорее всего удастся выявить не один и не два эпизода неправильного использования рабочего времени, а возможно и "слива" конфиденциальной информации. Бесспорно, система не является панацеей, однако даже несколько выявленных случаев с лихвой окупят время, потраченное на ее настройку.
Обновлено 28.05.2010 13:41
|
Построение виртуального свитча из нескольких сетевых карт с использованием Netgraph.
04.01.2010 20:47
Администратор
Построение виртуального свитча из нескольких сетевых карт с использованием Netgraph.
Итак Виртуальный свич из нескольких сетевух на нетграфе. Ситуация такая: на сервере интерфейс rl0 смотрит наружу, в локалку провайдера 10.*.*.*. а vr0 и vr1 смотрят во внутреннюю сеть 192.168.0.* Для удобства хотелось бы чтобы в домашнюю сеть смотрела одна сетевуха, а все компы домашней сети были подключены к серверу через свич. Реализуем задуманное на основе ядерного модуля ng_bridge!
Кому лень читать статью полностью, выкладываю свой скрипт. Скрипт предоставляется "As Is" - что то тут лишнее, что то кривое... Конструктивная критика приветствуется. Наличие необходимых зависимостей подразумевается. #!/bin/sh ngCtl="/usr/sbin/ngctl " Sleep="/bin/sleep" PFcmd="/sbin/pfctl" Head="/usr/bin/head" Tail="/usr/bin/tail" Echo="/bin/echo" Rm="/bin/rm"
PidFile="/var/run/mybridge.pid"
if1="vr0" if2="vr1" ifng="ngeth0" Switch="switch"
case $1 in start) if [ -s $PidFile ]; then ${Echo} Bridge already runned! exit 1 fi ${Echo} Starting bridge ${ngCtl} debug 2 ${ngCtl} mkpeer $if1: bridge lower link0 ${ngCtl} name $if1:lower $Switch ${ngCtl} connect $if1: $Switch: upper link1 ${ngCtl} connect $if2: $Switch: lower link2 ${ngCtl} connect $if2: $Switch: upper link3 ${ngCtl} msg $if1: setpromisc 1 ${ngCtl} msg $if2: setpromisc 1 ${ngCtl} msg $if1: setautosrc 0 ${ngCtl} msg $if2: setautosrc 0 ${ngCtl} mkpeer $Switch: eiface link5 ether ${ngCtl} name $Switch:link5 $ifng ${Sleep} 2 ${Head} -n7 /etc/pf.conf.bak > /etc/pf.conf ${Echo} 'int_if="'$ifng'"' >> /etc/pf.conf ${Tail} -n79 /etc/pf.conf.bak >> /etc/pf.conf
ifconfig $if1 -alias ifconfig $ifng inet 192.168.0.1 netmask 255.255.255.0
${PFcmd} -f /etc/pf.conf ${Echo} "runned" >> $PidFile
;; stop) if [ ! -s $PidFile ]; then ${Echo} Bridge is not runned! exit 1 fi ${ngCtl} shutdown $Switch: ${ngCtl} shutdown $ifng: ${Head} -n7 /etc/pf.conf.bak > /etc/pf.conf ${Echo} 'int_if="'$if1'"' >> /etc/pf.conf ${Tail} -n79 /etc/pf.conf.bak >> /etc/pf.conf ifconfig $if1 inet 192.168.0.1 netmask 255.255.255.0
${Rm} $PidFile ${PFcmd} -f /etc/pf.conf ;; *) if [ -s $PidFile ]; then ${Echo} State: Up else ${Echo} State: Down fi ;; esac
Нетграф по слухам чертовски производителен и чертовски плохо документирован, особенно на русском, так что если что не так, не обессудьте - в описанной конфигурации у меня все работает уже не один месяц. Также оговорюсь, что все беру с рабочей системы, так что-то может быть лишнее, а чего-то может не хватать.
Начнем с необходимого - с нетграфа. Вот список того, что стоит у меня:# kldstat -v |grep ng 202 ng_socket 181 ng_car 201 ng_rfc1490 200 ng_pptpgre 177 ng_async 199 ng_ppp 180 ng_bridge 198 ng_one2many 197 ng_nat 176 ng_UI 196 ng_mppc 195 ng_lmi 179 ng_bpf 194 ng_l2tp 175 ng_netflow 193 ng_ksocket 192 ng_ipfw 191 ng_ip_input 190 ng_iface 189 ng_hole 188 ng_gif_demux 187 ng_gif 186 ng_framerelay 185 ng_ether 184 ng_echo 183 ng_deflate 207 ng_vjc 206 ng_tty 205 ng_tee 204 ng_tcpmss 203 ng_ng_split 182 ng_cisco 2 1 0xc0945000 2fd4 ng_eiface.ko 1 ng_eiface # kldstat -v |grep netgraph 178 netgraph
Как видно из всего этого необходим минимум ng_eiface, который я забыл(или поленился) положить в ядро. Кроме того нам понадобятся модули ng_ether и ng_bridge. Но никто не запрещает побаловаться с ng_tee, ng_ipfw и чем-нибудь подобным для подсчета трафика, шейпинга et cetera...
После загрузки модулей нужных модулей смотрим что мы имеем# ngctl list There are 6 total nodes: Name: <unnamed> Type: eiface ID: 0000001e Num hooks: 0 Name: rl0 Type: ether ID: 00000001 Num hooks: 0 Name: vr0 Type: ether ID: 00000002 Num hooks: 0 Name: vr1 Type: ether ID: 00000003 Num hooks: 0 Name: ngeth0 Type: ether ID: 00000003 Num hooks: 0 Name: ngctl38473 Type: socket ID: 0000be26 Num hooks: 0
Мы должны видеть узлы типа ether по числу реальных интерфейсов, виртуальный интерфейс ngeth0 и соответствующий ему и узел socket, который служит для связи ngctl с ядром(это уже мои измышления. Подробнее - man ng_socket && man ngctl). Еще мы видем один безымянный узел - это родственник ngeth0, они создаются и уничтожаются только вместе.
Далее нам надо сделать мост. Но просто так его нельзя создать, его надо на что то прицепить. Прицепим хук link0 к хуку lower сетевухи vr0. Сказано - сделано. Попутно обзовем его каким нибудь нехорошим именем, типа switch# ngctl mkpeer vr0: bridge lower link0 # ngctl name vr0:lower switch
Вот тут надо остановиться и поподробнее рассказать о том, что такое хуки(hooks), узлы(nodes), какие они бывают и с чем их едят. Нетграф - это система, которая строит граф, по которому бегают данные. В графе есть узлы и ребра. Иногда узел может просто висеть в воздухе(как например узлы наших сетевух), но чаще чтобы добавить какой то узел надо его к чему ни будь прикрутить. Прикручивание происходит соединением хуков разных узлов. После соединения между хуками появляется ребро по которому могут бегать данные от одного узла к другому. Хуки бывают разные и у каждого типа узла они свои. Какие то пропускают пакеты только в одну сторону, какие то пускают только пакеты верхних сетевых протоколов, подробнее про типы узлов написано в манах, а пока про насущное. У сетевух(узлов типа ether) есть три хука - upper, lower, и orphans. Грубо говоря, lower работает с нижними протоколами(ethernet), upper - с верхними, а про orphans не помню, но он мне не вроде не подошел. У bridge - до NG_BRIDGE_MAX_LINKS(у меня на 7.2 в src/sys/netgraph/ng_bridge.h:55 говорится про 32 хука) хуков с именами типа link0 link1 link2... У eiface только один хук, - ether - через который бегают все пакеты. При обращении к локальным узлам пишем двоеточие в конце имени. Обращаться можно как по имени, так и по ID. в последнем случае вместо <node_name>: пишется [0x<node_id>]:
С теорией вроде закончил, перейдем к практике. Продолжаем строит свич: цепляем к мосту остальные хуки сетевушек# ngctl connect vr0: switch: upper link1 # ngctl connect vr1: switch: lower link2 # ngctl connect vr1: switch: upper link3
Идем далее. Сетевухи имеют свойства выпуская пакет прописывать в нем поле отправитель себя и игнорировать пакеты, предназначенные не ей. Отучаем их от этих нехороших привычек:# ngctl msg vr0: setpromisc 1 # ngctl msg vr1: setpromisc 1 # ngctl msg vr0: setautosrc 0 # ngctl msg vr1: setautosrc 0
Свич почти готов. цепляем к нему виртуальную сетевуху, чтобы общаться с ним # ngctl mkpeer switch: eiface link5 ether # ngctl name switch:link5 ngeth0
И далее самое интересное. снимаем ипы с реальных сетевух(порты свича не имеют ипов) и ставим внутренний ип(у меня это 192.168.0.1) машины на виртуальную сетевуху. Реальные карточки должны быть без ипов только в состояниии UP# ifconfig vr0 up # ifconfig vr1 up # ifconfig vr0 -alias # ifconfig vr1 -alias # ifconfig ngeth0 inet 192.168.0.1 netmask 255.255.255.0
Вроде бы и все. Смотрим что у нас получилось:# ifconfig rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether <XXX> inet 10.XXX.XXX.XXX netmask 0xffffXXX broadcast 10.XXX.XXX.XXX media: Ethernet autoselect (100baseTX <full-duplex>) status: active vr0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=2808<VLAN_MTU,WOL_UCAST,WOL_MAGIC> ether <XXX> media: Ethernet autoselect (100baseTX <full-duplex>) status: active vr1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=2808<VLAN_MTU,WOL_UCAST,WOL_MAGIC> ether <XXX> media: Ethernet autoselect (100baseTX <full-duplex>) status: active ngeth0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:00:00:00:00:00 inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 <overquoting deleted> # ngctl list There are 17 total nodes: Name: <unnamed> Type: ksocket ID: 0000be23 Num hooks: 1 Name: <unnamed> Type: pptpgre ID: 0000be22 Num hooks: 2 Name: <unnamed> Type: eiface ID: 0000001e Num hooks: 1 Name: ng0 Type: iface ID: 0000bd94 Num hooks: 1 Name: rl0 Type: ether ID: 00000001 Num hooks: 0 Name: switch Type: bridge ID: 00000014 Num hooks: 5 Name: vr0 Type: ether ID: 00000002 Num hooks: 2 Name: vr1 Type: ether ID: 00000003 Num hooks: 2 Name: mpd16513-stats Type: socket ID: 0000bd9a Num hooks: 0 Name: ngctl38842 Type: socket ID: 0000be2a Num hooks: 0 Name: mpd16513-cso Type: socket ID: 0000bd92 Num hooks: 0 Name: mpd16513-eso Type: socket ID: 0000bd93 Num hooks: 0 Name: mpd16513-lso Type: socket ID: 0000bd91 Num hooks: 1 Name: ngeth0 Type: ether ID: 0000001f Num hooks: 0 Name: mpd16513-B1-mss Type: tcpmss ID: 0000be24 Num hooks: 2 Name: mpd16513-B1 Type: ppp ID: 0000bd95 Num hooks: 3 Name: mpd16513-L1-lt Type: tee ID: 0000bd96 Num hooks: 2
# arp -a ? (10.XXX.XXX.XXX) at <XXX_MAC> on rl0 [ethernet] ------------------------``---------------------------------- ? (192.168.0.2) at <XXX_MAC> on ngeth0 [ethernet] ? (192.168.0.3) at <XXX_MAC> on ngeth0 [ethernet] ? (192.168.0.255) at ff:ff:ff:ff:ff:ff on ngeth0 permanent [ethernet]
Примечание: записи вида ? (10.XXX.XXX.XXX) at <XXX_MAC> on rl0 [ethernet] - адреса из локалки провайдера)
Как видно, сетевухи vrX смирились со своей ролью в качестве портов свича и на них не висят маки соседих машин. Все выглядит так, будто у нас есть свич, в который воткнуты кабеля машин внутренней сети и кабель от нашего компа с интерфейса ngeth0(любопытно, что ifconfig и arp по разному определяют его мак). самого свича, как и полагается, не видно
Дальше разруливаем все пакеты файером, в нем разрешаем прохождение пакетов через реальные внутренние сетевухи(или шейпим/режем по надобности), ставим нат с внешней сетевухи на ngeth0, раздача инета между сетевухами моста будет регулироваться нетграфом. В общем ведем себя так, как будто у нас появился свич и исчезли две сетевухи.
Обновлено 28.05.2010 13:42
portdowngrade - откатываем нужный порт до любой ранее версии
04.01.2010 20:41
Администратор
portdowngrade - откатываем нужный порт до любой ранее версии
Статья не моя, но хотелось чтобы всё было на одном ресурсе, чтобы вдруг чего не мучать бедный гугл. Автор статьи: DonRumata
И так, буду цитировать со своими поправками, так как его статья уже старовата, думаю автор злиться не будет. Поехали:
Иногда случается, что обновленный порт отказывается работать или несовместим с уже установленным старым софтом. Вот в этом случае иногда проще вернуть все как было, но как это сделать?
В этом случае весьма полезной оказывается утилита portdowngrade. Итак, первым делом устанавливаем эту самую утилиту:# cd /usr/ports/ports-mgmt/portdowngrade # make DEFAULT_CVS_SERVER="
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
:/home/ncvs" install clean # rehash
Далее как работает данный софт:
portdowngrade ведет логи на установленном по умолчанию cvs сервере (или определенном опцией -s ) и просматривает все изменения, потом отображает предыдущие версии и обновляет дерево портов (только выбранный порт). То есть если надо откатить большое кол-во портов, придётся откатывать по отдельности.
Например, апгрейд до php 5.2.0 прошел неудачно и остались мы без пхп совсем, хочеться вернуться на версию 5.1.x. Первым делом сообщим утилите portdowngrade(1) вывести результаты о php5.# portdowngrade lang/php5
portdowngrade 0.6 by Heiner Eichmann Please note, that nothing is changed in the ports tree unless it is explicitly permitted in step 6!
Seeking port lang/php5 ...
Found several matches: 1: lang/php5 2: lang/php5-extensions
Please choose one: 1
В данном случае выбрали версию 1. Теперь утилита обратится к CVS и предложит выбрать до какой ветки вернуть порт. Downgrading port: lang/php5
Step 1: Checking out port from CVS repository CVS root directory:
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
:/home/ncvs The authenticity of host 'anoncvs1.freebsd.org (216.38.206.185)' can't be established. DSA key fingerprint is 4d:59:19:7b:ea:9b:76:0b:ca:ee:da:26:e2:3a:83:b8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'anoncvs1.freebsd.org' (DSA) to the list of known hosts.
Step 2: Reading the port history from the CVS repository
Step 3: Analyzing the port history from the CVS repository
Step 4: Load port version numbers and present results Keys: <space> : next page d : details p : previous page <enter> : leave presentation and downdgrade if wanted
Далее пойдет список версий, с комментариями о добавлении/фиксах в продуктеnumber date portversion comment 1 2006/11/12 19:43:12 5.2.0 Update suhosin patch to 0.9.6.2 release. 2 2006/11/06 17:43:10 5.2.0 Update to 5.2.0 release. 3 2006/10/27 19:11:17 5.1.6 Update suhosin patch to 0.9.6 release. 4 2006/10/16 09:30:58 5.1.6 - fix open_basedir vulnerability in php4 and php5 [1] 5 2006/10/06 17:24:21 5.1.6 Enable suhosin patch by default. 6 2006/10/05 20:59:17 5.1.6 Added safety checks against integer overflow. 7 2006/09/29 19:11:40 5.1.6 Update suhosin patch to 0.9.5 release. 8 2006/09/10 16:37:43 5.1.6 Add support for QDBM. 9 2006/09/09 12:35:33 5.1.6 Update suhosin patch to 0.9.3 release. 10 2006/09/04 07:59:15 5.1.6 - Add experimental suhosin protection system support 11 2006/08/31 14:37:05 5.1.6 Update to 5.1.6 release. 12 2006/08/18 16:41:29 5.1.5 Update to 5.1.5. 13 2006/08/18 16:40:18 5.1.4 Allow php5-ldap to be built with SASL support enabled. 14 2006/07/11 13:21:54 5.1.4 Add databases/php5-oci8: 15 2006/05/23 06:19:19 5.1.4 Try to fix build on 4.X. 16 2006/05/18 22:17:32 5.1.4 - Holy Batman! Chase rerolled distfile. Only chance is an addition of a file 17 2006/05/10 14:46:43 5.1.4 Chase gmp library and bump PORTREVISION. Total lines: 152. Command:
Далее нажимаем Enter, или Пробел для прокрутки списка(не приходилось) и выбираем номер версии до которой нужно откатиться, на пример до версии 5.1.6 - номер 3 в списке.Enter version number to change port to (0: exit): 3
Далее подтверждаем выбор нажатием Enter и ждём :)Step 5: Checking out choosen date of the port from the CVS repository
Step 6: Modifying the port Port: lang/php5 at : 2006/10/27 19:11:17 Type 'yes' to bring the port to the state of the date above or 'no' to exit without changing anything. Note, that this only changes the port, not the installed software! yes or no:yes
Подтверждаем физический откат порта, пишем "yes", что нам и нужно. Если мы хотим посмотреть изменения, без физического отката, пишем "no"
Вот собственно и произошел откат порта. Добиваем наше дело до конца:# portupgrade -f php5*
Ну и проверяем какая картина получилась:# pkg_info | grep php5
Вот собственно и всё, очень полезная утилита, выручила при откате erlang(ejabberd не совместим с erlang-r13*, только с ветками r12 и ниже)
Обновлено 28.05.2010 13:42
|