Cipe + Маскарадинг в Linux

Настройка firewall

В этом документе я предполагаю, что ваше ядро уже поддерживает IP-маскарадинг. См. раздел "Ссылки", в котором приведены ссылки на информацию о включении в ядро поддержки IP-маскарадинга.

Структура VPN

Машины связаны по технологии "звезда". Мы установим одно cipe-соединение между машинами A и B, и второе между A и C.

                    Машина A
eth0: 192.168.1.1
eth1: реальный ip 1
/               \
/                 \
Машина  B                 Машина  C
eth0: 192.168.2.1           eth0:192.168.3.1
eth1: реальный ip 2         eth1: реальный ip 3
Небольшое замечание
eth0 - это локальная сеть (фиктивный адрес)
eth1 - это интернет (настоящий адрес)
Порт A - это любой возможный порт, который вам нравится
Порт B - это другой возможный порт, который вам нравится
Ключ A - это любой возможный ключ, который вам нравится (читайте документацию Cipe)
Ключ B - это другой возможный ключ, который вам нравится
Дополнительная информация о скриптах и VPN

Приведенные здесь скрипты ip-up рассчитаны на сети класса C. Если хотите, чтобы машина B могла связаться с машиной C, вам придется исправить соответствующие скрипты ip-up и ip-down. В них надо исправить маски ptpaddr и myaddr. Ниже приводятся два скрипта ip-up - один для ipchains, второй для ipfwadm. Также и для скриптов ip-down. Измените с /24 на /16 соответствующие правила интерфейса cipe для входящего, исходящего или проходящего потоков. Если вы изменяете правило в ip-up (ipfwadm), не забудьте изменить его в скрипте ip-down, чтобы оно удалялось при отключении интерфейса. Что же касается варианта для ipchains, то изменения в ip-up не требуют изменений в ip-down, ip-down просто удаляет все правила пользователя.

Вам также придется раскомментировать в файлах rc.cipe машин B и C строку с указанием маршрута на сети друг друга.

Конфигурация машины A

/etc/cipe/options.machineB

#раскомментируйте одну из следующих строк
#Название для cipe версии 1.0.x
#device          cip3b0
#Название для cipe версии 1.2.x
device          cipcb0
#удаленный внутренний (фиктивный) IP-адрес
ptpaddr         192.168.2.1
#мой внутренний (фиктивный) IP-адрес
ipaddr          192.168.1.1
#мой настоящий адрес и порт cipe
me              (real ip 1):(port A)
#настоящий удаленный адрес и порт cipe
peer            (real ip 2):(port A)
#уникальный 128-битный ключ
key             (Key A)
/etc/cipe/options.machineC
#раскомментируйте одну из следующих строк
#Название для cipe версии 1.0.x 
#device          cip3b1
#Название для cipe версии 1.2.x
device          cipcb1

#удаленный внутренний (фиктивный) IP-адрес
ptpaddr         192.168.3.1
#мой внутренний (фиктивный) IP-адрес
ipaddr          192.168.1.1
#мой настоящий адрес и порт cipe
me              (real ip 1):(port B)
#удаленный настоящий адрес и порт cipe
peer            (real ip 3):(port B)
#уникальный 128-битный ключ
key             (Key B)
/etc/rc.d/rc.cipe
!#/bin/bash
#rc.cipe  3/29/1999
#Вопросы и комментарии посылайте по адресу acj@home.com.

#Задаем пути по умолчанию
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

#Имена файлов options в каталоге cipe
options="options.machineB options.machineC"

#Автоматическое заполнение переменной options
#options=`/bin/ls /etc/cipe/options.*`

#раскомментируйте одну из следующих строк с указанием имени модуля cipe
#cipemod="cip3b"        #для cipe 1.0
#cipemod="cipcb"        #для cipe 1.2

#Проверяем, загружен ли модуль cipe - если нет, то загружаем
grep $cipemod /proc/modules >/dev/null
if [ "$?" = "1" ]; then
echo Загрузка модуля cipe.
modprobe $cipemod
if [ "$?" = "1" ]; then
echo Ошибка загрузки модуля cipe.
exit
fi
else
echo Модуль cipe уже загружен.
fi

#Удаляем все существующие интерфейсы cipe
cipeif=`cat /proc/net/dev | cut -f1 -d: | grep $cipemod`

if [ "$cipeif" != "" ]; then
echo Удаляем существующие интерфейсы cipe.
for i in $cipeif; do
ifconfig $i down
done
fi

#Настройка интерфейсов cipe
echo -n "Настройка интерфейсов cipe: "
for config in $options; do
echo -n $config" "
ciped -o $config
done
echo
echo

#Добавляем маршруты к удаленным сетям через интерфейс(ы) cipe
#route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x

Шлюз

У всех машин сети 192.168.1.0 шлюз по умолчанию должен быть установлен в 192.168.1.1. Если этого не сделать - ничего не будет работать.

Конфигурация машины B

/etc/cipe/options.machineA

#раскомментируйте одну из следующих строк
#Название для cipe версии 1.0.x
#device          cip3b0
#Название для cipe версии 1.2.x
device          cipcb0

# удаленный внутренний (фиктивный) IP-адрес
ptpaddr         192.168.1.1
# мой внутренний (фиктивный) IP-адрес
ipaddr          192.168.2.1
# мой настоящий адрес и порт cipe
me              (real ip 1):(port A)
# настоящий удаленный адрес и порт cipe
peer            (real ip 2):(port A)
# уникальный 128-битный ключ
key             (Key A)
/etc/rc.d/rc.cipe
!#/bin/bash
#rc.cipe  3/29/1999
#Вопросы и комментарии посылайте по адресу acj@home.com.

#Задаем пути по умолчанию
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

#Имена файлов options в каталоге cipe
options="options.machineA"

#Автоматическое заполнение переменной options
#options=`/bin/ls /etc/cipe/options.*`

#раскомментируйте одну из следующих строк с указанием имени модуля cipe
#cipemod="cip3b"        #для cipe 1.0
cipemod="cipcb"        #для cipe 1.2

#Проверяем, загружен ли модуль cipe - если нет, то загружаем
grep $cipemod /proc/modules >/dev/null
if [ "$?" = "1" ]; then
echo Загрузка модуля cipe.
modprobe $cipemod
if [ "$?" = "1" ]; then
echo Ошибка загрузки модуля cipe.
exit
fi
else
echo Модуль cipe уже загружен.
fi

#Удаляем все существующие интерфейсы cipe
cipeif=`cat /proc/net/dev | cut -f1 -d: | grep $cipemod`

if [ "$cipeif" != "" ]; then
echo Удаляем существующие интерфейсы cipe.
for i in $cipeif; do
ifconfig $i down
done
fi

#Настройка интерфейсов cipe
echo -n "Настройка интерфейсов cipe: "
for config in $options; do
echo -n $config" "
ciped -o $config
done
echo
echo

#Добавляем маршруты к удаленным сетям через интерфейс(ы) cipe
#route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x
#маршрут к сети машины C
#route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.1
Шлюз
У всех машин сети 192.168.2.0 шлюз по умолчанию должен быть установлен в 192.168.2.1. Если этого не сделать - ничего не будет работать.
Конфигурация машины C
/etc/cipe/options.machineA
#раскомментируйте одну из следующих строк
#Название для cipe версии 1.0.x
#device          cip3b0
#Название для cipe версии 1.2.x
device          cipcb0
#удаленный внутренний (фиктивный) IP-адрес
ptpaddr         192.168.1.1
#мой внутренний (фиктивный) IP-адрес
ipaddr          192.168.3.1
#мой настоящий адрес и порт cipe
me              (real ip 3):(port B)
#настоящий удаленный адрес и порт cipe
peer            (real ip 1):(port B)
#уникальный 128-битный ключ
key             (Key B)
/etc/rc.d/rc.cipe
!#/bin/bash
#rc.cipe  3/29/1999
#Вопросы и комментарии посылайте по адресу acj@home.com.

#Задаем пути по умолчанию
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

#Имена файлов options в каталоге cipe
options="options.machineA"

#Автоматическое заполнение переменной options
#options=`/bin/ls /etc/cipe/options.*`

#раскомментируйте одну из следующих строк с указанием имени модуля cipe
#cipemod="cip3b"        #for cipe 1.0
cipemod="cipcb"        #for cipe 1.2

#Проверяем, загружен ли модуль cipe - если нет, то загружаем
grep $cipemod /proc/modules >/dev/null
if [ "$?" = "1" ]; then
echo Загрузка модуля cipe.
modprobe $cipemod
if [ "$?" = "1" ]; then
echo Ошибка загрузки модуля cipe.
exit
fi
else
echo Модуль cipe уже загружен.
fi

#Удаляем все существующие интерфейсы cipe
cipeif=`cat /proc/net/dev | cut -f1 -d: | grep $cipemod`

if [ "$cipeif" != "" ]; then
echo Удаляем существующие интерфейсы cipe.
for i in $cipeif; do
ifconfig $i down
done
fi

#Настройка интерфейсов cipe
echo -n "Настройка интерфейсов cipe: "
for config in $options; do
echo -n $config" "
ciped -o $config
done
echo
echo

#Добавляем маршруты к удаленным сетям через интерфейс(ы) cipe
#route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x
#маршрут к сети машины B
#route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1
Шлюз
У всех машин сети 192.168.2.0 шлюз по умолчанию должен быть установлен в 192.168.2.1. Если этого не сделать - ничего не будет работать.

Настройки, общие для всех машин

/etc/cipe/ip-up

Ядро 2.0, ipfwadm, cipe 1.0.x

#!/bin/bash
# ip-up <интерфейс> <мой_адрес> <pid_демона> <локальный_адрес> <удаленный_адрес> <аргументы>
#3/29/1999
#Это пример скрипта ip-up для старых ядер версий 1.x 2.x, использующих ipfwadm,
#настраивающий маршруты и правила firewall для соединения вашей сети класса c
#с удаленной сетью класса c.

#Правила настроены с учетом невозможности нелегального перехвата пакетов,
#а также нелегальной маршрутизации между сетями.  Дополнительные меры безопасности
#приведены в конце скрипта (закомментированы).
#Вопросы и предложения посылайте по адресу acj@home.com.
#Настраиваем некоторые переменные
device=$1               # Интерфейс CIPE
me=$2                   # Наш UDP-адрес
pid=$3                  # ID процесса демона
ipaddr=$4               # IP-адрес нашего CIPE-устройства
vptpaddr=$5             # IP-адрес удаленного CIPE-устройства
option=$6               # аргументы, переданные через опции скрипта
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#рас(за)-комментируйте следующую строку для включение в системный журнал
#всех попыток неавторизованного доступа. Эта строка должна соответствовать
#строке в скрипте ip-down для правильного отключения правил.
log="-o"
umask 022

# пример записи в журнал
#echo "UP   $*" >> /var/adm/cipe.log
# во многих системах требуются такие pid-файлы
#echo $3 > /var/run/$device.pid
#добавляем маршрут к удаленной сети
network=`expr $ptpaddr : '\([0-9]*\.[0-9]*\.[0-9]*\.\)'`0
route add -net $network netmask 255.255.255.0 dev $device
#для ядер версии 2.0 надо добавить и маршрут к машине
route add -host $ptpaddr dev $device
#Правила для входящего потока firewall для интерфейса cipe
#они должны задаваться в обратном порядке
#запрещаем все остальные входящие с интерфейса cipe пакеты
ipfwadm -I -i deny -W $device -S 0/0 -D 0/0 $log
#разрешаем все пакеты, входящие с интерфейса cipe из удаленной сети для локальной
ipfwadm -I -i accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#разрешаем все пакеты, входящие с интерфейса cipe из локальной сети для удаленной
ipfwadm -I -i accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#запрещаем все пакеты, входящие с интерфейса cipe из локальной сети для локальной; записываем это в журнал
ipfwadm -I -i deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
#Правила для исходящего потока firewall для интерфейса cipe
#они должны задаваться в обратном порядке
#запрещаем все остальные исходящие из интерфейса cipe пакеты
ipfwadm -O -i deny -W $device -S 0/0 -D 0/0 $log
#разрешаем все пакеты, исходящие с интерфейса cipe из удаленной сети для локальной
ipfwadm -O -i accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#разрешаем все пакеты, исходящие с интерфейса cipe из локальной сети для удаленной
ipfwadm -O -i accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#запрещаем все пакеты, исходящие с интерфейса cipe из локальной сети для локальной; записываем это в журнал
ipfwadm -O -i deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
#Правила для проходящего потока firewall для интерфейса cipe
#они настроены так, чтобы машины локальной сети не попадали для удаленной
#под маскарадинг. Так лучше работать с обеими сетями
#они должны задаваться в обратном порядке
#запрещаем все остальные проходящие через интерфейс cipe пакеты; записываем это в журнал
ipfwadm -F -i deny -W $device -S 0/0 -D 0/0 $log
#разрешаем все пакеты, проходящие через интерфейс cipe из удаленной сети в локальную
ipfwadm -F -i accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#разрешаем все пакеты, проходящие через интерфейс cipe из локальной сети в удаленную
ipfwadm -F -i accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#Для большей уверенности разрешаем ядру переадресацию пакетов
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
#Дополнение к системе безопасности - в случае, если стандартное правило для
#проходящего потока установлено в DENY или REJECT.
#определяем интерфейсы машины
#localif="eth0"
#staticif="eth1"                ;для пользователей кабельных модемов
#staticif="ppp0"                ;для пользователей обычных модемов
#По-настоящему грубо определяем удаленный ip-адрес, взяв его из файла options.
#В идеале этот адрес надо передавать скрипту через аргументы
#Надо раскомментировать обе строки
#peerfile=`grep $device /etc/cipe/options.* | cut -f1 -d:`
#peer=`grep peer $peerfile | cut -f1 -d: | awk '{print $2}'`
#Запоминаем удаленный ip-адрес для скрипта ip-down
#echo $peer > /var/run/$device.peerip
#разрешаем пересылку пакетов из локальной сети в удаленную, через сетевую карту
#ipfwadm -F -i accept -W $localif -S $ipaddr/24 -D $ptpaddr/24
#разрешаем пересылку пакетов из удаленной сети в локальную, через сетевую карту
#ipfwadm -F -i accept -W $localif -S $ptpaddr/24 -D $ipaddr/24
#разрешаем пересылку на интерфейсе staticif от этой системы к удаленной
#myaddr=`echo $me | cut -f1 -d:`
#ipfwadm -F -i accept -W $staticif -S $myaddr -D $peer
#Второе дополнение к системе безопасности - блокируем все запросы к udp-порту
#cipe, кроме идущих от удаленной машины

#необходимо определить udp-порты интерфейса cipe
#получаем наш udp-порт
#if [ "$option" = "" ]; then
#       myport=`echo $me | cut -f2 -d:`
#else
#       myport=$option
#fi
#получаем удаленный udp-порт
#переменная peerfile должна быть задана
#peerport=`grep peer $peerfile | cut -f2 -d:`

#запоминаем удаленный udp-порт cipe для скрипта ip-down
#echo $peerport > /var/run/$device.peerport

#получаем наш ip-адрес
#myaddr=`echo $me | cut -f1 -d:`

#запрещаем все запросы к udp-порту cipe; записываем это в журнал
#ipfwadm -I -i deny -P udp -W $staticif -S 0/0 -D $myaddr $myport $log
#разрешаем все запросы к udp-порту cipe, идущие из интерфейса staticif, от удаленной машины
#ipfwadm -I -i accept -P udp -W $staticif -S $peer $peerport \
#-D $myaddr $myport
exit 0
Ядро 2.1/2.2, ipchains, cipe 1.2.x
#!/bin/bash
# ip-up <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
#3/29/1999
#Это пример скрипта ip-up для новых ядер версий 2.1/2ю2, использующих ipchains,
#настраивающий маршруты и правила firewall для соединения вашей сети класса c
#с удаленной сетью класса c. В этом скрипте задаются три пользовательских потока -
#по одному на каждый интерфейс cipe (разделенные по имени интерфейса).
#После этого, в каждый из трех встроенных потоков, добавляются правила,
#переназначающие эти потоки в пользовательские
#Правила настроены с учетом невозможности нелегального перехвата пакетов,
#а также нелегальной маршрутизации между сетями.  Дополнительные меры безопасности
#приведены в конце скрипта (закомментированы).
#Вопросы и предложения посылайте по адресу acj@home.com.
#Настраиваем некоторые переменные
device=$1               # Интерфейс CIPE
me=$2                   # Наш UDP-адрес
pid=$3                  # ID процесса демона
ipaddr=$4               # IP-адрес нашего CIPE-устройства
ptpaddr=$5              # IP-адрес удаленного CIPE-устройства
option=$6               # аргументы, переданные через опции скрипта

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

#рас(за)-комментируйте следующую строку для включение в системный журнал
#всех попыток неавторизованного доступа. Эта строка должна соответствовать
#строке в скрипте ip-down для правильного отключения правил.
log="-l"
umask 022
# пример записи в журнал
#echo "UP   $*" >> /var/adm/cipe.log

# во многих системах требуются такие pid-файлы
#echo $3 > /var/run/$device.pid

#добавляем маршрут к удаленной сети
network=`expr $ptpaddr : '\([0-9]*\.[0-9]*\.[0-9]*\.\)'`0
route add -net $network netmask 255.255.255.0 dev $device

#Создаем пользовательский поток для входящего по интерфейсу cipe
ipchains -N $device"i"
#удаляем все правила для этого потока (на всякий случай)
ipchains -F $device"i"
#запрещаем все пакеты, входящие с интерфейса cipe из локальной сети для локальной; записываем это в журнал
ipchains -A $device"i" -j DENY -i $device -s $ipaddr/24 -d $ipaddr/24 $log
#разрешаем все пакеты, входящие с интерфейса cipe из локальной сети для удаленной
ipchains -A $device"i" -j ACCEPT -i $device -s $ipaddr/24 -d $ptpaddr/24
#разрешаем все пакеты, входящие с интерфейса cipe из удаленной сети для локальной
ipchains -A $device"i" -j ACCEPT -i $device -s $ptpaddr/24 -d $ipaddr/24
#запрещаем все остальные входящие с интерфейса cipe пакеты
ipchains -A $device"i" -j DENY -s 0/0 -d 0/0 $log
#Создаем пользовательский поток для исходящего из интерфейса cipe
ipchains -N $device"o"
#удаляем все правила для этого потока (на всякий случай)
ipchains -F $device"o"
#запрещаем все пакеты, исходящие с интерфейса cipe из локальной сети для локальной; записываем это в журнал
ipchains -A $device"o" -j DENY -i $device -s $ipaddr/24 -d $ipaddr/24 $log
#разрешаем все пакеты, исходящие с интерфейса cipe из локальной сети для удаленной
ipchains -A $device"o" -j ACCEPT -i $device -s $ipaddr/24 -d $ptpaddr/24
#разрешаем все пакеты, исходящие с интерфейса cipe из удаленной сети для локальной
ipchains -A $device"o" -j ACCEPT -i $device -s $ptpaddr/24 -d $ipaddr/24
#запрещаем все остальные исходящие из интерфейса cipe пакеты
ipchains -A $device"o" -j DENY -s 0/0 -d 0/0 $log

#Правила для проходящего потока firewall для интерфейса cipe
#они настроены так, чтобы машины локальной сети не попадали для удаленной
#под маскарадинг. Так лучше работать с обеими сетями

#Создаем пользовательский поток для проходящего через интерфейс cipe
ipchains -N $device"f"
#удаляем все правила для этого потока (на всякий случай)
ipchains -F $device"f"
#разрешаем все пакеты, проходящие через интерфейс cipe из локальной сети в удаленную
ipchains -A $device"f" -j ACCEPT -i $device -s $ipaddr/24 -d $ptpaddr/24
#разрешаем все пакеты, проходящие через интерфейс cipe из удаленной сети в локальную
ipchains -A $device"f" -j ACCEPT -i $device -s $ptpaddr/24 -d $ipaddr/24
#запрещаем все остальные, проходящие через интерфейс cipe, пакеты; записываем это в журнал
ipchains -A $device"f" -j DENY -s 0/0 -d 0/0 $log

#Для большей уверенности разрешаем ядру переадресацию пакетов
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward

#добавляем в стандартные потоки правила со ссылками на пользовательские потоки
ipchains -I input -i $device -j $device"i"
ipchains -I output -i $device -j $device"o"
ipchains -I forward -i $device -j $device"f"

#Дополнение к системе безопасности - в случае, если стандартное правило для
#проходящего потока установлено в DENY или REJECT.

#определяем интерфейсы машины
#localif="eth0"
#staticif="eth1"                ;для пользователей кабельных модемов
#staticif="ppp0"                ;для пользователей обычных модемов

#По-настоящему грубо определяем удаленный ip-адрес, взяв его из файла options.
#В идеале этот адрес надо передавать скрипту через аргументы
#Надо раскомментировать обе строки
#peerfile=`grep $device /etc/cipe/options.* | cut -f1 -d:`
#peer=`grep peer $peerfile | cut -f1 -d: | awk '{print $2}'`

#Запоминаем удаленный ip-адрес для скрипта ip-down
#echo $peer > /var/run/$device.peerip

#разрешаем пересылку пакетов из локальной сети в удаленную, через сетевую карту
#ipchains -I forward -j ACCEPT -i $localif -s $ipaddr/24 -d $ptpaddr/24
#разрешаем пересылку пакетов из удаленной сети в локальную, через сетевую карту
#ipchains -I forward -j ACCEPT -i $localif -s $ptpaddr/24 -d $ipaddr/24
#разрешаем пересылку на интерфейсе staticif от этой системы к удаленной
#myaddr=`echo $me | cut -f1 -d:`
#ipchains -I forward -j ACCEPT -i $staticif -s $myaddr -d $peer
#Второе дополнение к системе безопасности - блокируем все запросы к udp-порту
#cipe, кроме идущих от удаленной машины

#необходимо определить udp-порты интерфейса cipe
#получаем наш udp-порт
#if [ "$option" = "" ]; then
#       myport=`echo $me | cut -f2 -d:`
#else
#       myport=$option
#fi

#получаем удаленный udp-порт
#переменная peerfile должна быть задана
#peerport=`grep peer $peerfile | cut -f2 -d:`

#запоминаем удаленный udp-порт cipe для скрипта ip-down
#echo $peerport > /var/run/$device.peerport

#получаем наш ip-адрес
#myaddr=`echo $me | cut -f1 -d:`

#запрещаем все запросы к udp-порту cipe; записываем это в журнал
#ipchains -I input -j DENY -p udp -i $staticif -s 0/0 \
#-d $myaddr $myport $log
#разрешаем все запросы к udp-порту cipe, идущие из интерфейса staticif, от удаленной машины
#ipchains -I input -j ACCEPT -p udp -i $staticif -s $peer $peerport \
# -d $myaddr $myport

# Включаем в ядре в качестве дополнительной меры безопасности защиту от "spoofing"-а
#Зачем включать в ядре защиту от "spoofing"-а, если в этом скрипте эта
#защита уже реализована, для каждого интерфейса на уровне firewall?
#Предположим, что я параноик.

if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
echo -n "Включаем защиту от IP-spoofing..."
iface="/proc/sys/net/ipv4/conf/$device/rp_filter"
echo 1 > $iface
echo "done."
else
echo "Невозможно включить в ядре защиту устройства $device от IP-spoofing" \
| mail -s"Предупреждение Системы Безопасности: $device" root
exit 1
fi

exit 0

/etc/cipe/ip-down

Ядро 2.0, ipfwadm, cipe 1.0.x

#!/bin/bash
# ip-down <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
#3/29/1999
#Это пример скрипта ip-down для старых ядер версий 1.x 2.x, использующих ipfwadm,
#удаляющий маршруты и правила firewall, заданные ранее для соединения вашей сети класса c
#с удаленной сетью класса c.
#Вопросы и предложения посылайте по адресу acj@home.com

#Настраиваем некоторые переменные
device=$1               # Интерфейс CIPE
me=$2                   # Наш UDP-адрес
pid=$3                  # ID процесса демона
ipaddr=$4               # IP-адрес нашего CIPE-устройства
ptpaddr=$5              # IP-адрес удаленного CIPE-устройства
option=$6               # аргументы, переданные через опции скрипта

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

#рас(за)-комментируйте следующую строку для включение в системный журнал
#всех попыток неавторизованного доступа. Эта строка должна соответствовать
#строке в скрипте ip-up для правильного отключения правил.
log="-o"
umask 022

# пример записи в журнал
#echo "DOWN   $*" >> /var/adm/cipe.log

# во многих системах требуются такие pid-файлы
#rm -f /var/run/$device.pid

#Правила для входящего потока firewall для интерфейса cipe
#удаляем запрещение всех остальных входящих с интерфейса cipe пакетов
ipfwadm -I -d deny -W $device -S 0/0 -D 0/0 $log
#удаляем разрешение всех пакетов, входящих с интерфейса cipe из удаленной сети для локальной
ipfwadm -I -d accept -W $device -S $ptpaddr/24 -D $ipaddr/24

#удаляем разрешение всех пакетов, входящих с интерфейса cipe из локальной сети для удаленной
ipfwadm -I -d accept -W $device -S $ipaddr/24 -D $ptpaddr/24

#удаляем запрещение всех пакетов, входящих с интерфейса cipe из локальной сети для локальной
ipfwadm -I -d deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
#Правила для исходящего потока firewall для интерфейса cipe
#удаляем запрещение всех остальных, исходящих из интерфейса cipe, пакетов
ipfwadm -O -d deny -W $device -S 0/0 -D 0/0 $log
#удаляем разрешение всех пакетов, исходящих из интерфейса cipe, из удаленной сети для локальной
ipfwadm -O -d accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#удаляем разрешение всех пакетов, исходящих из интерфейса cipe, из локальной сети для удаленной
ipfwadm -O -d accept -W $device -S $ipaddr/24 -D $ptpaddr/24

#удаляем запрещение всех пакетов, исходящих из интерфейса cipe, из локальной сети для локальной
ipfwadm -O -d deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
#Правила для проходящего потока firewall для интерфейса cipe
#удаляем запрещение всех остальных пакетов, проходящих через интерфейс cipe
ipfwadm -F -d deny -W $device -S 0/0 -D 0/0 $log
#удаляем разрешение всех пакетов, проходящих через интерфейс cipe, из удаленной сети для локальной
ipfwadm -F -d accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#удаляем разрешение всех пакетов, проходящих через интерфейс cipe, из локальной сети для удаленной
ipfwadm -F -d accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#Дополнение к системе безопасности - в случае, если стандартное правило для
#проходящего потока установлено в DENY или REJECT.
#define machine interfaces
#localif="eth0"
#staticif="eth1"                ;для пользователей кабельных модемов
#staticif="ppp0"                ;для пользователей обычных модемов
#По-настоящему грубо определяем удаленный ip-адрес, взяв его из файла options.
#В идеале этот адрес надо передавать скрипту через аргументы
#Надо раскомментировать обе строки
#peerfile=`grep $device /etc/cipe/options.* | cut -f1 -d:`
#peer=`grep peer $peerfile | cut -f1 -d: | awk '{print $2}'`

#Запоминаем удаленный ip-адрес для скрипта ip-down (???)
#echo $peer > /var/run/$device.peerip

#удаляем разрешение пересылки пакетов из локальной сети в удаленную, через сетевую карту
#ipfwadm -F -d accept -W $localif -S $ipaddr/24 -D $ptpaddr/24
#удаляем разрешение пересылки пакетов из удаленной сети в локальную, через сетевую карту
#ipfwadm -F -d accept -W $localif -S $ptpaddr/24 -D $ipaddr/24
#удаляем разрешение пересылки пакетов через интерфейс staticif от этой системы к удаленной
#myaddr=`echo $me | cut -f1 -d:`
#ipfwadm -F -d accept -W $staticif -S $myaddr -D $peer
#Второе дополнение к системе безопасности - блокируем все запросы к udp-порту
#cipe, кроме идущих от удаленной машины

#необходимо определить udp-порты интерфейса cipe
#получаем наш udp-порт
#if [ "$option" = "" ]; then
#       myport=`echo $me | cut -f2 -d:`
#else
#       myport=$option
#fi

#получаем удаленный udp-порт
#переменная peerfile должна быть задана
#peerport=`grep peer $peerfile | cut -f2 -d:`
#запоминаем удаленный udp-порт cipe для скрипта ip-down (???)
#echo $peerport > /var/run/$device.peerport
#получаем наш ip-адрес
#myaddr=`echo $me | cut -f1 -d:`
#удаляем запрещение всех запросов к udp-порту cipe
#ipfwadm -I -d deny -P udp -W $staticif -S 0/0 -D $myaddr $myport $log
#удаляем разрешение всех запросов к udp-порту cipe, идущих из интерфейса staticif, от удаленной машины
#ipfwadm -I -d accept -P udp -W $staticif -S $peer $peerport \
#-D $myaddr $myport

exit 0

Ядро 2.1/2.2, ipchains, cipe 1.2.x

#!/bin/sh
# ip-down <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
#3/29/1999
#Это пример скрипта ip-down для новых ядер версий 2.1/2.2, использующих ipchains,
#удаляющий маршруты и правила firewall, заданные ранее для соединения вашей сети класса c
#с удаленной сетью класса c.
#Вопросы и предложения посылайте по адресу acj@home.com.

#Настраиваем некоторые переменные
device=$1               # Интерфейс CIPE
me=$2                   # Наш UDP-адрес
pid=$3                  # ID процесса демона
ipaddr=$4               # IP-адрес нашего CIPE-устройства
ptpaddr=$5              # IP-адрес удаленного CIPE-устройства
option=$6               # аргументы, переданные через опции скрипта
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

#рас(за)-комментируйте следующую строку для включение в системный журнал
#всех попыток неавторизованного доступа. Эта строка должна соответствовать
#строке в скрипте ip-up для правильного отключения правил.
log="-l"

umask 022

# пример записи в журнал
#echo "DOWN $*" >> /var/adm/cipe.log

# во многих системах требуются такие pid-файлы
#rm -f /var/run/$device.pid

#удаляем с главных потоков ссылки на пользовательские
ipchains -D input -i $device -j $device"i"
ipchains -D output -i $device -j $device"o"
ipchains -D forward -i $device -j $device"f"

#Удаляем все правила из пользовательского входящего потока
ipchains -F $device"i"
#Удаляем пользовательский входящий поток
ipchains -X $device"i"

#Удаляем все правила из пользовательского исходящего потока
ipchains -F $device"o"
#Удаляем пользовательский исходящий поток
ipchains -X $device"o"

#Удаляем все правила из пользовательского проходящего потока
ipchains -F $device"f"
#Удаляем пользовательский проходящий поток
ipchains -X $device"f"
#Удаляем дополнительные меры безопасности

#получаем ip-адрес удаленной машины
#peer=`cat /var/run/$device.peerip`

#определяем интерфейсы машины
#localif="eth0"
#staticif="eth1"                ;для пользователей кабельных модемов
#staticif="ppp0"                ;для пользователей обычных модемов

#получаем наш ip-адрес
#myaddr=`echo $me |cut -f1 -d:`

#удаляем разрешение пересылки пакетов из локальной сети в удаленную, через сетевую карту
#ipchains -D forward -j ACCEPT -i $localif -s $ipaddr/24 -d $ptpaddr/24

#удаляем разрешение пересылки пакетов из удаленной сети в локальную, через сетевую карту
#ipchains -D forward -j ACCEPT -i $localif -s $ptpaddr/24 -d $ipaddr/24

#удаляем разрешение пересылки пакетов через интерфейс staticif от этой системы к удаленной
#ipchains -D forward -j ACCEPT -i $staticif -s $myaddr -d $peer

#удаляем файл с запомненным удаленным ip-адресом
#rm /var/run/$device.peerip

#Удаляем дополнительные меры безопасности

#получаем удаленный udp-порт
#peerport=`cat /var/run/$device.peerport`

#получаем наш udp-порт
#if [ "$option" = "" ]; then
#        myport=`echo $me | cut -f2 -d:`
#else
#        myport=$option
#fi

#удаляем запрещение всех запросов к udp-порту cipe
#ipchains -D input -j DENY -p udp -i $staticif -s 0/0 \
#-d $myaddr $myport $log
#удаляем разрешение всех запросов к udp-порту cipe, идущих из интерфейса staticif, от удаленной машины
#ipchains -D input -j ACCEPT -p udp -i $staticif -s $peer $peerport \
#-d $myaddr $myport

#удаляем файл с запомненным удаленным ip-адресом
#rm /var/run/$device.peerport

exit 0

Примеры скриптов настройки маскарадинга

Ядро 2.0, ipfwadm

#!/bin/sh
#04/04/1999
#Пример скрипта rc.firewall для ядер версий 2.0, использующих ipfwadm
#Я не могу полностью поручиться за этот скрипт. Я нашел его
#несколько лет назад и немножко подправил.
#Вопросы и предложения посылайте по адресу acj@home.com.

#Переменные

#локальный ethernet-интерфейс
localip=
localif=eth0

#статический ethernet-интерфейс
staticip=
staticif=eth1

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

#Политика Firewall для входящего потока
#удаляем все правила для входящего потока
/sbin/ipfwadm -I -f

#устанавливаем запрет всех пакетов для входящего потока
/sbin/ipfwadm -I -p deny

#разрешено посылать пакеты, куда угодно, с локального интерфейса с локальных машин
/sbin/ipfwadm -I -a accept -V $localip -S $localip/24 -D 0.0.0.0/0
#запрещаем все пакеты, идущие из статического интерфейса, "от локальных машин" (spoofing)
#записываем это в журнал
/sbin/ipfwadm -I -a deny -V $staticip -S $localip/24 -D 0.0.0.0/0 -o
#разрешаем все пакеты, идущие, откуда угодно, на статический интерфейс
/sbin/ipfwadm -I -a accept -V $staticip -S 0.0.0.0/0 -D $staticip/32
#разрешаем все пакеты, идущие через интерфейс обратной петли
/sbin/ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0
#запрещаем все остальные входящие пакеты - записываем это в журнал
/sbin/ipfwadm -I -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o

#Политика Firewall для исходящего потока

#удаляем все правила для исходящего потока
/sbin/ipfwadm -O -f

#устанавливаем запрет всего для исходящего потока
/sbin/ipfwadm -O -p deny

#разрешены пакеты, откуда угодно, на локальном интерфейса для локальных машин
/sbin/ipfwadm -O -a accept -V $localip -S 0.0.0.0/0 -D $localip/24
#запрещены исходящие через статический интерфейс пакеты для локальной сети (ошибка маршрутизации)
/sbin/ipfwadm -O -a deny -V $staticip -S 0.0.0.0/0 -D $localip/24 -o
#запрещены исходящие через статический интерфейс пакеты из локальной сети (ошибка маскарадинга)
/sbin/ipfwadm -O -a deny -V $staticip -S $localip/24 -D 0.0.0.0/0 -o
#запрещены исходящие через статический интерфейс пакеты для локальной сети (ошибка маскарадинга)
/sbin/ipfwadm -O -a deny -V $staticip -S 0.0.0.0/0 -D $localip/24 -o
#разрешено все остальное от статического интерфейса
/sbin/ipfwadm -O -a accept -V $staticip -S $staticip/32 -D 0.0.0.0/0
#разрешаем все пакеты, идущие через интерфейс обратной петли
/sbin/ipfwadm -O -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0
#все остальное запрещено
/sbin/ipfwadm -O -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o

#Политика Firewall для проходящего потока

#удаляем все правила для проходящего потока
/sbin/ipfwadm -F -f

#устанавливаем запрет всего для проходящего потока
/sbin/ipfwadm -F -p deny

#маскарадинг для всего, идущего из локальной сети через статический интерфейс
/sbin/ipfwadm -F -a masquerade -W $staticif -S $localip/24 -D 0.0.0.0/0
#другая маршрутизация запрещена
/sbin/ipfwadm -F -a deny -S 0.0.0.0/0 -D 0.0.0.0/0

exit 0

Ядро 2.1/2.2, ipchains
#!/bin/sh
#04/04/1999
#Пример скрипта rc.firewall для новых ядер версий 2.1/2.2, использующих ipchains,
#определяющий пользовательские потоки для каждого интерфейса.  Здесь есть также
#правила, защищающие от spoofing-а, которые может быть и не очень нужны -
#подобная защита уже встроена в ядро.
#Вопросы и предложения посылайте по адресу acj@home.com.

#Переменные

#локальный ethernet-интерфейс
localip=
localif=eth0

#статический ethernet-интерфейс
staticip=
staticif=eth1

#интерфейс обратной петли
loopback=lo

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

#Удаляем все правила для входящего, исходящего и проходящего потоков
#По умолчанию отбрасываем все пакеты

#устанавливаем запрет всего для входящего потока
ipchains -P input DENY

#удаляем все правила для входящего потока
ipchains -F input

#устанавливаем запрет всего для исходящего потока
ipchains -P output DENY

#удаляем все правила для исходящего потока
ipchains -F output

#устанавливаем запрет всего для проходящего потока
ipchains -P forward DENY

#удаляем все правила для проходящего потока
ipchains -F forward

#удаляем все правила вообще (в том числе и пользовательские)
#ipchains -F

#удаляем все пользовательские потоки - вам это может понадобиться
#ipchains -X

#Политика Firewall для входящего потока

#создаем пользовательский входящий поток для статического интерфейса
ipchains -N $staticif"-i"

#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $staticif"-i"

#блокируем все входящие SYN-пакеты на всех портах на статическом интерфейсе
#это может показаться грубым, но это правильно
#ipchains -A $staticif"-i" -j DENY -p tcp -y -i $staticif -s 0/0 \
#-d $staticip : -l

#запрещаем все пакеты, идущие из статического интерфейса, "от локальных машин" (spoofing)
#записываем это в журнал
ipchains -A $staticif"-i" -j DENY -i $staticif -s $localip/16 -d 0/0 -l

#разрешаем все пакеты, идущие, откуда угодно, на статический интерфейс
ipchains -A $staticif"-i" -j ACCEPT -i $staticif -s 0/0 -d $staticip/32

#запрещаем все остальные входящие пакеты - записываем это в журнал
ipchains -A $staticif"-i" -j DENY -s 0/0 -d 0/0 -l

#создаем пользовательский входящий поток для интерфейса локальной сети
ipchains -N $localif"-i"

#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $localif"-i"

#разрешено посылать пакеты, куда угодно, с локального интерфейса с локальных машин
ipchains -A $localif"-i" -j ACCEPT -i $localif -s $localip/24 -d 0/0

#запрещаем все остальные входящие пакеты - записываем это в журнал
ipchains -A $localif"-i" -j DENY -s 0/0 -d 0/0 -l

#создаем пользовательский входящий поток для интерфейса обратной петли
ipchains -N $loopback"-i"

#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $loopback"-i"

#разрешено все, идущее на интерфейс обратной петли
ipchains -A $loopback"-i" -j ACCEPT -i $loopback -s 0/0 -d 0/0

#запрещаем все остальные входящие пакеты - записываем это в журнал
ipchains -A $loopback"-i" -j DENY -s 0/0 -d 0/0 -l 

#Политика Firewall для проходящего потока

#создаем пользовательский проходящий поток для статического интерфейса
ipchains -N $staticif"-f"

#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $staticif"-f"

#маскарадинг для всего, что идет из локальной сети, куда угодно
ipchains -A $staticif"-f" -j MASQ -i $staticif -s $localip/24 -d 0/0

#запрещаем все остальные проходящие пакеты - записываем это в журнал
ipchains -A $staticif"-f" -j DENY -s 0/0 -d 0/0 -l 

#создаем пользовательский проходящий поток для интерфейса локальной сети
ipchains -N $localif"-f"

#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $localif"-f"

#запрещаем все остальные проходящие пакеты - записываем это в журнал
ipchains -A $localif"-f" -j DENY -s 0/0 -d 0/0 -l

#создаем пользовательский проходящий поток для интерфейса обратной петли
ipchains -N $loopback"-f"

#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $loopback"-f"

#запрещаем все остальные проходящие пакеты - записываем это в журнал
ipchains -A $loopback"-f" -j DENY -s 0/0 -d 0/0 -l

#Политика Firewall для исходящего потока

#создаем пользовательский исходящий поток для статического интерфейса
ipchains -N $staticif"-o"

#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $staticif"-o"

#запрещены исходящие через статический интерфейс пакеты для локальной сети (ошибка маршрутизации)
ipchains -A $staticif"-o" -j DENY -i $staticif -s 0/0 -d $localip/24 -l

#запрещены исходящие через статический интерфейс пакеты из локальной сети (ошибка маскарадинга)
ipchains -A $staticif"-o" -j DENY -i $staticif -s $localip/24 -d 0/0 -l

#разрешено все остальное от статического интерфейса
ipchains -A $staticif"-o" -j ACCEPT -i $staticif -s $staticip/32 -d 0/0

#запрещаем все остальные исходящие пакеты - записываем это в журнал
ipchains -A $staticif"-o" -j DENY -s 0/0 -d 0/0 -l

#создаем пользовательский исходящий поток для интерфейса локальной сети
ipchains -N $localif"-o"

#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $localif"-o"

#разрешены пакеты, откуда угодно, на локальном интерфейса для локальных машин
ipchains -A $localif"-o" -j ACCEPT -i $localif -s 0/0 -d $localip/24

#запрещаем все остальные исходящие пакеты - записываем это в журнал
ipchains -A $localif"-o" -j DENY -s 0/0 -d 0/0 -l

#создаем пользовательский исходящий поток для интерфейса обратной петли
ipchains -N $loopback"-o"

#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $loopback"-o"

#разрешено все, идущее из интерфейса обратной петли
ipchains -A $loopback"-o" -j ACCEPT -i $loopback -s 0/0 -d 0/0

#запрещаем все остальные исходящие пакеты - записываем это в журнал
ipchains -A $loopback"-o" -j DENY -s 0/0 -d 0/0 -l

#Для большей уверенности разрешаем ядру переадресацию пакетов

/bin/echo 1 > /proc/sys/net/ipv4/ip_forward

#добавляем в стандартные потоки правила со ссылками на пользовательские потоки

#входящий поток на интерфейсе локальной сети
ipchains -A input -i $localif -j $localif"-i"

#входящий поток на статическом интерфейсе
ipchains -A input -i $staticif -j $staticif"-i"

#входящий поток на интерфейсе обратной петли
ipchains -A input -i $loopback -j $loopback"-i"

#исходящий поток на интерфейсе локальной сети
ipchains -A output -i $localif -j $localif"-o"

#исходящий поток на статическом интерфейсе
ipchains -A output -i $staticif -j $staticif"-o"

#исходящий поток на интерфейсе обратной петли
ipchains -A output -i $loopback -j $loopback"-o"

#проходящий поток на интерфейсе локальной сети
ipchains -A forward -i $localif -j $localif"-f"

#проходящий поток на статическом интерфейсе
ipchains -A forward -i $staticif -j $staticif"-f"

#проходящий поток на интерфейсе обратной петли
ipchains -A forward -i $loopback -j $loopback"-f"

#Проверка Сверх-Параноика --- несмотря на отказ всем пакетам по умолчанию,
#блокируем все пакеты на всех интерфейсах

#запрещаем все остальные входящие пакеты - записываем это в журнал
ipchains -A input -j DENY -s 0/0 -d 0/0 -l

#запрещаем все остальные исходящие пакеты - записываем это в журнал
ipchains -A output -j DENY -s 0/0 -d 0/0 -l

#запрещаем все остальные проходящие пакеты - записываем это в журнал
ipchains -A forward -j DENY -s 0/0 -d 0/0 -l

exit 0

Собираем все вместе

Ниже приведен пример скрипта rc.local, запускающего все остальное при загрузке системы. Он включает в ядре защиту от spoofing-а, задает правила маскарадинга на firewall, и включает интерфейс(ы) cipe.

#!/bin/bash
#4/4/99
#Пример скрипта rc.local
#Вопросы и предложения посылайте по адресу acj@home.com.

echo

#Включаем в ядре защиту от spoofing-а

#Это справедливо только для ядер версий 2.1/2.2

#if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
#   echo -n "Включаем защиту от IP-spoofing..."
#   for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
#       echo 1 > $f
#   done
#   echo "done."
#else
#   echo ВНИМАНИЕ! НЕ УДАЛОСЬ ВКЛЮЧИТЬ ЗАЩИТУ ОТ SPOOFING-а.
#   echo "Клавиши CONTROL-D прервут работу этой оболочки, и процесс загрузки системы продолжится."
#   echo
#   # Запускаем однопользовательскую оболочку на консоли
#   /sbin/sulogin $CONSOLE
#fi

echo

#Настраиваем firewall
if [ -x /etc/rc.d/rc.firewall ]; then
echo Настройка правил фильтрования пакетов firewall.
echo
. /etc/rc.d/rc.firewall
fi

#Включение интерфейса(ов) cipe
if [ -x /etc/rc.d/rc.cipe ]; then
echo Запуск интерфейсов VPN.
. /etc/rc.d/rc.cipe
fi

exit 0

Соединяемся с СЕТЬЮ (WAN)

К этому моменту ваш интерфейс cipe должен работать. Попробуйте дать команду ping, указав ей адрес машины в другой сети. Если это не удалось, то проверьте на firewall-машине следующее:

Включена ли переадресация пакетов в ядре?

Выдает ли команда ifconfig примерно следующее:

cipcb0  Link encap:IPIP Tunnel  HWaddr  
inet addr:192.168.1.1  P-t-P:192.168.2.1  Mask:255.255.255.255
UP POINTOPOINT NOTRAILERS RUNNING NOARP  MTU:1442  Metric:1
RX packets:28163 errors:6 dropped:0 overruns:0 frame:6
TX packets:29325 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100

Есть ли в таблице маршрутизации строка, относящаяся к удаленной cipe-машине:

192.168.2.1    *      255.255.255.255 UH    0             0        0 cipcb0
Есть ли в таблице маршрутизации строка, относящаяся к удаленной cipe-сети:

192.168.2.0    *      255.255.255.0   U     0   0        0  cipcb0
Проверьте журналы - нет ли в них сообщений об ошибках?

Если машины за разными firewall не видят друг друга, то проверьте правильность настройки обоих шлюзов.

После того, как, между машинами в разных подсетях, у вас начнет работать ping, ftp, telnet, и т.п., то следующим вашим шагом будет настройка межсетевой работы SAMBA. Подсказка: вам потребуются lmhosts или wins-сервер, а также "trusted domains" для NT. У меня все работает, но это находится за пределами обсуждения данного документа (как минимум, на текущий момент).

Если вы использовали пример настройки маскарадирующего firewall, то ваши машины должны иметь возможность подключиться к internet. Если нет - проверьте системные журналы. Вы можете также попробовать использовать tcpdump - посмотрите, что происходит с пакетами.