ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Архивные статьи в категории ‘FreeBSD’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Наткнулся на статью, т.к. сам частенько занимаюсь клонированием винтов, решил сохранить сей труд.

Итак сама статья:

Любой из нас хорошенько задумывается над тем, как правильно разбить HDD
при установке FreeBSD. Действительно, потом будет весьма проблематично
изменить размер патриции при необходимости. Проблема заключается в том,
что на жестком диске находятся, так называемые, слайсы, а уже в них
инкапсулированы партиции. Это не всегда так, потому что есть еще и
второй метод разметки HDD без слайсов, но в данной статье он не
рассматривается. Популярные программы для работы с разделами HDD, такие
как Partition Magic, Acronis могут удалить слайс,
скопировать/переместить его посекторно, но никак не заглянуть внутрь и
изменить размер той или иной партиции.

Итак, есть система (далее, система — это установленная ОС FreeBSD,
включающая в себя MBR, корневой раздел, SWAP, дополнительные разделы
/tmp, /var и т.д.) на жестком диске объемом 80 ГБ.

Задача: перенести систему на другой жесткий диск объемом 250 ГБ, увеличивая размеры
партиций пропорционально увеличению объема HDD. В нашем случае это
250-80=170 ГБ.

Вторая часть задачи: повторять эту процедуру автоматически, с определенным интервалом

(для создания резервной копии системы). В обоих случаях, нужно скопировать систему полностью, т.е. не
только файлы и каталоги, а и загрузочный сектор, загрузчик для сохранения возможности загрузки системы с полученной копии.

Для выполнения задачи воспользуемся утилиткой CloneHDD. Взять ее можно
здесь: http://sourceforge.net/projects/clonehdd Качаем дистрибутив последней версии и выполняем:

tar -zxvf clonehdd-2.0.3.tar.gz -C /home/user/

Можно сделать проще — установить из портов:

make install -C /usr/ports/sysutils/clonehdd

После установки мы видим грозное предупреждение о том, что запуская
clonehdd нужно семь раз отмерить а потом уже отрезать =)) Но все не так
страшно, как кажется: программа изначально рассчитана так, что данные на
исходном винте никогда и ни при каких условиях не подвергнутся записи.
Это сообщение больше относится к нашему новому, чистому винту. Поэтому,
если вы купили чистый винт и хотите на него переехать, то вряд ли
clonehdd чем то сможет навредить.

Работа с программой предельно проста. Для осуществления задуманного нам
нужно всего один раз запустить утилиту с нужными параметрами. Вот о
параметрах теперь поподробнее.

-src=[device] — Это исходный девайс на котором находится наша система.
Чтобы узнать имя текущего винта, нужно выполнить команду:

/sbin/mount

Мы увидим таблицу, в первой колонке которой указаны имена примонтированных
устройств. Вот, например:

/dev/ad0s1f

/dev/» это папка, в которой находятся все устройства, «ad0» это нужное нам имя самого винта,

«s1» слайс под номером 1, «f» имя партиции на слайсе.

Вывод: значение этому параметру присваиваем «ad0»

-dst=[device] Это девайс назначения. Именно сюда переедет ваша система.
Узнать его можно, например, командой:

cat /var/run/dmesg.boot

На экране появится список сообщений ядра при загрузке. Обычно, сообщения о
найденных винтах находятся в самом конце. Ни одна партиция не должна
быть примонтирована с этого винта, иначе CloneHDD выдасть ошибку.

-swap=[size in MB] Размер будущего раздела SWAP.

-freespace=[Required free space on dst partition] Если клонирование
производится на винт меньшего размера, на DST винте после клонирования
должен остаться небольшой кусочек свободного места, для того чтобы винт
небыл на 100% заполнен после клонирования. По умолчанию — это 100МБ.
Этим параметром его можно изменить.

-safe [Required safe mode for `dump`] Включает режим безопасного
копирования. В этом режиме сначала создается образ каждого раздела в
папке .snap, а потом делается перенос. В «небезопасном» режиме,
копирование производится на лету. Вся проблема в том что размер этого
образа равен размеру данных на разделе. А т.к. образ будет записан на
тот же раздел с которого производится копирование, на разделе долно быть
минимум 50% свободного места. Вернемся к параметру -safe. Если параметр
отсутствует, клонирование будет произведено в безопасном режиме если
достаточно свободного места или в небезопасном режиме если этого места
недостаточно. Если параметр задан, небезопасного копирования не будет, и
разделы с недостатком свободного места склонированы не будут.

-fstab=[Device name to write in fstab] После клонирования будет
сгенерирован файл /etc/fstab на полученном винте. Параметр задает Имя
девайса, который будет записан в этот файл. По умолчанию: девайс,
заданный параметром -src.

-force [Do not ask any questions] При выполнении второй части задачи,
утилита будет выполняться из cron’а и нам не нужны лишние вопросы, в
ходе выполнения программы. Данный параметр отключает интерактивный режим
и вопрос «Are you sure?» задаваться не будет.

Вернемся к нашей задаче. Мой исходный винт: ad0, новый винт: ad1.

srv# clonehdd -src=ad0 -dst=ad1 -swap=1024
Clone parameters:
Source partition: /dev/ad0
Dest partition: /dev/ad1
Swap size: 1024 MB
Safe dumping: Disabled
Free space on DST: 100 MB
Fstab device name: ad0

[OK] Found devices for clone procedure
[OK] DST partition is not in use

Source partition
/usr size: 64489MB, used: 10563MB
/var size: 4958MB, used: 144MB
/ size: 1483MB, used: 82MB
/tmp size: 1483MB, used: MB
Total: 72415 MB, used: 10790 MB

[OK] Device ad1 has enough free space
Wait 10 seconds before start: 10 9 8 7 6 5 4 3 2 1
[OK] Device /dev/ad1 made clean
[OK] New slice created

Destination device partitions:
SWAP size: 1024 MB
/ size 1588 MB
/tmp size 1588 MB
/var size 5306 MB
/usr size 69026 MB

[INF] Last partition were increased for 3 blocks
[OK] Partitions were created successfully

[OK] Partition /tmp was formatted successfully
Starting dump/restore procedure… [OK]

[OK] Partition /var was formatted successfully
Starting dump/restore procedure… [OK]

[OK] Partition /usr was formatted successfully
Starting dump/restore procedure… [OK]

[OK] Partition / was formatted successfully
Starting dump/restore procedure… [OK]

[OK] file /etc/fstab generated successfully

Видим сообщения об успешном клонировании. Теперь сделаем выполнение
задачи по расписанию: выполнять каждый день в 2 часа ночи клонирование
рабочего винта на запасной. Добавляем в файл /etc/crontab строку

0 2 * * * root clonehdd -src=ad0 -dst=ad1 -swap=1024 -force >/dev/null

Обратите внимание, что >/dev/null убивает не все сообщения. Только
обычные сообщения будут опущены. Все сообщения об ошибках отсылаются на
выход STDERR, не попадают на /dev/null и будут отправлены cron’ом по
почте системному администратору.

Автор: Bart Tapolsky, Оригинал тут

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 5, среднее: 4,40 из 5)
Загрузка...
Отправить на почту Отправить на почту

Иногда требуется выполнять команды на удаленных серверах, запускать какие либо скрипты, выводить отработку команд в web-интерфейс.

Например для обновлений правил firewall или вывода результата отработки какой либо команды в web-интерфейс, обновления содержимого файлов на сервере, мониторинг температуры и т.д. и т.п. список можно продолжать бесконечно.

Для реализации этой задачи нам понадобится две вещи:

  1. порт ucspi-tcp
  2. небольшой perl скрипт

Приступим. Начнем с установки порта:

/usr/ports/sysutils/ucspi-tcp

ucspi-tcp is a set of command-line tools for building TCP-based
client/server applications.  They are compliant to UCSPI, the
UNIX Client-Server Program Interface.  UCSPI tools are available
for several different types of networks.
WWW: http://cr.yp.to/ucspi-tcp.html

cd /usr/ports/sysutils/ucspi-tcp
make install clean

После установки нам необходимо создать файл, в котором укажем какие IP-адреса или подсети, которые смогут обращаться к нам, например это будут:

  • 127.0.0.1
  • 10.100.1.0/24

для этого создадим файл /etc/tcp.server со следующим содержанием:

127.0.0.1:allow,RELAYCLIENT=»»
10.100.1.:allow,RELAYCLIENT=»»

Затем сформируем cdb файл:

/usr/local/bin/tcprules /etc/tcp.server.cdb /etc/tcp.server.tmp < /etc/tcp.server

Теперь напишем небольшой скрипт на perl, /usr/local/sbin/scripts/serv_main.pl.
Скрипту будут передаваться команды, вида:

  • cmd=X;
  • cmd=X PARAMS;

Можно передать все команды и одной строкой, разделяя их символом «;»

Для примера покажу обработку 3-х переданных команд:

  • cmd=1;                                      — вывод списка существуюших интерфейсов tun на данном сервере
  • cmd=2 -h 192.168.1.15;    — добавляем этот IP в firewall ipfw
  • cmd=3 ad4;                            — выводим температуру HDD
#!/usr/bin/perl                                                                                                                     

$scr_path="/usr/local/sbin/scripts";
$cr="\r\n";
$addr=$ENV {TCPREMOTEIP};
$date=`date "+[%Y-%m-%d %H:%M:%S]"`;
chomp($date);
#Открываем лог файл для записи
open(LOG,">>/var/log/serv.log");
if (chk($addr)){
        #Проверяем с какого IP к нам подключились и если его нет в списке (см. функцию chk), то запрещаем выполнение команд
        print "Forbidden".$cr;
        print LOG $date." [".$addr."]: Forbidden\n";
}else{
        #Скрипту может передаваться список команд разделенных символом ";"
        $arg=<STDIN>;
        @a=split(';',$arg);
        pop @a;
        print LOG $date." [".$addr."]: ".@a."\n";
        #Разбираем в цикле переданные команды
        foreach $par (@a){
                $e.="[".++$nn."]: ".$par."\n";
                $l.=$par." ";
                #Проверяем синтаксис переданной команды и разбираем параметры
                if ($par=~/cmd=(\d{1,2})\s*([\w.]*)/){
                        $b=$1;
                        if ($b eq "1"){
                                #Переданная команда cmd=1;
                                #Выполняем функцию cmd1
                                cmd1();
                        }elsif ($b eq "2"){
                                #Переданная команда cmd=2 -h 192.168.1.15;
                                if ($par=~/^cmd=2\s\-h\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/){
                                      $ip=$1;
                                      cmd2($ip);
                                }
                        }elsif($b eq "3"){
                                #Переданная команда cmd=3 ad4;
                                if ($par=~/^cmd=3\s(ad\d{1})$/){
                                           hdd_temp($1);
                               }
                        }
                }
        }
}
close LOG;                                                                                                                          

sub chk {
        #Проверяем IP с которого пытаются отдать команду
        my $ip=shift;
        if ($ip eq "127.0.0.1") {return 0;}
        if ($ip eq "10.100.1.2") {return 0;}
        return 1;
}
sub cmd1 {
    #Выводим список существующих на сервере интерфейсов tun
    @a=`netstat -rn | /usr/bin/grep tun`;
    foreach $tun (@a){
        chomp($tun);
                if ($tun=~/(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s+\S+\s+\S+\s+\S+\s+\S+\s+(tun\d+)/){
                        print $1.";".$2."\n";
                }
    }
}
sub cmd2 {
    #Добаляем переданный IP в firewall, в таблицу table(10)
    my $ip=shift;
    `/sbin/ipfw table 10 add $ip/32 0`;
     print "IP $ip added\n";
}
sub hdd_temp {
    #Выводим температуру жесткого диска
    my $hdd=shift;
    $hdd_temp=`/usr/local/sbin/smartctl -a /dev/$hdd | /usr/bin/grep '194 Temper' | /usr/bin/awk '{ print $10 }'`;
    print $hdd_temp;
}

На этих трех простых примерах можно понять что передавать и как обрабатывать полученные команды. Поле для вашего творчества неограниченно. Вы можете отрабатывать команды описанные в самом serv_main.pl или передавать эти параметры другим скриптам на сервере.

Сделаем файл /usr/local/sbin/scripts/serv_main.pl исполняемым:

/bin/chmod a+x /usr/local/sbin/scripts/serv_main.pl

Можете запустить его руками, убедиться, что он запускается и не содержит ошибок, запустим:

/usr/local/sbin/scripts/serv_main.pl

Затем введите команду:

cmd=1;

На экран будет выведен результат отпработки функции cmd1()

Подготовим стартовый скрипт 0_zstart.sh и расположим его в /usr/local/etc/rc.d:

#!/bin/sh

case "$1" in
start)
         ip=10.100.1.15
         port=5555
         path=/usr/local/sbin/scripts
         /usr/local/bin/tcpserver -v -H -R -l 0 -c 10 -x /etc/tcp.server.cdb ${ip} ${port} ${path}/serv_main.pl &
         echo ' Zserver started...'
         ;;
stop)
         /usr/bin/killall -9 tcpserver
         echo ' Zserver stoped...'
         ;;
*)
         echo "Usage: `basename $0` {start|stop}" >&2
         ;;
esac

Этот sh скрипт запускает tcpserver на порту 5555 и IP-адресе 10.100.1.15, принимает наш perl скрипт serv_main.pl в кач-ве параметра и ему (perl скрипту) tcpserver будет передавать полученные команды.

Запустим наше творение:

/usr/local/etc/rc.d/0_zstart.sh start

Проверим его наличие в списке процессов:

/bin/ps -ax | grep tcpserver

1251 con- I      0:00.24 /usr/local/bin/tcpserver -v -H -R -l 0 -c 10 -x /etc/tcp.server.cdb 10.100.1.15 ……..

Ну и убедимся, что порт 5555 прослушивается:

/usr/bin/sockstat | grep 5555
root     tcpserver  1251  3  tcp4   10.100.1.15:5555       *:*

Теперь можно испытать нашу конструкцию, например telnet`ом.

Для этого запустим команду telnet с хоста, IP которого разрешен для выполнения команд, в моем примере это хост 10.100.1.2.

telnet 10.100.1.15 5555

Trying 10.100.1.15…
Connected to 10.100.1.15.
Escape character is ‘^]’.

Если мы подключились, то теперь можно отдать одну из наших запрограммированных команд:

cmd=1;

Ну и увидим результат её отработки:

192.168.2.12;tun37
192.168.2.17;tun25
192.168.2.18;tun44
192.168.2.20;tun76
………………………….
192.168.2.228;tun126

После полной отработки команды произойдет отключение от сервера:

Connection closed by foreign host.

Вот и все.  Теперь команды можно отдавать, например:

  • из консоли telnet`ом
  • из другого perl скрипта используя IO::Socket
  • из web-интерфейса — php скрипта используя Sockets Support

Этот клиент-сервер ограничен только вашей фантазией.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Авторы:  Панфилов Алексей (lehis (at) subnets.ru) и Николаев Дмитрий (virus (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 1, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Исходные данные

  1. Несколько vlan на сisco catalyst 3560G. В качестве примера будут использоваться vlan 10,20 и 30
  2. Сервер на FreeBSD с работающим trafd и сетевым интерфейсом «смотрящим» в cisco catalyst 3560G

Задача

Получить статистику по трафику для каждого из вланов по отдельности.

Вариант решения

1. Настройка зеркалирования трафика на 3560.

Предполагаем, что интерфейс сервера соединён с портом Gi0/1 на 3560.

Настраиваем порт:
c3560# conf t
c3560(config)# interface GigabitEthernet0/1
c3560(config-if)# description mirror_server
c3560(config-if)# switchport trunk encapsulation dot1q
c3560(config-if)# switchport trunk allowed vlan 10,20,30
c3560(config-if)# switchport mode trunk
c3560(config-if)# exit
c3560(config)# exit
c3560# wri

Создаём сессию span:
c3560# conf t
c3560(config)#monitor session 2 source vlan 10 , 20 , 30 both
c3560(config)#monitor session 2 destination interface Gi0/1 encapsulation dot1q
c3560(config)# exit
c3560# wri

На вторую команду коммутатор может сказать что-то похожее

% Warning: One or more specified dest port does not support requested encapsulation.

Однако порт нормально добавляется в сессию
c3560# sho monitor session 2

Session 2
---------
Type              : Local Session
Source VLANs      :
Both          : 10,20,30
Destination Ports : Gi0/11
Encapsulation : DOT1Q
Ingress : Disabled

2. Настройка интерфейсов сервера и trafd
Предполагаем, что на сервере для получения зеркалируемого трафика используется интерфейс bge1.

Создаём vlan’ы на интерфейсе bge1:

/sbin/ifconfig bge1 up
/sbin/ifconfig vlan10 create vlan 10 vlandev bge1
/sbin/ifconfig vlan10 up promisc
/sbin/ifconfig vlan20 create vlan 20 vlandev bge1
/sbin/ifconfig vlan20 up promisc
/sbin/ifconfig vlan30 create vlan 30 vlandev bge1
/sbin/ifconfig vlan30 up promisc
/sbin/ifconfig bge1 -promisc

Устанавливаем trafd:

cd /usr/ports/net-mgmt/trafd
make install clean

После установки смотрим, что он установился:

/usr/sbin/pkg_info | grep trafd
trafd-3.0.1_2 The BPF Traffic Collector

Описываем trafd в /etc/rc.conf (параметры будут использоваться стартовым скриптом /usr/local/etc/rc.d/trafd.sh.sample):

trafd_enable=»YES»
trafd_ifaces=»vlan10 vlan20 vlan30″
trafd_flags=»-r -p»

Стартуем trafd:
/usr/local/etc/rc.d/trafd.sh.sample start

И наблюдаем запущенные процессы:

/bin/ps -ax | grep trafd

93173  ??  Ss     0:04.28 /usr/local/bin/trafd -i vlan10 -r -p
93175  ??  Ss     0:12.64 /usr/local/bin/trafd -i vlan20 -r -p
93177  ??  Ss     2:05.00 /usr/local/bin/trafd -i vlan30 -r -p

Добавляем в планировщик (/etc/crontab) периодический сброс накопленной trafd информации:

*/10 * * * * root /usr/local/bin/trafdump vlan10; sleep 2; /usr/local/bin/trafsave vlan10
*/10 * * * * root /usr/local/bin/trafdump vlan20; sleep 2; /usr/local/bin/trafsave vlan20
*/10 * * * * root /usr/local/bin/trafdump vlan30; sleep 2; /usr/local/bin/trafsave vlan30

Логи будут сохраняться в директории /usr/local/var/trafd как отдельные файлы вида trafd.vlan10, trafd.vlan20, trafd.vlan30 в бинарном формате. Каждые 10 минут будет происходить дописывание вновь сбрасываемого трафика в эти файлы, т.е. append.
Файл с историей дампа трафика по умолчанию: /var/log/traffic.log

Если сервер не является шлюзом, во избежание закольцовывания трафика и появления duplicate пакетов лучше отключить
форвардинг:

/sbin/sysctl net.inet.ip.forwarding=0
net.inet.ip.forwarding: 1 -> 0

а также терминировать полученные зеркалированные пакеты на сервере, запретив их хождение через вланы каким-либо файрволлом, например ipfw (правила лучше разместить где-нибудь вначале):

/sbin/ipfw add 10 deny ip from any to any via vlan10
/sbin/ipfw add 20 deny ip from any to any via vlan20
/sbin/ipfw add 30 deny ip from any to any via vlan30

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: MadMax
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 4,25 из 5)
Загрузка...
Отправить на почту Отправить на почту
Утилита chaosreader (http://chaosreader.sourceforge.net) позволяет выделить пользовательские данные из лога tcpdump.
Например, можно сохранить переданные по FTP файлы, картинки запрошенные по HTTP, сообщения электронной почты переданные по SMTP,
ключи переданные в SSH сессии.
Дополнительно поддерживается выделение данные из дампа трафика различных туннелей, 802.11b и PPPoE.

Передав утилите chaosreader на вход накопленный дамп, на выходе получим html файл с анализом пересылок
и ссылками на встретившиеся в сессии файлы.

Собираем лог:

   tcpdump -s9000 -w output1

Анализируем лог и выделяем все встретившиеся файлы:

   chaosreader -ve output1

Анализируем только ftp и telnet трафик:

   chaosreader -p 20,21,23 output1

Запускаем в режиме сниффера, сбрасывающего накопленные сессии 5 раз по 2 минуты каждая:

  chaosreader -S 2,5

В комплект входит утилита replay, позволяющая вторично проиграть сценарий перехваченного telnet, rlogin, IRC, X11 или VNC сеансов.

Другие похожие утилиты:

* pcapsipdump (http://sourceforge.net/projects/psipdump) -  выделение из потока SIP и RTP данных
для последующего прослушивания, каждая SIP сессия сохраняется в отдельный файл.

* smbsniff (http://www.hsc.fr/ressources/outils/smbsniff) - позволяет сохранять переданные по SMB/CIFS
протоколу файлы, присутствующие в перехваченном трафике;

* Tcpreplay(http://tcpreplay.synfin.net) - набор утилит для повторного инициирования сессий
на основе перехваченного трафика.

Оригинал: http://www.opennet.ru/tips/info/1968.shtml
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 2, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Для работы этого примера необходимо иметь подгруженный ng_ipfw.ko

Убедиться в его наличии можно командой:

/sbin/kldstat

Id Refs Address    Size     Name
1   11 0xc0400000 4eddc0   kernel
..........................
7    1 0xc9e22000 2000     ng_ipfw.ko

Если у вас ng_ipfw.ko не загружен, то подгрузите его:

/sbin/kldload /boot/kernel/ng_ipfw.ko

После того как ng_ipfw.ko подгружен, в выводе команды:

/usr/sbin/ngctl list

появится строчка вида:

Name: ipfw Type: ipfw ID: 00000023 Num hooks: 2

Без загруженного ng_ipfw.ko при попытке выполнить команды ngctl`а вы будете получать сообщение:

ngctl: send msg: No such file or directory

а при попытке добавить правило в ipfw получите:

ipfw: getsockopt(IP_FW_ADD): Invalid argument

Настройка ng_nat проста и сводится к простенькому скрипту:

Для примера будем NAT`ить подсеть 172.16.5.96/27 через IP-адрес 192.168.20.8 на внешнем интерфейсе fxp0.

#!/usr/bin/perl

$ip='192.168.20.8';
$iface='fxp0';
$net='172.16.5.96/27';
$cmd=sprintf("/usr/sbin/ngctl -f - << -EOF
mkpeer ipfw: nat 60 out
name ipfw:60 nat
connect ipfw: nat: 61 in
msg nat: setaliasaddr %s
",$ip);
system($cmd);

###добавляем необходимые правила в firewall
$cmd=sprintf("/sbin/ipfw add 1000 netgraph 61 all from any to %s via %s in",$ip,$iface);
system($cmd);
$cmd=sprintf("/sbin/ipfw add 1010 netgraph 60 all from %s to any via %s out",$net,$iface);
system($cmd);

где:
$ip — IP адрес, через который будет работать нат (который смотрит в интернет)
$iface — ваш внешний интерфейс
$net — IP подсеть, которую мы собираемся NAT`ить
netgraph — правило в firewall, аналогично divert, только перенаправляет трафик не в socket, а в ноду netgraph, 60, 61 — адреса исходящего и входящего хуков.

Если делать руками в консоле, то команды выглядят следующим образом:

###создаем ноду nat и подключаем к ipfw
/usr/sbin/ngctl mkpeer ipfw: nat 60 out 
###даем ноде имя "natA" 
/usr/sbin/ngctl name ipfw:60 natA   
###соединяем входящие и исходящие хуки  для "natA"
/usr/sbin/ngctl connect ipfw: natA: 61 in 
###посылаем управляющее сообщение в виде IP адреса, через который будет работать нат.   
/usr/sbin/ngctl msg natA: setaliasaddr 192.168.20.8   

Если все работает, то мы можем посмотреть вывод следующей команды:

#test:~:ngctl show natA:
Name: nat             Type: nat             ID: 00000029   Num hooks: 2
Local hook      Peer name       Peer type    Peer ID         Peer hook
----------      ---------       ---------    -------         ---------
in                     ipfw            ipfw         00000001        61
out                   ipfw            ipfw         00000001        60

Также можно посмотреть все целиком:

#test:~:ngctl list

Как выключить этот NAT ?

Просто выполнить команду:

#test:~:ngctl shutdown natA:

Заметка:

Если вы хотите запустить NAT на нескольких внешних IP-адресах, но не забывайте изменять имена нод (в примере natA) и номера хуков (в примере 60,61) т.к. они должны быть уникальны для каждого из процессов.

Не путайте in и out в создаваемой ноде и правилах ipfw.

Чтиво:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Folio
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 8, среднее: 3,50 из 5)
Загрузка...
Отправить на почту Отправить на почту