Дистрибутив BRGROUTE (v4.3)

Что нового

Версия 4.3-1

Версия 4.3

Версия 4.2-1

Версия 4.2

Версия 4.1-2

Версия 4.1-1

Версия 4.1

Назначение дистрибутива

В основном дистрибутив рассчитан для использования в концентраторах IPLN и для объединения Ethernet сетей при использовании адаптеров IOLANET, но может и использоваться для организации связи между сетями без адаптеров  фирмы IOLA. В простейших вариантах может быть установлен на floppy-диск (драйвера для пары адаптеров и поддержка iptables). Для использования в более расширенных конфигурациях требуется либо небольшой flash-диск либо жесткий диск. Минимальное требование по памяти 8Мб, процессор 486. Число адаптеров поддерживаемых конфигурацией до 8-ми. Позволяет организовывать связь между сегментами как в режиме роутера так и в режиме моста.

Состав дистрибутива

Последние варианты дистрибутива можно взять на сервере http://www.iola.ru . Дистрибутив называется brgroute_x.x.zip, где x.x номер версии.  В архиве находятся следующие файлы:

Создание загрузочного floppy-диска

Разархивируйте файл с поддиректориями. Запустите mkdisk.bat для создания диска, если компьютер под управлением DOS или Windows или mkdisk.sh, если под управлением LINUX. Этот командный файл создаст вам загрузочный диск. После создания на диске должны быть следующие файлы: ldlinux.sys, syslinux.cfg, kernel, bootdisk/netadd.rc, bootdisk/netparm, rootfs.gz, директория bootdisk/upgrade,  bootdisk/upgrade/etc и файлы в этой директории.

В директории modules найдите поддиректории с файлами нужных вам адаптеров, и их содержимое скопируйте в директорию upgrade. Список соответствия между директориями названиями драйверов и названием плат находится в файле modules.lst

Затем вам нужно будет только настроить режим его работы.

ЗАМЕЧАНИЕ:

В целях экономии места на дискете все файлы upgrade.??? вы можете слить в один файл upgrade.all .

Загрузка с жесткого диска

Загрузка системы с винчестера допускается из первого DOS раздела master диска .

  1. Скопируйте содержимое директории img вместе с поддиректориями в корень диска.
  2. Сформируйте поддиректорию upgrade, скопировав в нее нужные вам драйвера и пакеты
  3. Установите нужные параметры в netparm
  4. Если требуется, установите нужные параметры файлов для директории etc
  5. Для загрузки запустите load.bat

ЗАМЕЧАНИЕ:

Для некоторых адаптеров требуется установка библиотеки mii. Поэтому при установке адаптера загляните в файл modules.lst, в нем такие адаптеры помечены "(need mii)", или загляните в файл upgrade для адаптера, в нем если нужен mii должна быть строка: 

#~depend mii

Если эта библиотека нужна, скопируйте в директорию upgrade директорию mii.

Если файл в формате Unix, для удобства редактирования из среды ДОС, файлы в директории etc можно перевести в ДОС формат утилитой crlf.  При загрузке они будут конвертированы в нужный формат обратно.

Первый вход в систему

Для первого входа в систему используется имя пользователя root, пароль iola.

После подключения вы можете изменить пароль командой passwd, добавить или удалить пользователя командами adduser и deluser. Все эти команды меняют файлы только на ram-диске. Для постоянного сохранения, вам нужно дать команду save.

ВАЖНОЕ ЗАМЕЧАНИЕ:

Если вы изменили какой-нибудь файл из директории /etc, который был загружен до этого из директории upgrade/etc, то для сохранения файлов на жесткий диск или дискету вам нужно дать команду save. Иначе после перезагрузки изменения будут потеряны. Команда save сохраняет только, те файлы которые устанавливались процедурой copyetccfg, поэтому, если вы будете добавлять свои файлы для этой директории, используйте эту же процедуру. В качестве примера смотрите файл upgrade.etc.

Описание файла конфигурации

Файл конфигурации находится в директории дискеты /etc и называется netparm. В файле определяется ряд переменных, которые задают режим работы и параметры драйверов. Файл может создаваться в формате DOS. При загрузке он преобразовывается в формат UNIX.

GLB_CFGVER= {0|1|2}  - задает версию конфигурационного файла. Для этого дистрибутива должна быть 2.

GLB_TMPSIZE=3000  - задает максимальный размер временной файловой системы. Эта файловая система используется для хранения всех модулей и пакетов, которые устанавливаются из директории upgrade, а также для хранения временных файлов и журналов, для вызова утилит Linux. По умолчанию 3560. Файловая система использует память динамически, т.е. в текущий момент будет использовано столько памяти - сколько нужно для хранения записанных на нее файлов, а не значение заданное в GLB_TMPSIZE.

GLB_HOSTNAME= "<имя машины>"  - задает имя машины.

GLB_LOG={0|1} - управление сообщениями для скриптов загрузки. 0 - на консоль (по умолчанию), 1 - в файл /var/log/messages.

GLB_SSHD={0|1} - запускать или нет сервер sshd. Сервер изначально присутствует в корневой файловой системе и установка пакета в директорию upgrade не требуется. В качестве сервера sshd используется пакет dropbear. При первом запуске генерируются ключи, что может занять некоторое время на медленных машинах. После этого ключи сохраняются в директории upgrade/etc файл db_key.gz. Если вы используете sshd и грузитесь с дискеты, оставьте пару килобайт для этого файла. По умолчанию не запускается.

GLB_FIREWALL={0|1|2} - если параметр задан и равен 1 или 2, то во время загрузки сети вызывается скрипт firewall, который производит настройку брандмауэра. Брандмауэр используется на базе  iptables.  Принцип работы, дополнительные настройки и скрипт будут описаны ниже.

ЗАМЕЧАНИЕ:

Для поддержания совместимости при установке пакета iptables, скрипт firewall копируется не в директорию bootdisk\upgrade, а в директорию bootdisk.

GLB_IPLNCFG={1|2|3} - задает режим для запуска iplncfg в режиме сервера. Действует при установленном драйвере для плат ipln.  По умолчанию 1.

GLB_GATEWAY=192.168.1.2 - задает IP-адрес шлюза по умолчанию. Параметр может принимать значение ""(по умолчанию). В этом случае шлюз не задается. 

Управление журналами: 

GLB_KLOGD={0|1} - запускать или нет сервер klogd. По умолчанию 0

GLB_KLOGDP="" - параметры передаваемые серверу klogd. По умолчанию "-c 3". 

GLB_SYSLOGD={0|1} - запускать или нет сервер syslogd. По умолчанию 0

GLB_SYSLOGDP="" - параметры передаваемые серверу syslogd. По умолчанию "-m 0 -s 32 -b 1"  (-s 32 - размер журнала в килобайтах, -b 1 - число файлов). 

GLB_VARLOG="<путь в linux для журнала>" - если вы грузитесь с жесткого диска и хотите хранить журналы ( по умолчанию они во временной файловой системе м не сохраняются при перезагрузке) вы можете создать директорию на жестком диске и указать на нее путь в linux в этой переменной. Тогда журналы будут попадать в эту директорию. Например, если вы грузитесь с диска C: и хотите чтобы журналы попадали в c:\log задайте GLB_VARLOG="/mnt/fd/log". По умолчанию параметр не задан.

Параметры DNS: 

Параметры действуют только при установленном пакете dnsmasq2.

GLB_DNSPARM=""  - дополнительные параметры для программы dnsmasq
GLB_DNSNAME0="" - IP-адрес 1-го сервера DNS
GLB_DNSNAME1="" - IP-адрес  2-го сервера DNS
GLB_DNSNAME2="" - IP-адрес  3-го сервера DNS

Управление com-портами: 

Вместо SX нужно подставлять S0 для com1 и S1 для com2.

GLB_TTYSX={""|"console"|"ppp"} - задает как будет использоваться порт. "" - не используется, "console" - для консоли, "ppp" - для организации подключения по ppp (требуется установка пакета ppp). По умолчанию для com1 - "console", для com2 - "". Консоль поддерживается только на одного из портов. Если задано для обоих - то будет запущено только для com1.

GLB_TTYSXSPD=9600 - задает скорость связи по порту, используется и для  режима console и для ppp.

GLB_TTYSXDEV={""|"DEVX"} - для режима ppp, ссылка на описание устройства DEVX, которое описывает параметры TCP/IP для данного порта. Описания будет приведено ниже. Вместо DEVX  нужно подставить имя из диапазона DEV0 - DEV7.

GLB_TTYTERM="vt100" -  описывает терминал используемый для консоли. По умолчанию "vt100". Так же допускается "linux". 

Управление сетевыми устройствами: 

Далее описаны параметры в виде  DEVx_YYYY,  вместо x - номер устройства (0 - 7), вместо YYYY имя параметра. Если в параметре нет строки DEVx, параметр глобальный. Символьные параметры могут заключатся в кавычки, численные или адреса TCP/IP задавайте без кавычек.

DEVx_NAME=ne2k-pci - задает имя модуля  драйвера.  Список соответствия между директориями названиями драйверов и названием плат находится в файле modules.lst.  Имя может отсутствовать в случае, описанном в замечании. В качестве имени может быть ppp, pppoe, adsl,  vpn.  ppp -  для описания соединений по ppp, pppoe - для описания соединений к pppoe серверу, adsl - для описания соединения pppoe клиента, vpn - для описания соединения клиента pptp . Для этих имен параметры обрабатываются по другому, чем для драйверов сетевых карт.  Если в списке нет драйвера для вашей карты, его можно добавить использовав процедуру модификации системы.

DEVx_PARM= - через эту строку  можно передать параметры для модуля DEVx, если они нужны. Например, если адаптеру Ethernet нужно передать параметры портов ввода/вывода  и прерывание: DEV0_PARM="io=0x310 irq=10", или параметры для iola25: DEV1_PARAM="type=4 node=0x01 io=0x150 irq=10"

DEVx_IF=<интерфейс> - задает имя устройства. По умолчанию для DEV0 - eth0, для DEV1 - eth1 для остальных "". Для соединения  ppp должен быть "", для pppoe - задает интерфейс к которому линкуется pppoe сервер. 

DEVx_MODE={"ROUTER"|"BRIDGE"} - задает режим работы драйвера. BRIDGE - активируется мост и драйвер подключается к мосту,  иначе  в режиме маршрутизатора. По умолчанию "ROUTER".  Возможны смешанные варианты, когда часть драйверов работают в режиме моста, а часть обычном режиме. При этом все драйвера, работающие в режиме моста, рассматриваются как один сегмент. Имя этого устройства brg0, и его нужно использовать для определения TCP/IP адресов и при настойке маршрутизации. 

ЗАМЕЧАНИЕ:

Для режима BRIDGE требуется установить пакет bridge

DEVx_IPADDR=192.168.0.1 - задает Ip-адрес для адаптера DEVx (не используется в режиме BRIDGE)

DEVx_IPNET=192.168.0.0 - задает Ip-адрес сети для адаптера DEVx (не используется в режиме BRIDGE)

DEVx_IPMASK=255.255.255.0 - задает маску сети для адаптера DEVx (не используется в режиме BRIDGE). По умолчанию 255.255.255.0. 

DEVx_IPMASQ={0,1,2,3} - параметр используется в режиме GLB_FIREWALL=1, и задает режим firewall  для этого устройства. 0 - внутренняя сеть (доступ из вне запрещен), 1 - внутреняя сеть, доступ во вне через NAT, 2 - доступ из вне разрешен, 3 - внешняя сеть типа DEV0. Для поддержки этого режима должен быть установлен пакет iptables.  В поставляемом скрипте DEV0 - всегда рассматривается как интерфейс во внешнюю сеть, а остальные во внутреннюю, и только для них рассматривается параметр DEVx_IPMASQ.

DEVx_DEVMASQ="DEVx" - если DEVx_IPMASQ=1, то этот параметр задает устройство через которое выполняется доступ через NAT. Если не задано, берется DEV0.

DEVx_IFCONFIG="" - через этот параметр можно передать дополнительные параметры программе ifconfig для устройства DEVx. Пример:

DEV1_IFCONFIG="mtu 1500".

DEVx_SETUP - задает скрипт (должен быть полный путь), который вызывается для конфигурирования устройства, после загрузки модуля, но до конфигурирования tcp/ip. Скрипту в качестве параметра передается имя интерфейса. Можно использовать для конфигурирования wireless адаптеров.

Если интерфейс в режиме моста параметры TCP/IP игнорируются для этого интерфейса.

BRIDGE_IPADDR=192.168.0.1 - задает IP-аддрес для моста. (Интерфейс brg0)

BRIDGE_IPMASK=255.255.255.0 - задает маску сети  моста. По умолчанию 255.255.255.0.

ЗАМЕЧАНИЕ:

В случае, если вы используете две(или более) карты одинакового типа, и для них используется один и тот же драйвер, то имена устройств им должны назначаться подряд: например DEV1_IF=eth1 и DEV2_IF=eth2. При этом для второго и последующих устройств параметр DEVx_NAME должен быть "".

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

 Пример: для двух адаптеров iola25.

                DEV1_IF=eth1
                DEV2_IF=eth2
                DEV1_NAME=iola25
                DEV2_NAME=""
                DEV1_PARAM="type=5,5 node=0x01,0x01"
                DEV2_PARAM=""

Управление pptp(vpn) клиентом: 

Признаком, что устройство описывает клиента pptp, является DEVx_NAME="vpn". В этом случае: 

DEVx_IF= ppp<номер> - задает имя интерфейса ppp, который нужно назначить этому соединению. 

DEVx_SERVER=<ip-адрес> - задает адрес сервера pptp, к которому подключается клиент.

DEVx_USER=<имя> - задает имя клиента

DEVx_PASSWORD=<пароль> - пароль на подключение.

Управление pppoe клиентом: 

Признаком, что устройство описывает клиента pppoe, является DEVx_NAME="adsl". В этом случае: 

DEVx_IF= ppp<номер> - задает имя интерфейса ppp, который нужно назначить этому соединению. 

DEVx_IFBIND="DEVx" - задает устройство, через который выполняется соединение с сервером.

DEVx_USER=<имя> - задает имя клиента.

DEVx_PASSWORD=<пароль> - пароль на подключение. Если отсутствует, то берется из файла секретов.

Назначение дополнительных ip-адресов

Для назначения дополнительных ip-адресов для устройства DEVx, нужно использовать параметры DEVx_IPADDR_nDEVx_IPNET_n, DEVx_IPMASK_n, DEVx_IPMASQ_n - где n может быть 0,1,2. Т.е. можно назначить 3-ри дополнительных ip на одно устройство. Значения параметров аналогичны значения параметров без "_n". Пример:

                DEV1_IF=eth1
                DEV1_NAME=ipln
                DEV1_IPADDR=192.168.0.1
                DEV1_IPNET=192.168.0.0
                DEV1_IPMASK=255.255.255.0
                DEV1_IPMASQ=1
                DEV1_IPADDR_0=217.1.1.1
                DEV1_IPNET_0=217.1.0.0
                DEV1_IPMASK_0=255.255.0.0
                DEV1_IPMASQ_0=2

На одно устройство назначено два ip-адреса, при этом первая сеть на "серых" адресах и использует NAT для выход во вне, а вторая сеть на глобальных адресах, к ней разрешен доступ через firewall

Дополнительные возможности настройки

В случае работы в режима маршрутизатора файл конфигурации позволяет настроить лишь простейшие конфигурации. Вы можете создать дополнительное задание по настройке маршрутизации. Создайте файл router и поставьте туда любые команды по изменении маршрутизации. Файл будет выполнен сразу после первичной настройке маршрутизатора.  Пример: 

route add 192.168.2.0 netmask 255.255.255.0 eth0
route add 192.168.3.0 netmask 255.255.255.0 eth1

Может быть создан файл netadd.rc в той же директории где и файл netparm. Он будет выполнен последним, после выполнения стандартных скриптов. В нем могут выдаваться любые команды, которые поддерживаются данной системой. 

Все описанные файлы могут быть в формате DOS. При загрузке они преобразовывается в формат UNIX.

Основной скрипт загрузки /etc/init.d/rcmain. Если его скопировать в директорию upgrade и исправить, то будет использоваться файл из директории upgrade. Это можно использовать, если нужно внести изменения в процесс загрузки.

Примеры

Пример конфигурации для моста

Здесь приведен пример конфигурационного файла при соединении двух Ethernet сетей с помощью адаптеров Iola25LR 1-го типа. В качестве Ethernet-ких адаптеров использовались NE2000 PCI адаптеры.

1-я машина:

DEV0_NAME=ne2k-pci
DEV0_MODE=BRIDGE
DEV1_NAME=iola25
DEV1_MODE=BRIDGE
DEV1_PARM="type=1 io=0x150 irq=10 node=1 forward=2"

2-я машина

DEV0_NAME=ne2k-pci
DEV0_MODE=BRIDGE
DEV1_NAME=iola25
DEV1_MODE=BRIDGE
DEV1_PARM="type=1 io=0x150 irq=10 node=2 forward=1"

В данном случае мостам не назначаются ip-адреса. Если нужно, это можно сделать, добавив строки, для первой машины:
BRIDGE_IPADDR=192.168.0.1
для второй машины:
BRIDGE_IPADDR=192.168.0.2
Тогда можно обращаться к мостам и через TCP/IP.

Пример конфигурации для моста с ipln

Здесь приведен пример конфигурационного файла для концентратора ipln в режиме моста.

GLB_HOSTNAME=IPLNBRG
GLB_IPLNCFG=1
GLB_LOG=0
DEV0_NAME=8139too
DEV0_MODE=BRIDGE
DEV1_NAME=ipln
DEV1_MODE=BRIDGE
DEV1_PARM="devnum=0"
BRIDGE_IPADDR=192.168.0.1

Примеры конфигурационных файлов для маршрутизатора

Здесь приведен пример конфигурационного файла при соединении двух Ethernet сетей с помощью адаптеров Iola25LR 1-го типа. В качестве Ethernet-ких адаптеров  NE2000 PCI адаптеры.

1-я машина:

DEV0_NAME=ne2k-pci
DEV1_NAME=iola25
DEV1_PARM="type=1 io=0x150 irq=10 node=1"
GLB_HOSTNAME=ROUTER_1
DEV0_IPADDR=192.168.0.1
DEV0_IPMASK=255.255.255.0
DEV1_IPADDR=192.168.25.1
DEV1_IPMASK=255.255.255.0
GLB_GATEWAY=192.168.25.2

2-я машина

DEV0_NAME=ne2k-pci
DEV1_NAME=iola25
DEV1_PARM="type=1 io=0x150 irq=10 node=2"
GLB_HOSTNAME=ROUTER_2
DEV0_IPADDR=192.168.1.1
DEV0_IPMASK=255.255.255.0
DEV1_IPADDR=192.168.25.2
DEV1_IPMASK=255.255.255.0
GLB_GATEWAY=192.168.25.1

Здесь приведен пример конфигурационного файла при соединении трех Ethernet сетей с помощью адаптеров Iola25LR 1-го типа. 

1-я машина:

DEV0_NAME=ne2k-pci
DEV1_NAME=iola25
DEV1_PARM="type=1 io=0x150 irq=10 node=1"
GLB_HOSTNAME=ROUTER_1
DEV0_IPADDR=192.168.0.1
DEV0_IPMASK=255.255.255.0
DEV1_IPADDR=192.168.25.1
DEV1_IPMASK=255.255.255.0

Файл router:

route add 192.168.1.0 netmask 255.255.255.0 gw 192.168.25.2
route add 192.168.2.0 netmask 255.255.255.0 gw 192.168.25.3


2-я машина

DEV0_NAME=ne2k-pci
DEV1_NAME=iola25
DEV1_PARM="type=1 io=0x150 irq=10 node=2"
GLB_HOSTNAME=ROUTER_2
DEV0_IPADDR=192.168.1.1
DEV0_IPMASK=255.255.255.0
DEV1_IPADDR=192.168.25.2
DEV1_IPMASK=255.255.255.0

Файл router:

route add 192.168.0.0 netmask 255.255.255.0 gw 192.168.25.1
route add 192.168.2.0 netmask 255.255.255.0 gw 192.168.25.3

3-я машина

DEV0_NAME=ne2k-pci
DEV1_NAME=iola25
DEV1_PARM="type=1 io=0x150 irq=10 node=3"
GLB_HOSTNAME=ROUTER_3
DEV0_IPADDR=192.168.2.1
DEV0_IPMASK=255.255.255.0
DEV1_IPADDR=192.168.25.3
DEV1_IPMASK=255.255.255.0

Файл router:

route add 192.168.0.0 netmask 255.255.255.0 gw 192.168.25.1
route add 192.168.1.0 netmask 255.255.255.0 gw 192.168.25.2

Примеры смешанной конфигурации

Здесь приведен пример конфигурационного файла при соединении двух Ethernet сетей в режиме моста друг с другом и с сегментом на  адаптерах Iola25. В качестве Ethernet-ких адаптеров использовались NE2000 PCI адаптеры. 

DEV0_IF=eth0
DEV1_IF=eth1
DEV2_IF=eth2
DEV0_NAME=ne2k-pci
DEV1_NAME=ne2k-pci
DEV2_NAME=iola25
DEV2_PARM="type=1 io=0x150 irq=10 node=1"
GLB_HOSTNAME=ROUTER_4
BRIDGE_IPADDR=192.168.0.1
BRIDGE_IPMASK=255.255.0.0
DEV2_IPADDR=192.168.25.1
DEV2_IPMASK=255.255.255.0
GLB_GATEWAY=192.168.25.99

Пример с ppp, dnsmasq и двумя провайдерами

Здесь приведен пример реальной конфигурации применяемой в офисе. Подключение к Интернет выполнено через двух провайдеров основной(gus) и запасной(max). Нужно выполнить подключение к Интернет компьютеров в офисе, так чтобы ничего не менять на них при смене провайдера, возможность легко выполнять смену провайдера и хотелось бы подключатся из дома к офису и через него выходить в Интернет. Подключение к каждому провайдеру выполняется через один реальный ip. Таким образом имеем два адаптера Ethernet(rtl8139) для подключения к провайдерам, один адаптер (iola25) для локальной сети и модем.

Имеем файл для gus (netparm.gus):

GLB_TMPSIZE=3200
GLB_HOSTNAME="ROUTER"
GLB_GATEWAY=111.111.111.225
GLB_SSHD=1
GLB_LOG=1
GLB_SYSLOGD=1
GLB_KLOGD=1
GLB_DNSPARM="-a 192.168.222.1"
GLB_DNSNAME0=111.111.112.21
GLB_DNSNAME1=111.111.112.34
GLB_TTYS0="ppp"
GLB_TTYS0SPD=57600
GLB_TTYS0DEV="DEV3"
GLB_TTYS1=""
GLB_TTYTERM=vt100
GLB_FIREWALL=1
DEV1_IF="eth0"
DEV1_NAME="8139too"
DEV1_IPADDR=222.222.222.71
DEV1_IPNET=222.222.222.64
DEV1_IPMASK=255.255.255.224
DEV0_IF="eth1"
DEV0_NAME="8139too"
DEV0_IPADDR=111.111.111.232
DEV0_IPNET=111.111.111.224
DEV0_IPMASK=255.255.255.224
DEV2_IF="eth2"
DEV2_NAME="iola25"
DEV2_IPADDR=192.168.25.1
DEV2_IPNET=192.168.25.0
DEV2_IPMASK=255.255.255.0
DEV2_PARM="type=5 node=1"
DEV2_IPMASQ=1
DEV3_IF="ppp0"
DEV3_NAME="ppp"
DEV3_IPADDR=192.168.0.1
DEV3_IPNET=192.168.0.0
DEV3_IPMASK=255.255.255.0
DEV3_IPMASQ=1

Имеем файл для max(netparm.max):

GLB_TMPSIZE=3200
GLB_HOSTNAME="ROUTER"
GLB_GATEWAY=222.222.222.65
GLB_SSHD=1
GLB_LOG=1
GLB_DNSPARM="-a 192.168.222.1"
GLB_DNSNAME0=222.222.223.22
GLB_DNSNAME1=222.222.223.1
GLB_TTYS0="ppp"
GLB_TTYS0SPD=57600
GLB_TTYS0DEV="DEV3"
GLB_TTYS1=""
GLB_TTYTERM=vt100
GLB_FIREWALL=1
DEV0_IF="eth0"
DEV0_NAME="8139too"
DEV0_IPADDR=222.222.222.71
DEV0_IPNET=222.222.222.64
DEV0_IPMASK=255.255.255.224
DEV1_IF="eth1"
DEV1_NAME="8139too"
DEV1_IPADDR=111.111.111.232
DEV1_IPNET=111.111.111.224
DEV1_IPMASK=255.255.255.224
DEV2_IF="eth2"
DEV2_NAME="iola25"
DEV2_IPADDR=192.168.25.1
DEV2_IPNET=192.168.25.0
DEV2_IPMASK=255.255.255.0
DEV2_PARM="type=5 node=1"
DEV2_IPMASQ=1
DEV3_IF="ppp0"
DEV3_NAME="ppp"
DEV3_IPADDR=192.168.0.1
DEV3_IPNET=192.168.0.0
DEV3_IPMASK=255.255.255.0
DEV3_IPMASQ=1

Файл netadd.rc (в нем присваиваем дополнительный ip для использования dnsmasq, и подгружаем модуль нужный для использования ftp): 

ifconfig lo:0 192.168.222.1
/sbin/insmod ip_nat_ftp

Скрипт для переключения с gus на max:

#!/bin/sh
/bin/cp /mnt/fd/bootdisk/netparm.max /mnt/fd/bootdisk/netparm
/bin/cpdos /mnt/fd/bootdisk/netparm.max /etc/netparm
ifconfig eth0 down
ifconfig eth1 down
/etc/rc.net start
/etc/rc.d/rc.dns stop
/etc/rc.d/rc.dns start

Скрипт для переключения с max на gus:

/bin/cp /mnt/fd/bootdisk/netparm.gus /mnt/fd/bootdisk/netparm
/bin/cpdos /mnt/fd/bootdisk/netparm.gus /etc/netparm
ifconfig eth0 down
ifconfig eth1 down
/etc/rc.net start
/etc/rc.d/rc.dns stop
/etc/rc.d/rc.dns start

Для подключения по ppp файл pap-sec.ppp:

# Secrets for authentication using PAP
# client server secret IP addresses
user1          *  password1  192.168.0.2
user2          *  password2  192.168.0.3


В примерах реальные ip-адреса и имена пользователей изменены. Для машин из локальной сети  указываем шлюз по умолчанию 192.168.25.1, DNS 192.168.222.1. Для подключения по модему шлюз по умолчанию 192.168.0.1, DNS 192.168.222.1. При такой конфигурации при переключении провайдера с одного на другого - никаких изменений на клиентских машинах не требуется, как не требуется и перезагрузка роутера. На роутер должны быть установлены пакеты iptablesppp и dnsmasq. Смену провайдера можно выполнять и удаленно подключаясь по модему через ssh.

Возможность модификации системы

Добавление нового модуля в систему

Для добавления нового модуля в систему нужно сделать следующее:

  1. установить исходные тексты ядра (сейчас используется 2.4.24,  для уточнения версии дайте команду uname -r).
  2. конфигурируем ядро указав для нужного вам модуля - чтобы он создавался как модуль (режим 'M'). 
  3. транслируем модули ядра make modules
  4. упаковать модуль программой gzip, направив вывод в файл с именем в формате 8.3, чтобы имя правильно читалось в режиме ДОС  (Например: gzip -c xxxyyyzzz.o  >xyz.gz)
  5. создаем файл типа upgrade.???, где вместо ??? любые буквы или цифры. В него прописываем задание на установку. Оно состоит из создания директории куда нужно записать файл, если она отличается от директории для установки сетевых модулей и копировки модуля. Для копировки используйте процедуру copymod, ее синтаксис: copymod <имя сжатого модуля без расширения> <полное имя модуля> <права>
    Пример:

    mkdir $MODDIR/kernel/xyz
    copymod xyz $MODDIR/kernel/xyz/xxxyyyzzz.o 644

    Переменная $MODDIR указывает на директорию /lib/modules/<версия ядра>. Переменная $MODDIRNET указывает на директорию для модулей сетевых адаптеров. Для драйвера сетевой карты файл мог бы быть таким:

    copymod newnet $MODDIRNET/newnet.o 644

  6. Копируем сжатый файл и файл upgrade.??? в директорию bootdisk/upgrade

Добавление файла etc

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

  1. Переименовываем файл в имя  в формате 8.3, чтобы имя правильно читалось в режиме ДОС  и копируем его в директорию bootdisk\upgrade\etc
  2. В файл upgrade.etc добавляем задание на установку. Оно состоит из создания директории куда нужно записать файл, если она отличается от директории etc  и копировки модуля. Для копировки используйте процедуру copyetccfg, ее синтаксис: copyetccfg <имя файла в upgrade/etc> <полное имя файла> <права>
    Пример:

    mkdir /etc/xyz
    copyetccfg xyz.cfg /etc/xyz/xyz.conf 600

Добавление программ

Для добавления какой либо программы требуется иметь ее исходные тексты и оттранслировать ее с библиотеками и файлами, с которыми собирался дистрибутив. Сейчас эта возможность не доступна. Обращайтесь на iola@iola.ru.

Удаленное управление роутером

Существует следующие возможности удаленного управления роутером:

  1. Корневая файловая система по умолчанию включает в себя пакет dropbear, который является сервером ssh2. В качестве клиента под Windows удобно использовать putty. Чтобы сервер стартовал должна быть задана переменная GLB_SSHD=1 (по умолчанию).
  2. Обновление пакетов удобно через WinSCP
  3. Можно использовать для управления роутером программу iplnmng. Если у вас один из драйверов ipln, то нужная серверная часть программы у вас уже стоит. Если нет, то  из пакета ipln нужно взять файлы rc.pln, upgrade.pln и iplncfg.gz и скопировать их в директорию upgrade. Кроме этого, для управления доступом, в директории bootdisk, нужно создать файл ipln.cfg из одной секции ipln.global (его можно создать iplnmng) и для включения запуска в netparm добавить строку GLB_IPLNCFG=1. С версии 3.09, программа включает поддержку своих скриптов, которые могут выполнять функции аналогичные ftp. Кроме этого, есть функции удаленного обновления математики, удаленное управление пакетами на роутере. Единственное, если у вас используется дистрибутив с дискеты, c с их помощью нельзя менять kernel и rootfs.gz, т.к. программа настроена на конфигурацию с жестким диском (на дискете эти файлы лежат в другом месте, но это можно сделать вручную командой put).
Замечание: Для идентификации iplncfg использует файл ipln.cfg, а не записи о пользователях Unix, поэтому ограничение доступа нужно прописывать в нем.

Управление firewall-ом

Поддерживается firewall на базе iptables и для режима моста на базе ebtables.

Принцип построения на базе iptables - firewall на базе анализа состояния соединения. По умолчанию доступ по всем портам запрещен, кроме указанных в списке. Если требуется доступ по какому либо порту - его нужно в этот список включить. Если GLB_FIREWALL=1, то контролируется только доступ к самому серверу. Если GLB_FIREWALL=2, то контролируется исходящий и проходящий трафик.

Принцип построения на базе ebtables - используется для фильтрации трафика через мост. Подключается при GLB_FIREWALL=2. По умолчанию разрешены протокол IPv4  по всем портам кроме заданных в списке блокировки (BRIDGE_TCPDPORT и BRIDGE_UDPDPORT) и протокол ARP.

Параметры конфигурационного файла

Скрипт firewall запускается в случае, если параметр GLB_FIREWALL={1|2}. Кроме этого есть глобальный параметр GLB_FWLOGLEV="уровень", задающий уровень ведения журнала. Можно задать следующие уровни: debug, info, notice, warning, warn, err, error, crit, alert, emerg и panic. Ключевое слово error означает то же самое, что и err, warn - warning и panic - emerg. Если задать GLB_FWLOGLEV="" - то в журнал ничего не будет попадать.

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

<список портов> - список портов или диапазонов портов через запятую. Диапазон портов задается <порт 1>:<порт 2>, значение <порт 1> должно быть меньше <порт 2>. Скрипт автоматически нарезает список для команд iptables и ebtables на приемлемые для них значения. Пример:  20:23,135:139,5001"

DEVx_TCPEPORT=<список портов> - задает список портов, которые нужно открыть для протокола TCP.  По умолчанию для внешних интерфейсов открыты  "22,1723" порты, для остальных "22,53,1723"

DEVx_UDPEPORT=<список портов> - задает список портов, которые нужно открыть для протокола UDP.  По умолчанию для внешних интерфейсов открыты  "5001" порты, для остальных "53,5001"

DEVx_TCPDPORT=<список портов> - задает список портов, которые нужно закрыть для протокола TCP.  По умолчанию "".

DEVx_UDPDPORT=<список портов> - задает список портов, которые нужно закрыть для протокола UDP.  По умолчанию "135:139,67:68"

DEVx_IPLIST=<список ip> - задает ip-адресов (или сетей) для которых разрешен доступ к портам заданным DEVx_TCPEPORT и DEVx_UDPEPORT. Если не задан, то разрешено с любых адресов.

Пример:

DEV0_TCPEPORT=20:23,53,67:68
DEV0_UDPEPORT=53,67:68,5001
DEV0_IPLIST=192.168.0.1,192.168.200.0/24

ЗАМЕЧАНИЕ 1:
 

Так как по умолчанию все порты закрыты, кроме тех что вы явно разрешите использовать, то пакеты будут блокироваться и без явных команд DEVx_TCPDPORT и DEVx_UDPDPORT. Но при этом эти события будут попадать в журнал. Чтобы журнал не забивать мусором, можно этими командами запретить обращение к ряду портов, при этом сообщений в журнал не будет выдаваться. Например системы на базе Windows часто посылают сообщения к портам 135:139.

ЗАМЕЧАНИЕ 2:
 

Для интерфейса BRIDGE, если установлен пакет ebtables, DEVx_TCPDPORT и DEVx_UDPDPORT блокируют не только доступ к самому мосту, но и устанавливает фильтр для передаваемого через мост трафика.

Описание скрипта firewall

Далее будет приведен скрипт firewall. В дистрибутиве не исключены отличия от приведенного скрипта, но принцип будет аналогичен.

#!/bin/sh
# DEV0 - assum's as default external network for firewall
# DEV1 ...DEV7 assum's as internal network
# определение портов по умолчанию для интерфейсов разного типа
defext_tcpeport="22,1723"    # порты tcp разрешенные для внешних устройств
defext_udpeport="5001"       # порты udp разрешенные для внешних устройств
defint_tcpeport="22,53,1723" # порты tcp разрешенные для прочих устройств
defint_udpeport="53,5001"    # порты udp разрешенные для прочих устройств
def_tcpdport=""              # блокируемые порты tcp
def_udpdport="135:139,67:68" # блокируемые порты udp
GLB_FW_VER=1		     # определяет версию скрипта

iptf="/usr/local/sbin/iptables"
if [ ! -f $iptf ] ; then
    iptf="/usr/sbin/iptables"
fi
ebt_need="0"
ebtf="/usr/local/sbin/ebtables"
if [ ! -f $ebtf ] ; then
    ebtf="/usr/sbin/ebtables"
    if [ ! -f $ebtf ] ; then
	ebtf=""
    fi
fi
# проверка есть ли файл с командами пользователя
fw_user=0
if [ -f /etc/firewall.usr ] ; then
    fw_user=1
    . /etc/firewall.usr
fi
# вызов iptables с занесением команды в журнал
ipt() {
    echo "iptables $1" >>$LOG
    $iptf $1 2>>$LOG
}
# вызов ebtables с занесением команды в журнал
ebt() {
    if [ "$ebt_need" = "1" ] ; then
	echo "ebtables $1" >>$LOG
	$ebtf $1 2>>$LOG
    fi
}
# в переменную devppp записывается тип соединения типа ppp
set_devppp() {
    devppp=0
    # for pptp & pppoe configure when connection estableshed
    case "$1" in
	"vpn"|"adsl"|"ppp")
	    devppp=1
	    ;;
	"pppoe")
	    devppp=2
	    ;;
        "pptp")
	    devppp=3
	    ;;
    esac
}    
# определяет есть ли хоть одно устройство подключаемое к мосту
init_ebt_need() {
    if [ "$ebtf" = "" ] ; then
       return
    fi
    for i in $DEV0_MODE $DEV1_MODE $DEV2_MODE $DEV3_MODE $DEV4_MODE $DEV5_MODE $DEV6_MODE $DEV7_MODE ; do
	if [ "$i" = "BRIDGE" ] ; then
	    ebt_need="1"
	    return
	fi
    done
}
# программа запрещает или разрешает доступ для списка ip-адресов, протоколов и портов
# список портов через "," другие списки через " "
ebt_de_ports() {
    local ip proto port
    local iif=""
    if [ "$1" != "all" ] ; then
        iif="-i $1"
    fi
    plist="$4"
    while [ "$plist" != "" ] ; do
    	pos=$(/usr/bin/expr index "$plist" ,)
	if [ "$pos" = "0" ] ; then
	    port=$plist
	    plist=""
	else
	    port=$(/usr/bin/expr substr "$plist" 1 $(/usr/bin/expr $pos - 1))
	    plist=$(/usr/bin/expr substr "$plist" $(/usr/bin/expr $pos + 1) 200)
	fi
	for ip in $2 ; do
	    if [ "$ip" = "$ANY" ] ; then
		ipp=""
	    else
		ipp="--ip-dst $ip"
	    fi
	    for proto in $3 ; do
		ebt "-A INPUT -p IPv4 $iif $ipp --ip-proto $proto --ip-dport $port -j $5"
		# добавление в цепочку FORWARD запрещает передачу через мост
		ebt "-A FORWARD -p IPv4 $iif $ipp --ip-proto $proto --ip-dport $port -j $5"
	    done
	done
    done
}
# программа разрешает прохождение заданного списка протоколов
ebt_enable_proto() {
    for i in $1 ; do
	ebt "-A FORWARD -p $i -j ACCEPT"
	ebt "-A INPUT -p $i -j ACCEPT"
	ebt "-A OUTPUT -p $i -j ACCEPT"
    done
}
# программа задающая правила для моста используя ebtables 
# по умолчанию разрешаем протоколы Ipv4 и ARP. Если нужны другие протоколы
# Нужно нужно разкомментировать правила для LENGTH
fw_BRIDGE() {
    ebt "-P INPUT DROP"
    ebt "-P OUTPUT DROP"
#   следующие два вызова добавляют правила по блокировке портов udp и tcp    
#   если нужно добавить другие блокировки по приему, вставляйте их сюда.
    ebt_de_ports "all" $ANY "udp" "$d_udpdport" "DROP"
    ebt_de_ports "all" $ANY "tcp" "$d_tcpdport" "DROP"
#   разрешаем прохождение указанных протоколов, если нужна поддержка других протоколов
#   то добавляйте их в этот список. См. файл /etc/ethertypes 
    ebt_enable_proto "IPv4 ARP 802_1Q"
#   протоколирование пакетов не прошедших контроль
    if [ "$GLB_FWLOGLEV" != "" ] ; then
	$ebtf -A INPUT --log-level $GLB_FWLOGLEV --log-ip --log-prefix "EBT INPUT drop packet: "
	$ebtf -A FORWARD --log-level $GLB_FWLOGLEV --log-ip --log-prefix "EBT FORWARD drop packet: "
    fi
    return 0
}
# модифицирует правила в зависимости от значения DEVx_MASQ, так же используется
# также используется для конфигурирования дополнительных ip-адресов
# $1 - ip-адрес, $2 - ip-сеть, $3 - ip-маска, $4 - DEVx_MASQ, $5 - DEVx  $6 - {"D"|"A"}
# программа используется как для добавления так и для удаления правил
mod_if_rules() {
    if [ "$2" != "" ] ; then
	sip=$2/$3  	# если есть адрес сети используем его и маску для ip источника
    elif [ "$1" = "" ] ; then
	return 		# если не задан ни ip-адрес, ни адрес сети
    else
	sip=$1 		# иначе берем ip-адрес
    fi
    if [ "$4" = "1" ] ; then		# для устройства нужен NAT или маскарадинг	
        # определим ip-адрес и интерфес через которые будем работать
	local ipmasq="$DEV0_IPADDR"	
	local ifmasq="$DEV0_IF"
	if [ "$d_devmasq" != "" ] && [ "$d_devmasq" != "DEV0" ] ; then
	    setvar_byname "ipmasq" ${d_devmasq}_IPADDR
	    setvar_byname "ifmasq" ${d_devmasq}_IF
	fi
	if [ "$ifmasq" != "" ] ; then
	    # если ip-адрес определили используем SNAT, иначе MASQUERADE
	    if [ "$ipmasq" != "" ] ; then
		local tip="-j SNAT --to-source $ipmasq"
	    else
		local tip="-j MASQUERADE"
	    fi
	    ipt "-t nat -$6 POSTROUTING -s $sip -o $ifmasq $tip"
	else
	    echo "$0: $d_dev: error reference to undefined device $d_devmasq" >>$LOG
	fi
    elif [ "$4" = "2" ] ; then
    	if [ "$GLB_FIREWALL" = "2" ] ; then
	    # Для типа 2 разрешим доступ из вне
            ipt "-$6 f_DEV0 -o $d_if -j ACCEPT"
       fi 
    fi
    if [ "$GLB_FIREWALL" = "2" ] ; then
    	# добавим правило в цепочку OUTPUT
    	ipt "-$6 OUTPUT2 -p all -s $sip -j ACCEPT"
    fi	
}
# программа выполняет блокировку или доступность списка портов
# param: chain iif iplist proto port-list target
ipt_port_oper() {
    plist="$5"
    if [ "$plist" = "" ] ; then
	return
    fi
    iplist="$3"
    while [ true ] ; do
	if [ "$iplist" = "" ] ; then    
	    iplist="0/0"
	    iprest=""
	else
	    pos=$(/usr/bin/expr index "$iplist" ,)
	    if [ "$pos" = "0" ] ; then
		iprest=""
	    else
		iprest=$(/usr/bin/expr substr "$iplist" $(/usr/bin/expr $pos + 1) 200)
		iplist=$(/usr/bin/expr substr "$iplist" 1 $(/usr/bin/expr $pos - 1))
	    fi
	fi
#   	mport support only max 16 ports (include range bounds)
	while [ true ] ; do    
	    pos=$(/usr/bin/expr index "$plist" ,)
	    if [ "$pos" = "0" ] ; then
		ipt "-A $1 -i $2 -p $4 -s $iplist --dport $plist -j $6"	
		break
	    fi
	    pfld=`echo $plist | cut -d"," -f 8`
	    prest=""
	    if [ "$pfld" != "" ] ; then
		pos=$(/usr/bin/expr strstr "$plist" ",$pfld")
		prest=$(/usr/bin/expr substr "$plist" $(/usr/bin/expr $pos + 1) 200)
		plist=$(/usr/bin/expr substr "$plist" 1 $(/usr/bin/expr $pos - 1))
	    fi
	    ipt "-A $1 -i $2 -p $4 -s $iplist -m mport --dports $plist -j $6"
	    if [ "$prest" = "" ] ; then
		break
    	    fi
	    plist=$prest
	done 
	if [ "$iprest" = "" ] ; then
	    break
    	fi
	iplist=$iprest
    done
}
# Очистка правил firewall
fw_clear() {
#   Clear chanes
    ipt "-F"
    ipt "-X"
    ipt "-t nat -F"
    ebt "-F INPUT"
    ebt "-F OUTPUT"
    ebt "-F FORWARD"
}
#
# программа выдающая начальную последовательность правил для firewall 
# которые не зависит от заданной конфигурации.
#
fw_start_seq() {
#   Запретим routing пакетов ip
    echo  0> /proc/sys/net/ipv4/ip_forward
#   Очистим цепочки
    fw_clear
#   По умолчанию установим все на DROP
    ipt "-P INPUT DROP"
    if [ "$GLB_FIREWALL" = "2" ] ; then  
    	ipt "-P OUTPUT DROP"
    	ipt "-P FORWARD DROP"
    else
    	ipt "-P OUTPUT ACCEPT"
    	ipt "-P FORWARD ACCEPT"
    fi		    	
    ipt "-N bad_tcp_p"		# цепочка отбрасывающая пакеты с неправильными флагами
    ipt "-N allowed" 		# цепочка для пакетов прошедших основную проверку
    ipt "-N icmp_p"		# цепочка для пакетов протокола icmp
#   сюда пойдут все tcp-пакеты, и будут отброшены имеющие статус NEW, но не имеющие флагов SYN,ACK
    ipt "-A bad_tcp_p -p TCP --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP"
    if [ "$GLB_FWLOGLEV" != "" ] ; then
	$iptf -A bad_tcp_p -p TCP ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
    fi 
    ipt "-A bad_tcp_p -p TCP ! --syn -m state --state NEW -j DROP"
#   Принимаем все пакеты для установленных соединений
    ipt "-A allowed -p TCP --syn -j ACCEPT"
    ipt "-A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT"
    ipt "-A allowed -j DROP"	# остальное отбрасываем
#   Конфигурирование ICMP
    ipt "-A icmp_p -p ICMP -m state --state ESTABLISHED,RELATED -j ACCEPT"
    ipt "-A icmp_p -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT" 	# Dest unreachable
    ipt "-A icmp_p -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT" 	# Time exceeded
    ipt "-A icmp_p -p ICMP -s 0/0 --icmp-type 12 -j ACCEPT" 	# Parameter problem
    ipt "-A icmp_p -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT" 	# Enable ping
#   Вывод в журнал не прошедших пакетов по умолчанию закомментирован
#   if [ "$GLB_FWLOGLEV" != "" ] ; then
#	$iptf -A icmp_p -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level $GLB_FWLOGLEV --log-prefix "IPT ICMP drop packet: "
#   fi
    ipt "-A icmp_p -j DROP" 	# остальные запросы отбрасываем
#   Общие правила для интерфейсов
    ipt "-A INPUT -p tcp -j bad_tcp_p"		# проверка флагов TCP
    ipt "-A INPUT -j ACCEPT -i lo"    		# разрешим прием всего с lo
    ipt "-A INPUT -p ICMP -j icmp_p"		# ICMP пакеты отправим на проверку
    if [ "$GLB_FIREWALL" = "2" ] ; then
	ipt "-A FORWARD -p tcp -j bad_tcp_p"	# проверка флагов TCP
   	ipt "-A FORWARD -j ACCEPT -i lo"	# разрешим передачу всего с lo

    	ipt "-A OUTPUT -p tcp -j bad_tcp_p"	# проверка флагов TCP
#   	создадим цепочку OUTPUT2, она подвергается динамической коррекции при 
#   	создании ppp интерфейсов, не сразу в OUTPUT чтобы не вычислять положение правила в цепочке      
    	ipt "-N OUTPUT2"					
    	ipt "-A OUTPUT -p all -j OUTPUT2"
    	ipt "-A OUTPUT -p all -s 127.0.0.0 -j ACCEPT"# разрешим передачу всего с lo
    fi    	
}
#
# программа выдающая завершающую последовательность правил для firewall 
# которые не зависит от заданной конфигурации.
#
fw_end_seq() {
    if [ "$GLB_FIREWALL" = "2" ] ; then
    	# все установленные сессии разрешаем
    	ipt "-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT"
    fi	
    # протоколирование пакетов не прошедших контроль
    if [ "$GLB_FWLOGLEV" != "" ] ; then
	$iptf -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level $GLB_FWLOGLEV --log-prefix "IPT INPUT drop packet: "
    	if [ "$GLB_FIREWALL" = "2" ] ; then
 	    $iptf -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level $GLB_FWLOGLEV --log-prefix "IPT FORWARD drop packet: "
   	    $iptf -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level $GLB_FWLOGLEV --log-prefix "IPT OUTPUT drop packet: "
   	fi	
    fi
    if [ "$1" = "1" ] ; then
	echo 1> /proc/sys/net/ipv4/ip_forward
    fi
}
# Программа конфигурирования правил для отдельного устройства
# Параметры для сессии ppp: $1 имя интерфейса ppp $2 имя устройства (DEVx)
# Параметры не для сессии ppp: $1 имя устройства (DEVx)
fw_cfg_dev() {
    # проверяем для начала есть ли минимальные данные для устройства
    if [ "$d_if" = "" ] || [ "$d_name" = "" ] || [ "$d_mode" = "BRIDGE" ] ; then
        return
    fi
    # создаем имя цепочки для приема и форвардинга
    i_c="i_$1"
    f_c="f_$1"
    # для серверов типа ppp используем ppp+ для отбора интерфейсов
    if [ "$d_if" = "ppp" ] ; then
	d_if="ppp+"
    fi
    if [ "$d_name" = "pppses" ] ; then # правила для сессии ppp
	if [ "$devppp" = "1" ] ; then  # для типа 1 (одно-сессионные DEVx)
	    i_c="i_$2"	               # используем имена на базе DEVx ( цепочки уже созданы)
	    f_c="f_$2"
    	else
	    ipt "-N $i_c"			# добавляем цепочки
	    ipt "-A i_$2 -i $d_if -j $i_c"	# добавляем переходы на них
	    if [ "$GLB_FIREWALL" = "2" ] ; then
	    	ipt "-N $f_c"
	    	ipt "-A f_$2 -i $d_if -j $f_c"
	    fi	    	
	fi
    else
	set_devppp $d_name									# определим тип ppp
	if [ "$devppp" = "0" ] && [ "$d_ipaddr" = "" ] ; then
	    return				# если не динамически создаваемое устройчсво и ip нет - ничего не надо
	fi
	ipt "-N $i_c"								# добавляем цепочки
	ipt "-A INPUT -i $d_if -j $i_c"		# добавляем переходы на них
   	if [ "$GLB_FIREWALL" = "2" ] ; then
	    ipt "-N $f_c"
	    ipt "-A FORWARD -i $d_if -j $f_c"
	fi
	if [ "$devppp" != "0" ] ; then	
	    if [ "$devppp" = "3" ] ; then
		# для сервера pptp разрешим 47 протокол на устройстве к которому он подключается    
		bindip=""
		if [ "$d_ifbind" != "" ] ; then	
		    setvar_byname bindip ${d_ifbind}_IPADDR
    		fi
		if [ "$bindip" != "" ] ; then
		    ipt "-A i_$d_ifbind -d $bindip -p 47 -j ACCEPT"
		else
		    ipt "-A INPUT -p 47 -j ACCEPT"
		fi
	    fi
	    # для ppp устройств при первом вызове больше ничего не надо делать
	    # правила будут добавлены когда сессия будет создана	    
	    return
	fi
    fi
    if [ "$1" = "DEV0" ] ; then			# DEV0 всегда тип 3
	d_ipmasq=3
    fi
    # принимаем все пакеты для установленных сессий
    ipt "-A $i_c -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT"
    # если не заданы списки портов, переопределим их значениями по умолчанию
    if [ "$d_ipmasq" = "3" ] ; then
	d_tcpeport=${d_tcpeport:-$defext_tcpeport}
	d_udpeport=${d_udpeport:-$defext_udpeport}
    else
    	d_tcpeport=${d_tcpeport:-$defint_tcpeport}
	d_udpeport=${d_udpeport:-$defint_udpeport}
    fi
    d_tcpdport=${d_tcpdport:-$def_tcpdport}
    d_udpdport=${d_udpdport:-$def_udpdport}
    # открываем порты для протокола TCP
    ipt_port_oper $i_c $d_if "$d_iplist" TCP "$d_tcpeport" allowed; allowed
    # открываем порты для протокола UDP    
    ipt_port_oper $i_c $d_if "$d_iplist" UDP "$d_udpeport" ACCEPT    t; ACCEPT
    # закрываем порты UDP и TCP которые не надо протоколировать
    ipt_port_oper $i_c $d_if "" TCP "$d_tcpdport" DROP
    ipt_port_oper $i_c $d_if "" UDP "$d_udpdport" DROP
    if [ "$GLB_FIREWALL" = "2" ] ; then
    	if [ "$d_ipmasq" = "3" ] ; then     # Связываем внешние интерфейсы друг с другом
            if [ "$1" != "DEV0" ] ; then
    	   	ipt "-A $f_c -o $DEV0_IF -j ACCEPT"
    	    	ipt "-A f_DEV0 -o $d_if -j ACCEPT"
	    fi
    	else     # разрешаем форвардинг с других интерфейсов
	    ipt "-A $f_c -j ACCEPT"
    	fi
    fi    	
    # модифицируем цепочки в соответствии с наборами алиасов
    mod_if_rules "$d_ipaddr"   "$d_ipnet"   "$d_ipmask"   "$d_ipmasq"   "$1" "A"
    mod_if_rules "$d_ipaddr_0" "$d_ipnet_0" "$d_ipmask_0" "$d_ipmasq_0" "$1" "A"
    mod_if_rules "$d_ipaddr_1" "$d_ipnet_1" "$d_ipmask_1" "$d_ipmasq_1" "$1" "A"
    mod_if_rules "$d_ipaddr_2" "$d_ipnet_2" "$d_ipmask_2" "$d_ipmasq_2" "$1" "A"
    if [ "$1" = "BRIDGE" ] && [ "$GLB_FIREWALL" = "2" ]  ; then
        fw_BRIDGE
    fi
    # если есть файл с командами пользователя вызываем его
    if [ "$fw_user" = "1" ] ; then
	fw_user_start
    fi
}
# Поиск устройства DEVx на базе данных передаваемых ppp для скриптов if-up и if-down
fw_pppfind() {
    dev=""
    x=`/usr/bin/expr substr "$3" 1 3`    
    if [ "$x" = "eth" ] || [ "$x" = "brg" ] || [ "$x" = "/de" ] ; then # pppoe server or pptp connection
	ip=$5
    else
	ip=$4
    fi
    # find our DEVICE	
    if [ "$ip" = "$DEV0_IPADDR" ] || [ "$2" = "$DEV0_IF" ] ; then
	dev="DEV0"
    elif [ "$ip" = "$DEV1_IPADDR" ] || [ "$2" = "$DEV1_IF" ] ; then
        dev="DEV1"
    elif [ "$ip" = "$DEV2_IPADDR" ] || [ "$2" = "$DEV2_IF" ] ; then
        dev="DEV2"
    elif [ "$ip" = "$DEV3_IPADDR" ] || [ "$2" = "$DEV3_IF" ] ; then
        dev="DEV3"
    elif [ "$ip" = "$DEV4_IPADDR" ] || [ "$2" = "$DEV4_IF" ] ; then
        dev="DEV4"
    elif [ "$ip" = "$DEV5_IPADDR" ] || [ "$2" = "$DEV5_IF" ] ; then
        dev="DEV5"
    elif [ "$ip" = "$DEV6_IPADDR" ] || [ "$2" = "$DEV6_IF" ] ; then
        dev="DEV6"
    elif [ "$ip" = "$DEV7_IPADDR" ] || [ "$2" = "$DEV7_IF" ] ; then
        dev="DEV7"
    fi
    if [ "$dev " = "" ] ; then
        logger "cannot find DEVICE for ip $4"
        return
    fi
    load_dev_parm $dev
    set_devppp $d_name
    d_if=$2
    d_ipaddr=$ip
    d_name="pppses"
    return
}
# программа динамического добавления правил firewall для ppp интерфейса
# cmd, ifppp, p2, p3, ipmy, iprem, gate
fw_startppp() {
    if [ "$GLB_FIREWALL" != "1" ] && [ "$GLB_FIREWALL" != "2" ] ; then
	return
    fi
    fw_pppfind $@
    if [ "$dev" = "" ] ; then
	return
    fi
    fw_cfg_dev $2 $dev
}
# программа динамического удаления правил firewall для ppp интерфейса
# ifppp, p2, p3, ipmy, iprem, gate
fw_stopppp() {
    if [ "$GLB_FIREWALL" != "1" ] && [ "$GLB_FIREWALL" != "2" ] ; then
	return
    fi
    fw_pppfind $@
    if [ "$dev" = "" ] ; then
	return
    fi
    if [ "$fw_user" = "1" ] ; then
	fw_user_stop
    fi
    mod_if_rules "$d_ipaddr" "$d_ipnet" "$d_ipmask" "$d_ipmasq" "$dev" "D"
    if [ "$d_ipmasq" = "3" ] ; then
        if [ "$dev" != "DEV0" ] ; then
    	    ipt "-D f_DEV0 -o $d_if -j ACCEPT"
	fi
    fi
    if [ "$devppp" != "1" ] ; then
	ipt "-D i_$dev -i $d_if -j i_$2"
	ipt "-D f_$dev -i $d_if -j f_$2"
	ipt "-F i_$2"
	ipt "-F f_$2"
	ipt "-X i_$2"
	ipt "-X f_$2"
    else
	ipt "-F i_$dev"
	ipt "-F f_$dev"
    fi
}
# запуск firewall
fw_start() {
    if [ "$GLB_FIREWALL" != "1" ] && [ "$GLB_FIREWALL" != "2" ] ; then
	return
    fi
    bridge_need=0
    fw_start_seq
    for i in DEV0 DEV1 DEV2 DEV3 DEV4 DEV5 DEV6 DEV7 ; do
	load_dev_parm $i
	fw_cfg_dev $i
	if [ "$d_mode" = "BRIDGE" ] ; then
	    bridge_need=1
	fi
    done
    if [ "$bridge_need" = "1" ] ; then
	load_dev_parm "BRIDGE"
	fw_cfg_dev "BRIDGE"
    fi    
    fw_end_seq $ip_forward
}
# остановка firewall
fw_stop() {
#   Disable routing ip packet's
    echo  0> /proc/sys/net/ipv4/ip_forward
#   Clear chanes
    fw_clear
#   Set default's rules
    ipt "-P INPUT ACCEPT"
    ipt "-P OUTPUT ACCEPT"
    ipt "-P FORWARD ACCEPT"
    ebt "-P INPUT ACCEPT"
    ebt "-P OUTPUT ACCEPT"
    ebt "-P FORWARD ACCEPT"
    echo  $ip_forward> /proc/sys/net/ipv4/ip_forward
}
# показ правил firewall
fw_list() {
    $iptf -L -v -n -x --line-numbers
    echo " "
    echo "Rules for table nat"
    echo " "
    $iptf -t nat -L -v -n -x
    if [ "$ebt_need" = "1" ] ; then
	echo " "
	echo "Rules for ebtables"
	echo " "
	$ebtf -L --Lc --Ln
    fi
}
################################
if [ "$DEV0_NAME" = "" ] ; then
.   /etc/init.d/serv.proc
    netinit_var
    set_brgroute_env
    init_ebt_need
    ip_forward=`cat /proc/sys/net/ipv4/ip_forward`

    case "$1" in
    'start')
	fw_start
	;;
    'stop')
	fw_stop
	;;
    'list')
	fw_list
	;;
    'startppp')
	fw_startppp $@
	# if default gateway to this interface assign it
	if [ "$GLB_GATEWAY" != "" ] ; then
	    if [ "$4" = "$GLB_GATEWAY" ] || [ "$5" = "$GLB_GATEWAY" ] || 
	       [ "$6" = "$GLB_GATEWAY" ] ; then
		route add default gw $GLB_GATEWAY
	    fi
	fi
	;;
    'stopppp')
	fw_stopppp $@
	;;
    *)
    echo "usage $0 start|stop|list"
    esac
else
    init_ebt_need
fi

Модификация скрипта firewall

Если вы хотите добавить дополнительные команды для каких-то устройств, то лучше их добавлять на в файл firewall, а в файл firewall.usr.  Это  предотвратит проблемы при переходе с одной версии на другую. Пустой файл firewall.usr имеет вид:

#!/bin/sh

fw_user_start() {
    return
}

fw_user_stop() {
    return
}
fw_user_start - вызывается при конфигурировании каждого устройства DEVx. fw_user_stop - вызывается только при удалении устройств типа ppp. При вызове в переменной d_dev - имя устройства DEVx. 

Утилиты из bootdisk.ut

В этой директории в ДОС разделе находятся некоторые утилиты Linux в упакованном виде. При их вызове происходит распаковка или установка во временную файловую систему, а по завершении файлы снова удаляются. Если программа была прервана, то ее тело может остаться в директории tmp. Для очистки можно воспользоваться командой /bin/cleardsk, которая чистит директории /tmp и /var/log. Сейчас есть утилиты mc, arp, tcpdump, iptraf, dosfsck. Для добавление новых правила как для "Добавление программ".

Пакеты входящие в дистрибутив

Здесь далее перечислены пакеты которые входят в данный дистрибутив. Приведены команды для запуска и остановки пакетов. Если такие команды приведены, то для управления пакетом лучше использовать их, т.к. для ряда пакетов используется программа контролирующая выполнение этих пакетов(respawnd) и, если он по какой либо причине слетает, она автоматически перезапускает его. Если вы например захотите снять такой пакет командой kill, то это только приведет к его перезапуску.

respawnd

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

respawn-on <имя программы> <параметры программы>

Для отключения контроля, нужно дать команду:

respawn-off <имя программы>

<имя программы> - должен быть задан полный путь к программе и само имя должно быть уникальным, поэтому, если требуется выполнять какую либо программу для разных устройств одновременно или с разными параметрами, для этого лучше делать символические ссылки, например <имя программы>-<имя устройства>.

Если какая либо программа, выполняется под контролем программы respawnd,  то в случае если она завершается, по каким либо причинам (не важно аварийное это завершение или нормальное), respawnd перезапускает ее с теми же параметрами, что были заданы в команде respawn-on. 

Команда respawn-on  всегда сама переводит выполняемую программу в режим демона.

ssh

Сервер, клиентская часть для подключения по ssh и программа scp. Используется пакет dropbear-0.45. Включен в корневую файловую систему. Для запуска сервера в netparm нужно поставить GLB_SSHD=1 . Поддерживается только протокол ssh2. Поддерживаемые команды: 

остановить сервер: /etc/rc.d/rc.db stop
запустить сервер:   /etc/rc.d/rc.db start (должна стоять опция GLB_SSHD=1).

Клиентская программа называется dbclient или ssh.

ЗАМЕЧАНИЕ:
 

Если вы подключившись по ssh, хотите запустить mc, нужно установить для клиента ssh тип терминала vt100 или linux. Иначе программа mc не запустится (будет завершаться ошибкой Segmentation fault). 

iptables

Поддержка iptables. Используется пакет iptables-1.3.1.  Для установки скопируйте содержание одноименной директории в директорию upgrade, кроме скрипта firewall, который нужно скопировать в директорию bootdisk. Для того, чтобы автоматически стал вызываться скрипт firewall нужно установить опцию GLB_FIREWALL=1.  

Поддерживаемые команды: 

остановить firewall: /etc/firewall stop
запустить firewall: /etc/firewall start
показать текущие правила: /etc/firewall list

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

ЗАМЕЧАНИЕ:
 

Для ppp соединений правила создаются/удаляются динамически при вызове из скриптов if-up и if-down. Поэтому при рестарте правила для этих соединений будут сброшены и доступ по ним заблокирован. Поэтому, если есть устройства ppp  нужно использовать перезапуск сети.

ebtables

Поддержка ebtables. Пакет позволяет контролировать трафик проходящий через мост. Используется пакет ebtables-2.0.6.  Для установки скопируйте содержание одноименной директории в директорию upgrade. Управление ebtables встроено в скрипт firewall пакета iptables.   Если вы хотите использовать только ebtables, нужно GLB_FIREWALL=0  и добавить свои команды для ebtables в netadd.rc

arptable

Поддержка arptables. Пакет позволяет управлять таблицей ARP. Используется пакет arptables-0.0.3-2.  Для установки скопируйте содержание одноименной директории в директорию upgrade Стандартных скриптов нет. 

iptunnel

Утилита iptunnel и модули ядра для неё. Для установки скопируйте содержание одноименной директории в директорию upgrade. Прежде чем использовать утилиту iptunnel, позаботьтесь о загрузке нужных вам модулей, т.к. автоматом они не грузятся.

dnsmasq2

Программа кэширования и перенаправления DNS запросов и DHCP сервер. Используется пакет dnsmasq-2.22. Для установки скопируйте содержание одноименной директории в директорию upgrade. Чтобы программа запустилась, нужно чтобы в netparm был задан один из серверов DNS, которому будут перенаправляться запросы.  Поддерживаемые команды: 

остановить сервер: /etc/rc.d/rc.dn2 stop
запустить сервер:   /etc/rc.d/rc.dn2 start

Через переменную GLB_DNSPARM могут быть переданы дополнительные параметры:

-i, --interface=<имя интерфейса> - слушать только заданный интерфейс. Может быть задано несколько интерфейсов. По умолчанию слушаются все интерфейсы.

-a, --listen-address - слушать только заданный ip-адрес

-c, --cache-size=<размер кэша> - задает размер кэша имен. По умолчанию 300. Если 0 - то отменяется кэширование.

Другие параметры можно посмотреть запустив dnsmasq2 --help.

Скрипт по запуску dnsmasq2 перезаписывает файл /etc/resolv.conf.

Кроме сервера DNS dnsmaq2  может быть одновременно и DHCP сервером. Настройки передаются в файле dnsmasq.conf (dnsmaq.cfg в DOS-разделе). Возможна выдача ip-адресов с привязкой к MAC-адресу.

bridge

Поддержка режима BRIDGE. Используется пакет bridge-utils-1.0.6. Для установки скопируйте содержание этой директории в директорию upgrade. Параметры можно посмотреть запустив brctl --help

ppp

Поддержка ppp.  Используется пакет ppp-2.4.3.  Для установки скопируйте содержание одноименной директории в директорию upgrade. Конфигурационные файлы настроены на работу в режиме сервера, т.е. на прием звонков. Скриптов по установке связи нет.

Поддерживаемые команды: 

остановить сервер pppd: /etc/rc.d/rc.ppp stop
запустить сервер pppd: /etc/rc.d/rc.ppp start

Настройка:

  1. Опишем в конфигурационном фале netparm параметры TCP/IP для ppp. Например:

    DEV3_IF="ppp0"
    DEV3_NAME=ppp
    DEV3_IPADDR=192.168.0.1
    DEV3_IPNET=192.168.0.0
    DEV3_IPMASK=255.255.255.0

  2. Определим в конфигурационном файле к какому com-порту подключен модем, скорость работы с ним и сошлемся на описанное выше устройство. Например, для com1:

    GLB_TTYS0="ppp"
    GLB_TTYS0SPD=57600
    GLB_TTYS0DEV=DEV3

  3. если нужно подправим опции pppd  для выбранного порта. Для com1 - файл options.s0, для com2 - файл options.s1
  4. в зависимости от выбранного способа авторизации правим файлы pap-sec.ppp или chap-sec.ppp. По умолчанию стоит pap. Пример для pap:

  5. # Secrets for authentication using PAP
    # client   server    secret             IP addresses
    ivanov     *             password1    192.168.0.2
    petrov     *             password2    192.168.0.3

    Обратите внимание чтобы назначаемые здесь адреса попадали в диапазон заданный для устройства определенного в GLB_TTYSXDEV=. Иначе, если будет использоваться скрипт firewall, доступ будет заблокирован.

Сервер стартует автоматом, если пакет установлен и определен хотя бы один интерфейс ppp.

pppoe сервер и клиент

Поддержка сервера и клиента pppoe.  Используется пакеты ppp-2.4.3, rp-pppoe-3.5. Требуется чтобы был установлен пакет ppp. Для установки скопируйте содержание директории pppoe в директорию upgrade

Поддерживаемые команды: 

Запустить сервер pppoe: /etc/rc.d/rc.poe start
Остановить сервер pppoe: /etc/rc.d/rc.poe stop
Запустить клиента pppoe: /etc/rc.d/rc.ads start
Остановить клиента pppoe: /etc/rc.d/rc.ads stop

Ниже приведены пример настройки сервера и клиента pppoe,  вместо 'x'  и 'y' в строках DEVx и DEVy в реальном файле нужно поставить номера устройств.

Настройка сервера pppoe:

  1. Опишем в фале netparm устройство pppoe. Пример:

    DEVx_NAME=pppoe
    DEVx_IF="ppp"
    DEVx_IFBIND="DEVy"
    DEVx_IPADDR=192.168.0.1
    DEVx_IPNET=192.168.0.0
    DEVx_IPMASK=255.255.255.0
    DEVx_PARM=""

    DEVx_IF должен быть ppp. Здесь DEVx_IFBIND задает устройство DEVy, к которому линкуется сервер pppoe (должно существовать иначе сервер не запустится).  DEVx_IPADDR задает локальный ip-адрес (ip-адрес назначаемый ppp соединениям на этой стороне).  DEVx_IPNET и DEVx_IPMASK используются только при включенном режиме firewall и используются для описания ip-адресов клиентов. Для определения типа соединений можно использовать параметр DEVx_IPMASQ. В DEVx_PARM можно задать дополнительные опции для программы pppoe-server (например имя концентратора). Опции можно посмотреть командой pppoe-server --help

  2. Правим опции pppoe-server в файле server.poe
  3. В зависимости от выбранного способа авторизации правим файлы pap-sec.ppp или chap-sec.ppp. По умолчанию стоит pap. Пример аналогичен приведенному выше для ppp. 
  4. Если в server.poe задана опция login, то кроме описания пользователя в пункте 3, после загрузки системы, нужно добавить каждого пользователя командой adduser. После добавления  не забудьте дать команду save для сохранения.

Сервер стартует автоматом, если пакет установлен и определен хотя бы один интерфейс pppoe.

Настройка клиента pppoe:

  1. Опишем в  фале netparm устройство adsl. Пример:

    DEVx_NAME="adsl"
    DEVx_IF="ppp10"
    DEVx_IFBIND="DEVy"
    DEVx_USER=ivanov
    DEVx_PASSWORD=ivanovpwd
    DEVx_IPADDR=192.168.0.1
    DEVx_IPNET=192.168.0.0
    DEVx_IPMASK=255.255.255.255

    Здесь: DEVx_NAME=adsl - признак, что устройство описывает клиента pppoe. DEVx_IF - задает имя интерфейса ppp, который нужно назначить этому соединению (формат имени ppp<номер>). DEVx_IFBIND - задает устройство, через которое подключается клиент. DEVx_USER - задает имя клиента. DEVx_PASSWORD - пароль на подключение (если не задан в netparm, должна быть запись о пользователе в файле секрета ). Остальные параметры нужны только если включен firewall:

    Если соединению назначается всегда постоянный ip-адрес, то лучше его описать в DEVx_IPADDR иначе параметр не надо задавать. DEVx_IPNET, DEVx_IPMASK  задают маску и сеть - которые назначаются этому клиенту сервером. Для определения типа соединения можно использовать параметр DEVx_IPMASQ.

  2. Если нужно, можно подправить опции заданные в файле pppoe.cfg. Они используются в скрипте запуска pppoe клиента.
  3. Если не задан DEVx_PASSWORD, то в зависимости от способа авторизации правим файлы pap-sec.ppp или chap-sec.ppp. По умолчанию стоит pap. Добавляем пользователя описанного в DEVx_USER и задаем пароль для него. Вместо сервера ставим '*', ip-адрес не задаем.

Клиент стартует автоматом, если пакет установлен и определен хотя бы один интерфейс adsl.

pptp(VPN) сервер)

Поддержка pptp.  Используется пакеты ppp-2.4.3pptp-1.2-1. Требуется чтобы был установлен пакет ppp. Для установки скопируйте содержание директории pptp в директорию upgrade

Поддерживаемые команды: 

остановить сервер pptp: /etc/rc.d/rc.ppt stop
запустить сервер pptp: /etc/rc.d/rc.ppt start

Настройка:

  1. Опишем в фале netparm устройство pptp. Например:

    DEVx_NAME="pptp"
    DEVx_IF=ppp
    DEVx_IFBIND="DEVy"
    DEVx_IPADDR="192.168.0.1"
    DEVx_IPNET=""
    DEVx_IPMASK=""
    DEVx_PARM=""

    DEVx_IF должен быть ppp. DEVx_IPADDR - задает локальный ip-адрес, назначаемый ppp соединениям. DEVx_IFBIND описывает устройство к которому подключается сервер, подключения клиентов возможны только с него. В DEVx_PARM можно задать дополнительные опции для программы pptpd. Опции можно посмотреть командой pptpd  --helpDEVx_IPNET, DEVx_IPMASK - необязательные параметры и нужны только в случае, если включен firewall. В них можно прописать ip-маску и сеть - которые назначаются сервером клиентам.  Для определения типа соединений можно использовать параметр DEVx_IPMASQ.

  2. Для конфигурирования сервиса редактируйте файлы pptpd.cfg linux разделе имя pptpd.conf) и options.ppt (options.pptpd). По умолчанию настроено на использование на протокол идентификации mschap-v2. Не задавайте параметр localip в этом файле, используйте для этого DEVx_IPADDR.
  3. Если у Вас клиенты или сервера сидят за файрволом, то надо разрешить на нём прохождение 47 протокола c VPN-сети(10.0.0.0/24) (... -p 47 -s 10.0.0.0/24 ...) (в стандартном файле firewall это делается автоматически) и соединения по протоколу tcp порту 1723 (... -p tcp --dport 1723 ...) (для стандартного файла firewall этот порт нужно включить в список DEVx_TCPEPORT ). Нужные модули для файервола подгружаются при запуске pptp.  

Сервер стартует автоматом, если пакет установлен и определен хотя бы один интерфейс pptp.

pptp(vpn) клиент

Поддержка клиента ppptp.  Используется пакеты ppp-2.4.3, pptp-linux-1.6.0. Требуется чтобы был установлен пакет ppp. Для установки скопируйте содержание директории pptpc в директорию upgrade

Поддерживаемые команды: 

Запустить клиента pptp: /etc/rc.d/rc.ppc start
Остановить клиента pptp: /etc/rc.d/rc.ppc stop

Настройка:

  1. Опишем в конфигурационном фале netparm параметры для клиента pptp (Вместо 'x' в реальном файле нужно поставить номер устройства). Пример:

    DEVx_NAME="vpn"
    DEVx_IF="ppp11"
    DEVx_SERVER=192.168.100.1
    DEVx_USER=ivanov
    DEVx_PASSWORD=ivanov
    DEVx_IPADDR=192.168.0.1
    DEVx_IPNET=192.168.0.0
    DEVx_IPMASK=255.255.255.0

    Здесь: DEVx_NAME=vpn - признак, что устройство описывает клиента pptp. DEVx_IF - задает имя интерфейса ppp, который нужно назначить этому соединению (формат имени ppp<номер>). DEVx_SERVER - задает адрес сервера pptp. DEVx_USER - задает имя клиента, а  DEVx_PASSWORD - пароль на подключение.  Если соединению назначается всегда постоянный ip-адрес, то лучше его описать в DEVx_IPADDR иначе параметр не надо задавать. DEVx_IPNET, DEVx_IPMASK  задают маску и сеть - которые назначаются этому клиенту сервером (нужны только если включен firewall). Для определения типа соединений можно использовать параметр DEVx_IPMASQ.

  2. Если нужно, можно подправить опции заданные в файле options.ppc (это опции ppp для pptp клиента). 

Клиент стартует автоматом, если пакет установлен и определен хотя бы один интерфейс vpn.

QoS

Поддержка QoS и iproute2. Используется пакет iproute2. Для установки скопируйте содержание директории qos в директорию upgrade. Включает модули ядра для QoS, утилиты ip и tc (расширенное управление маршрутизацией и контроль трафика). 

nacctd, xinetd, sudo

Поддержка коллектора net-acct. Используется пакет net-acct-0.7. Для установки скопируйте содержание директории nacctd в директорию upgrade. Настройте параметры коллектора задаваемые в файле naccttab. Учитывайте при этом что жесткий диск смонтирован в директории /mnt/fd, поэтому вывод нужно назначать в эту директорию. Для того чтобы была возможность забирать статистику с другой машины поставляются пакеты xinetd и sudo.

Используются пакеты sudo-1.6.6, xinetd-2.3.12, netkit-rsh-0.17. Для их установки скопируйте директории sudo и xinetd в директорию upgrade. Настройте конфигурационные файлы этих пакетов, для этого обратитесь к соответствующей документации. Здесь приведу только условия при которых будет выполнятся rexec.
  1. IP-адрес с которого идет подключение обязательно должен быть распознан используя DNS или файл hosts. Иначе соединение отвергается.
  2. Имя пользователя не должно быть описано в файле ftpusers. Озаботьтесь чтобы подключение с правами root было запрещнено. Файл ftpusers обязательно должен существовать.
  3. Домашняя директория пользователя заданная в файле passwd должна существовать. Об этом модно позаботится вставив команду mkdir в файл netadd.rc. Создавать ее лучше в директории /home, которая доступна на запись.

Как настроить сбор статистики на другой компьютер

  1. Прописываем в netacctab, чтобы данные собирались в файл /mnt/fd/traf/net-acct
  2. Добавим для сбора статистики пользователя командой adduser. Например пусть его имя stat123 пароль pwdgetstat. В файл netadd.rc добавим команду: mkdir /home/stat123, чтобы создавалась домашняя директория при загрузке или в файле /etc/passwd для этого пользователя нужно прописать существующую на диске директорию. Дадим команду save для сохранения измененных файлов. .
  3. Добавим в файл hosts описание машины с которой будет сниматься статистика, например:

    192.168.200.55 hoststat

    Добавили что имя машины с ip адресом 192.168.200.55 будет hoststat. С одной стороны это нужно для rexec, с другой ниже мы введем ограничение, чтобы статистика забиралась только с этой машины.

  4. В файле xinetd.conf (в ДОС разделе имя xinet.cfg) разрешим запуск сервиса exec. Для этого в описании сервиса поставим disable = no. Чтобы ограничить доступ к сервису, можно прописать only_from  = hoststat (допускается запуск только с указанного хоста) и  interface =  192.168.200.199 (подключаться только к этому интерфейсу).
  5. Директория /mnt закрыта для обычных пользователей, поэтому чтобы обеспечить манипулирование с файлом /mnt/fd/traf/net-acct, в файл sudoers добавим следующие строки:

    stat123 ALL=NOPASSWD: /bin/cat /mnt/fd/traf/net-acct
    stat123 ALL=NOPASSWD: /bin/zero /mnt/fd/traf/net-acct

    Первая команда позволит забирать данные статистики, вторая обнуляет этот файл. Команды должна выполнятся пользователем stat123 с машины hoststat.  Не разрешайте выполнять команду cat без параметров, иначе будет возможность просмотреть файлы, которые хранятся в ДОС разделе (в т.ч. файлы с паролями).

  6. Если пункты 3) 4) 5) проводились с файлами в разделе linux, сохраним изменения командой save.
  7. На машине с которой будем собирать статистику создадим скрипт, например gettraf следующего содержания: 

    #!/bin/sh
    sudo=/usr/local/bin/sudo
    traf=/mnt/fd/traf/net-acct
    /usr/bin/rexec -a -l stat123 -p pwdgetstat 192.168.200.199 "$sudo /bin/cat $traf && $sudo /bin/zero $traf" >>/var/log/net-acct

    Этой командой мы забираем статистик с машины 192.168.200.199 и добавляем ее в файл  /var/log/net-acct. Сюда же можно добавить команды по обработке статистики.

    Можно прописать в конфигурационном файле /etc/crontab планировщика задач crond прописать выполнение следующей команды:

    */15     *     *     *     *     root     /usr/local/bin/gettraf

    Здесь /usr/local/bin/gettraf путь до созданного нами файла. Тогда каждые 15-ть минуть минут статистика будет забираться с сервера.

iowr

Небольшая утилита - обеспечивает доступ к аппаратным портам. Состоит из модуля iowr и программы io. Перед использованием io нужно выдать команду insmod iowr. Синтаксис:

io  {inb|inw|inl}        io-port
io {outb|outw|outl}   io-port   data

Предназначалась для того чтобы можно было перезагружать другие устройства. Для этой функции требуется дополнительное оборудование подключаемое например к порту LPT и выполняющее перезагрузку этих устройств и скрипт, который выполняет проверку доступности устройств.  

Сбор трафика с драйвера ipln

Пакет представляет из себя скрипт, позволяющий собирать статистику с драйвера ipln.

Чтобы пакет работал нужно чтобы был включен crond(GLB_CROND=1). Частота сбора задается в файле rc.trf и по умолчанию равна десять минут. Если вы хотите ее изменить, нужно исправить следующую строку:

echo "*/10 * * * * /etc/traf.rc" >>/etc/crontab

В файле traf.rc задаются настройки с каких интерфейсов снимать статистику:

trfpath=/mnt/fd/trf    # путь для размещения файлов 
zip=0                         # если поставит 1- то файлы будут сжиматься gzip
iface_0="eth1"         # имя первого интерфейса ipln
devnum_0="0"          # номер устройства ipln (devnum) для этого интерфейса
#iface_1="eth2"       # имя 2-го интерфейса ipln
#devnum_1="1"       # номер устройства ipln (devnum) для этого интерфейса
#iface_2="eth3"      # имя 3-го интерфейса ipln
#devnum_2="2"       # номер устройства ipln (devnum) для этого интерфейса

чтобы добавить сбор трафика со второго или третьего устройств - нужно исправить и разкомментировать нужные строки. Файлы трафика имеют следующие имена:

ГГДДММЧЧ.t{r|c}<devnum> - где ГГДДММЧЧ задают год, месяц число и час. Если в расширении вторая буква 'c', то это текущий файл сбора трафика. Переключение на другой файл происходит через час. <devnum>  - задает номер устройства ipln (devnum) в файле ipln.cfg. Для забора и обработки трафика служит скрипт trafic программы iplnmng.

Установка драйвера acx100

Драйвер acx100 можно использовать для wireless адаптеров на базе ACX100\ACX111 чипе. Для запуска драйверу нужно передать параметр с указанием директории с firmware. Имя директории /etc/acx100. Если требуются какие либо специфические настройки для wireless, вам нужно установить пакет wireless и задать параметр DEVx_SETUP, который вызывает скрипт "/etc/acx100/acx100.rc". В этом скрипте (пример есть в дистрибутиве) вы можете задать нужные параметры. Пример (обратите внимание головной модуль называется acx_pci, а не acx100):

DEV0_NAME="acx_pci"
DEV0_IF="wlan0"
DEV0_PARM="firmware_dir=/etc/acx100"
DEV0_SETUP="/etc/acx100/acx100.rc"
...

Для драйвера acx100 - требуются файлы с firmware производителей. Эти файлы берутся из драйверов под Windows. Сейчас в дистрибутиве файлы только для acx100. Если вы захотите обновить firmware на более позднее или добавить для acx111, нужно сделать следующее:

Берем новые файлы firmware (файлы с расширением .bin). Сжимаем их gzip (файл должен имеет расширение .gz). Если уже такой файл есть в дистрибутиве в директории acx100, заменяем его. Если нет - добавляем и в upgrade.acx

copymod <имя файла без расширения> /etc/acx100/<имя файла без расширения>.BIN

Имя файла firmware для acx100 - WLANGEN.BIN, для acx111 - TIACX100.BIN. Файлы типа RADIOxx.BIN также нужны для драйвера.

Приложения

Параметры передаваемые адаптерам Iolanet

Драйверу Iolanet можно передавать дополнительные параметры. Если вы вводите данные в шестнадцатеричном виде, необходимо использовать формат вида 0xn, 0xnn, 0xnnn и т.д.

io=MMM - базовый порт вода/вывода 

irq=II - номер IRQ

node=NN - задаете MAC-адрес адаптера. Все адаптеры должны иметь уникальные в сегменте адреса.

forward=NN - задает MAC-адрес платы, которой будут пересылаться все пакеты. Этот параметр нужен для работы  в режиме моста. Он должен равен MAC-адресу платы на втором мосте. Пример: на первом мосте node=0x01  forward=0x02, то на втором node=0x02 forward=0x01. Не задавайте этот параметр при других режимах работы.

type=n - тип адаптера. Параметр нужен только в случае платы IOLANET-25 и может принимать следующие значения:

maxretry=NN - максимальное число повторов кадра

maxprty=NN - приоритет машины при прослушивании линии

ltime=3-5 - масштаб измерения задержек (для IOLANET-02)

speed=0-6 - установить скорость приема (для IOLANET-10 и IOLANET-25)

squsyn=0-7 - установить скорость приема синхрослова (для IOLANET-10 и IOLANET-25

squfix=0-1 - отменить/запретить автоматическое изменение скорости при приеме для (IOLANET-10 и IOLANET-25)

load_line=0-2 - линя загрузки (для IOLANET-25)

slot=NN - номер PCI slot (для IOLANET-25 в режиме PCI). В этом случае драйвер не производит поиск платы по всем слотам, а пытается запрограммировать только этот слот.

Использование программы Winscp

Программу Winscp можно использовать для удаленного обновления математики, вместо протокола ftp. На сервере должен быть brgroute-4.3. В программе нужно выбирать протокол SCP. Если используется plugin для far, то в опциях протокола SCP, нужно отключить опцию "Try to get full timestamp".