Linux mini-HOWTO

         

Документация


cipe.info: info-файл, входящий в дистрибутив

"HOWTO: Firewall", автор Mark Grennan, markg@netplus.net

"Мини-HOWTO: IP-маскарадинг", автор Ambrose Au, ambrose@writeme.com

"HOWTO: IPChains", автор Paul Russell, Paul.Russell@rustcorp.com.au



Дополнительная информация о скриптах и 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 строку с указанием маршрута на сети друг друга.



/Etc/cipe/ip-down



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

#!/bin/bash # ip-down #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 #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.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




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


Anthony Ciaravalo
acj@home.com
Перевод: Станислав Рогин, ASPLinux

В этом документе дается описание настройки виртуальной частной сети (VPN), с использованием Linux-версии Cipe, работающей с использованием маскарадинга.



Настройка firewall


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



Шлюз


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


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




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



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


Ниже приведен пример скрипта 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 - посмотрите, что происходит с пакетами.



Структура VPN


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



Веб-сайты


Домашняя страница Cipe

Домашняя страница Masq

Домашняя страница Samba

Linux HQ ---хороший сайт с информацией по linux



Adjtimex(8)


Adjtimex(8)

позволяет пользователю изменять в ядре переменные времени, и таким образом изменять скорость хода системных часов (для этого вы должны зайти в систему пользователем "root"). Очень удобно сравнивать системные часы с ЧРВ, используя величину коррекции, указанную в /etc/adjtime. Таким образом, очень легко корректировать системные часы, один раз установив величину коррекции ЧРВ. Найдя верное значение коррекции, вы можете добавить строку в ваш загрузочный скрипт, выставляющую правильные значения переменных ядра во время загрузки системы. Так как adjtimex(8)

предназначен для работы с clock(8)

или hwclock(8), то вам придется немного потрудится для того, чтобы устранить недостаток "каждых 11 минут".

После завершения установки adjtimex(8), вы можете почерпнуть больше информации, набрав команду "man 8 adjtimex" (так же есть инструкция к adjtimex(2), которая, к сожалению, не очень подробна). Можно прочитать файл README, расположенный в /usr/doc/adjtimex-1.3/README (где номер версии, в указанном пути, должен соответствовать версии adjtimex(8)).



Chrony


Xntpd изначально был написан для машин с постоянным соединением с сетевыми радио-часами. Теоретически, она может быть использована машинами, которые соединяются на короткое время, но Richard Curnow не смог заставить программу работать так, как он того хотел, поэтому он написал "chrony" как выход для тех из нас, кто соединяется с сетью при помощи dial-up (для решения этой проблемы существует "моментальное соединение" в ntpd). Текущая версия chrony включает в себя величину коррекции ЧРВ для машин, отключенных от сети на долгое время.

Вы можете получить больше информации, посетив страницу Richard Curnow на http://www.rrbcurnow.freenet.co.uk/chrony/index.html.. Вы можете получить исходные тексты программы не только там, но и на других Linux-сайтах.



CHU и декодер


CHU - это канадская коротковолновая станция около Оттавы. Она очень похожа на WWV в США, но с одним важным отличием: в добавление к обычному объявлению точного времени на английском и французском, она раз в минуту передает сигналы точного времени, используя старые модемные сигналы "Bell 103" (300 бод). Эти сигналы очень хорошо декодируются, и Bill Rossi выдвинул идею, что вам не нужен модем, а только радиоприемник и звуковая карта. Если вам удастся поймать сигнал CHU, то это было бы наиболее дешевым способом использования радио-часов. Частота приема коротковолновых передач может меняться в течении дня, но Bill заявляет, что путем настройки частот дважды в день (утром и вечером) он имеет связь 24 часа в сутки. CHU вещает на частотах 3.33, 7.335 и 14.670 МГц.

Для получения более подробной информации обратитесь к домашней странице Bill Rossi по адресу http://www.rossi.com/chu/. Исходный файл вы можете найти на архивных сайтах Linux. Для получения информации о службе времени на CHU загляните на http://www.nrc.ca/inms/time/ctse.html.

Сайт NTP собирается поставить "декодер" для расшифровки сигналов времени CHU или любого другого коротковолнового канала, используя недорогую микросхему 300-бод на http://www.eecis.udel.edu/ntp/ntp_spool/html/gadget.htm. Там можно найти принципиальную схему двухсторонней платы, которую легко сделать самому (или попросить кого-либо помочь).

Ntpd включает в себя драйвер для приема CHU, который работает и с "декодерами" такого типа , или посылает сигнал на вход микрофона на Sun SPARCstation (или другой машины с "совместимыми аудио-драйверами").



Clock(8) и Hwclock(8)


Все дистрибутивы Linux содержат или старую clock(8), или новую hwclock(8), но не содержат величины коррекции. Так же обычно в них есть программа adjtimex(8), но она может быть включена в CD, как дополнительное приложение (или вы можете ее скачать по сети). Некоторые дистрибутивы включают в себя графическую программу корректировки часов, работающую под X-windows, но все они предназначены для интерактивного использования, и система все равно установит clock(8) или hwclock(8) для их использования при коррекции в процессе загрузки.

Clock(8) требует, чтобы вы вычислили величину коррекции сами, а hwclock(8)

вычисляет ее автоматически (использование другой программы для коррекции часов повлечет за собой несовпадение величин, поэтому предпочтительно использование одной программы, если используется величина коррекции). Если у вас старая система, которая использует clock(8), и вы хотите ее заменить, то найдите hwclock(8) в архиве "util-linux" версии 2.7 или более поздней. Посмотрите инструкцию для получения более подробной информации.

Замечание

Инструкция к hwclock(8) может называться "clock" для обеспечения обратной совместимости, поэтому попробуйте оба имени. Hwclock(8) будет работать с командами для clock(8), но результаты могут различаться, потому что "hwclock -a" - это не совсем то же самое, что и "clock -a", поэтому я рекомендую при установке hwclock заменить все обращения и ссылки к "clock", в вашем загрузочном скрипте, на обращения к hwclock, используя ее команды.

Загрузочные скрипты различаются в разных дистрибутивах, поэтому вам придется поискать то место, где производится коррекция времени. Обычно это производится в /etc/rc.local, /etc/rc.d/rc.sysinit, /etc/rc.d/boot и т.п. Величина коррекции для ЧРВ находится в файле /etc/adjtime.

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

Если ваши ЧРВ ведут себя странно, то, возможно, у вас проблемы с оборудованием. Некоторые чипы ЧРВ содержат литиевую батарейку, которая могла разрядиться, и, поэтому, в некоторых материнских платах есть разъемы для внешнего источника питания (удостоверьтесь в том, что переключатель стоит в правильном положении). Эта же батарея питает CMOS RAM, но часы потребляют больше энергии, и быстрее выходят из строя. Так же странные результаты могут возникнуть из-за проблем с прерываниями.



Содержание


Сигналы GPS включают в себя точное время. В некоторые приемники GPS встроены последовательные порты. Ntpd содержит драйвера для некоторых таких приемников. Системе 1PPS ("One Pulse Per Second", требуется для высокой точности) требуется отдельный интерфейс для подключения к компьютеру.

TAPR (Tuscon Amateur Packet Radio) делает приспособления "TAC-2" ("Totally Accurate Clock") для интерфейсов, которые встраиваются в последовательный порт и работают с любым приемником GPS. Таким образом вы можете получить на выходе 1PPS. Некоторые модели могут быть установлены непосредственно на плату. Для получения более подробной информации загляните на http://www.tapr.org. Цена (на июнь 1999) составляет около $140, не включая стоимость приемника GPS. В комплект поставки не входят какие-либо средства установки оборудования.

"Декодер" CHU (описанный в другой главе) может использоваться как интерфейс к сигналам 1PPS. Эта проблема обсуждается на сайте NTP по адресу http://www.eecis.udel.edu/ntp/ntp_spool/html/pps.htm.



Измерение величины коррекции


Для начала вам надо узнать, который час :-). Мой любимый способ - позвонить на WWV по телефону (303)499-7111 (это дорого). Если у вас есть доступ к серверу точного времени, вы можете воспользоваться программой ntpdate, входящей в приложение xntpd

(поставьте флажок -b для того, чтобы ядро не сверяло системное время с ЧРВ). Иначе используйте "date -s hh:mm:ss" для установки времени вручную, а затем выполните "clock -w" для того, чтобы синхронизировать ЧРВ с системными часами. Вам потребуется знать, когда вы последний раз устанавливали время на часах, поэтому запишите эту информацию туда, где вы ее не потеряете. Если вы используете ntpdate, напишите "date +%s" и запишите число секунд, прошедших с 1 января 1970 года.

Затем зайдите в систему несколько дней спустя и посмотрите на сколько отклонились ваши часы. Если вы устанавливаете часы вручную, я бы посоветовал подождать две недели и высчитать отклонение в сек/день. После нескольких месяцев высчитайте отклонение в долях секунд за день. Если вы используете ntpdate, то вам придется долго ждать. Но позже можно их точно настроить.

Активируйте синхронизацию "clock -a" через некоторые промежутки времени для того, чтобы время на системных часах и ЧРВ не различалось. Эта команда также будет выполнятся каждый раз при запуске системы. Если вы делаете это часто, то этого будет достаточно для синхронности.

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



Низкочастотные сигналы точного времени: DCF77, MSF(Rugby), WWVB


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

http://www.eecis.udel.edu/mills/ntp/index.htm

(в конце страницы). DCF77 в Германии вещает на частоте 77.5 кГц. MSF в Англии (называемая "Rugby") и WWVB в Колорадо вещают на частоте 60 кГц.

Дорогие приемники, встроенные в последовательный порт, получили распространение в Европе. В Ntpd есть драйверы для некоторых MSF-приемников.

В США есть много компаний, которые продают относительно дорогие приемники WWVB со встроенными радио-часами (включая несколько с настенными часами), но меня интересуют только две модели, которые могут быть подключены к компьютеру:

Ultralink Model 320 стоит примерно $120 (на июнь 1999). В нем имеется последовательный интерфейс, и он может управляться кодами ASCII, поэтому его не так сложно запрограммировать. Он потребляет 1mA с последовательного порта. Антенна может находиться на расстоянии до 30 метров от компьютера. Блок содержит свои собственные часы, сохраняющие время, если радиосигнал будет утерян. Выпускается и упрощенная версия за $80. Она предназначена для использования с последовательными микроконтроллерами "BASIC Stamp". Взгляните на http://www.ulio.com/timepr.html.

Arcron Technology продает за $130 настольные часы с дополнительным последовательным портом, вместе с программным обеспечением для Windows. Взгляните на http://www.arctime.com

Уверенность приема WWVB может различаться. Станция обещает увеличить свою мощность в ближайшем будущем. Вы можете ознакомится с этой информацией на сайте NIST http://www.boulder.nist.gov/timefreq/wwvstatus.html.



Основные способы для Linux


В действительности, в Linux имеются две параллельные системы учета времени: одна - это часы с питанием от батарей - "Часы Реального Времени" (так же известные как "ЧРВ", "RTC", "CMOS clock", "аппаратные часы"), которые идут тогда, когда компьютер выключен, но не используются, когда система функционирует. Другая - "системные часы" (иногда называемые "часы ядра" или "программные часы") является программным счетчиком, основанном на системном прерывании. Системные часы не идут, когда система выключена, поэтому они устанавливаются от ЧРВ (или какого-либо другого источника) во время загрузки. Ссылки на часы в документации ntpd относятся к системным часам, а не ЧРВ.

Обе системы будут идти с разной скоростью, отрываться друг от друга и от реального времени. Самый простой способ корректировать их - это измерить величину их отклонения и внести его в программу, контролирующую их. ЧРВ используется только, когда система выключена, они корректируются во время загрузки, при помощи clock(8) или hwclock(8). Системные часы корректируются при помощи ранее заданной величины, которую система учитывает при каждой команде прерывания, пришедшей от часов, используя программу adjtimex(8).

Альтернативой adjtimex(8) может служить chron, которая после запуска clock(8) или hwclock(8)

периодически синхронизирует системное время с (корректированными) ЧРВ. Эта схема работы рекомендуется в документации к clock(8), ее можно использовать, если вы запускаете ее часто и не делаете больших "прыжков" в системных часах, но but adjtimex(8) - это более красивое решение. Некоторые программы могут привести к ошибке, если будет совершен "прыжок" назад.

Следующий шаг - это использование программ типа ntpd, которые регулярно сверяют часы в сети или с радио, и постоянно корректируют системное время. Если у вас есть постоянное подключение к сети во время загрузки, вы можете не использовать ЧРВ, а вместо этого, использовать программу ntpdate (которая входит в состав ntpd) для установки системных часов при помощи часового сервера в Интернете или локальной сети. Но, если у вас иногда не будет сетевого соединения, или вам понадобится точное время во время загрузки до того, как соединение будет активировано, то вам придется использовать ЧРВ.

Но, в этом случае, вам , наверное, хотелось бы синхронизировать ЧРВ с откорректированными системными часами. Но это будет иметь практическое значение, если система выключена лишь несколько минут.

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

Конечно система может перезагрузиться во внештатном режиме, поэтому некоторые ядра синхронизируют ЧРВ с системными часами каждые 11 минут, в случае, если системные часы корректируются другой программой. Погрешность на ЧРВ не будет большой за 11 минут, но если система была отключена на большее время, то возникает проблема - программам, которые корректируют ЧРВ, понадобится узнать точное время последнего выключения системы, а ядро не сохраняет такую информацию.

Некоторые "закоренелые" пользователи Unix могут пожать плечами, если услышат, что Linux установлен на машину, которая не работает круглосуточно, но некоторые из нас работают на двойных платформах или используют Linux на портативных компьютерах, которые выключают после работы. Другие просто не любят оставлять машину включенной на долгое время, если на ней не работают. Таким образом, достоинство проверки "каждые 11 минут" превращается в недостаток.


Это "достоинство/недостаток" ведет себя по-разному в разных версиях ядра (возможно, и в различных версиях xntpd и ntpd), поэтому, если вы используете ntpd

совместно с hwclock, то вам, очевидно, потребуется проверить свою систему для того, чтобы узнать в точности, что происходит. Если у вас нет возможности предотвратить коррекцию ЧРВ ядром, то вам лучше работать с нулевой величиной коррекции.

Исходный текст части ядра, который управляет этим процессом, находится в файле /usr/src/linux-номер_версии/arch/i386/kernel/time.c (где номер_версии - это версия вашего ядра). Если переменная time_status

установлена на TIME_OK , то ядро будет копировать системное время в ЧРВ каждые 11 минут, иначе ядро не корректирует ЧРВ. Эту процедуру можно также выполнить при помощи adjtimex(2) (это делается, например, в ntpd и timed). Обращение к settimeofday(2) установит time_status в TIME_UNSYNC; в результате этого, ядро не будет корректировать ЧРВ. Я не нашел документации по этому вопросу.

Если вам требуется точность в доли секунды, вам потребуется лишь hwclock(8)

и adjtimex(8). В принципе, можно легко установить часы по сети, но я использую старую программу clock(8) и она меня еще ни разу не подводила. С другой стороны, если у вас есть несколько машин в локальной сети, то было бы сподручнее синхронизировать их друг с другом.


Подробная инструкция к clock(8)


Эта глава сделана на основе предыдущей версии мини-HOWTO и предназначена для тех, кто использует clock(8). Все, что вам надо знать, находится в инструкции.

Замечание

Вы должны зайти в систему в качестве пользователя root

для того, чтобы запустить "clock", или другую программу, затрагивающую системное время или ЧРВ.



Зайдите как пользователь root. Наберите



Как установить время
Зайдите как пользователь root. Наберите (303)499-7111 (голос), прослушайте сигналы. Затем напишите:
date -s hh:mm:ss

но не нажимайте Enter, пока не услышите сигнала. (вы можете воспользоваться "ntpdate", вместо "date", и не звонить в этом случае) Эта команда устанавливает системное время. Затем напишите:
clock -w

Эта команда устанавливает ЧРВ по системному времени. Затем наберите:
date +%j

(или "date +%s", если вы используете "ntpdate" вместо "date" ) и запишите число, которое вам понадобится в следующий раз.

Как переустановить время и изменить величину коррекции
Найдите дату, когда вы последний раз устанавливали часы. Зайдите как пользователь root и напишите:
clock -a

Это синхронизирует системное время по ЧРВ. Позвоните по телефону (303)499-7111 (голос), наберите:
date

и нажмите ввод, когда услышите сигнал. Пока вы ждете, запишите точное время. Затем наберите
date hh:mm:00

напишите время на одну минуту вперед и нажмите ввод, когда опять услышите сигнал. Для графы hh
поставьте местное время. Итак, вы установили системное время. Теперь наберите:
clock -w

эта команда поставит правильное время в ЧРВ. Напишите:
date +%j

(или "date +%s" в случае прежде описанном)
Теперь у вас есть все для того, чтобы определить величину коррекции.

Как вычислить величину коррекции
Когда вы запускаете "date", определите, забежали ли ваши часы вперед, или они отстают? Если забежали, то придется вычесть несколько секунд, то есть написать их со знаком минус. Если они отставали, то вам придется добавить секунды, то есть записать их с положительным знаком.
Теперь вычтите одну дату из другой. Если использована команда "date +%j", то числа - это дни в году (1-365, или 1-366 в високосном). Если вы использовали команду "date +%s" , то это число в секундах, и вы должны разделить его на 86400, чтобы получить дни.
Если у вас уже есть величина коррекции в /etc/adjtime, то откорректируйте ее в зависимости от полученного результата. Умножьте старую величину на количество дней и прибавьте новую величину.
Затем разделите количество секунд на дни, и получите новую величину коррекции, которую надо записать вместо старой в /etc/adjtime. Запишите количество дней для следующего раза.
/etc/adjtime выглядит примерно так:
-9.600000 845082716 -0.250655

(заметьте, 9.6 секунд в день это почти 5 минут в месяц!)

Проверка настроек


Проверьте ваши загрузочные файлы на наличие команд типа "clock -a" или "clock -ua". В зависимости от дистрибутива, они могут находиться в /etc/rc.local, или /etc/rc.d/rc.sysinit или где-нибудь рядом.

Если в строке написано "clock -s" или "clock -us", смените "s" на "a", и посмотрите, есть ли у вас файл /etc/adjtime, который содержит строку типа:



The Clock Mini-HOWTO


Ron Bean
rbean@execpc.com


Перевод: Михаил Корепанов, ASPLinux

Установка часов компьютера и поддержка их работы.



WWV и "Most Accurate Clock"


Возможно, вы уже слышали о Heathkit's "Most Accurate Clock", которые получают и расшифровывают сигнал с WWV и имеют дополнительный последовательный порт для подключения к компьютеру. Heathkit давно перестал их продавать, но их еще можно было приобрести до 1995 года. Если желаете окунуться в атмосферу Heathkit, загляните на http://www.heathkit-museum.com. Компания Heathkit до сих пор существует и продает образовательную литературу. Взгляните на http://www.heathkit.com.

По информации Dave Mills, патент Heathkit на "Most Accurate Clock" скоро закончится, и, возможно, кто-то захочет сделать нечто подобное на отдельной микросхеме.

На сайте NTP находится DSP-программа (и файл PDF, ее описывающий) http://www.eecis.udel.edu/mills/resource.htm

, которая расшифровывает сигналы точного времени с WWV, используя коротковолновой радиопередатчик и TAPR/AMSAT DSP-93. Это очень редкий DSP-прибор. Он основан на микросхеме Texas Instruments TMS320C25 DSP. Веб-сайт TAPR находится по адресу http://www.tapr.org

и содержит много информации по системам такого рода.

Ntpd

также и драйвер для кодов точного времени IRIG-B и IRIG-E , использующий /dev/audio на Sun SPARCstation, с пометкой, что эта программа вполне подходит для других систем. WWV использует код IRIG-H.

WWV используется NIST, вебсайт которых находится по адресу http://www.boulder.nist.gov/timefreq/index.html. Этот сайт содержит текст "Special Publication 432", который описывает их службу точного времени, расположенную по адресу http://www.boulder.nist.gov/timefreq/pubs/sp432/sp432.htm. WWV вещает на 2.5, 5, 10, 15, и 20 Mhz.



Xntpd и ntpd: сетевой протокол времени (Network Time Protocol)


Xntpd

(NTPv3) заменено на ntpd (NTPv4); более ранние версии не поддерживаются.

Ntpd

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

расположена по адресу http://www.eecis.udel.edu/~ntp/. Там есть ссылки на все виды интересующего вас программного обеспечения, связанного с точным временем (включая программы для других ОС). ntpd входит в состав некоторых дистрибутивов.

Сравнительно новая особенность ntpd - это "моментальный режим", спроектированный для машин с ограниченным dial-up доступом к сети .

Ntpd включает в себя драйвера к нескольким видом радио-часов. Большинство радио-часов предназначены для коммерческого использования и стоят тысячи долларов, но есть и несколько дешевых видов (о них мы поговорим позже). NIST поддерживает PDF-файл, в котором находится список производителей радио-часов. Он находится по адресу http://www.boulder.nist.gov/timefreq/links.htm

(в самом конце страницы). Так же на сайтах http://www.eecis.udel.edu/ntp/hardware.htm и http://www.eecis.udel.edu/~mills/ntp/refclock.htm

можно найти ссылки на этих производителей. Любой из этих списков может устареть :-). Список драйверов ntpd находится на http://www.eecis.udel.edu/ntp/ntp_spool/html/refclock.htm..

В состав Ntpd входят несколько драйверов некоторых служб точного времени для работы через dial-up. Это все - очень дальние (скорее всего, международные) звонки, поэтому сначала подсчитайте во сколько вам это обойдется :-).



Авторство и сопровождение


Меня зовут Georgatos Photis, я все-еще-может-быть студент факультета Компьютерной Инженерии и Информатики в Университете города Патрас. Обычно я занимаюсь сопровождением греческой документации и страничек, но предложения по улучшению этого HOWTO тоже принимаются.



COFFEE-HOWTO


Georgatos Photis
gef@ceid.upatras.gr


Перевод: Михаил Корепанов, ASPLinux

Один из наиболее надоевших вопросов по программному обеспечению - это может ли та или другая программа приготовить кофе. Итак Linux МОЖЕТ делать кофе. И даже неплохой!



Copyrights


The casual copyright with everything you get with linux... To find it, you'll have to read all of them and count the most common. Otherwise, no, you can't copy it.



Драйвер для устройства


Просто прочтите kernel hacker's guide, напишите драйвер устройства (я думаю, это можно сделать и не в ядре). Откомпилируйте его как модуль, чтобы не нужно было пересобирать все ядро, при обновлении драйвера. Затем напишите:

echo cappuccino >/dev/coffee

И через минуту вы будете наслаждаться чашкой кофе. Установите соответствующие права на файл /dev/coffee - хотите ли вы, чтобы кофе готовил только root или кто-нибудь другой.

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

Пусть это будет вашим домашним заданием.



Напряжение 0-5В, поступающее с компьютера


Простой способ получения напряжения 0-5В с параллельного порта компьютера:



Пояснения


Здесь изложены несколько наших идей:

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

Создайте кластер, состоящий из 8 кофеварок. Это позволит вам иметь кофе даже тогда, когда у вас сломается одна из кофеварок. Ну и, разумеется, это будет хит сезона.

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

В будущем мы планируем внедрить поддержку SNMP.

Последовательное соединение с кофеваркой на 115КБит/сек.



Предыстория


Этот документ изначально был написан на греческом и исходил из споров греческих пользователей Linux, может или не может Linux делать кофе. Заметка была размещена в журнале: http://www.linux.gr/magaz. на греческом языке.



Программное обеспечение


Вы должны написать программу, которая выполняла бы следующие функции:

Получить разрешение на использование адресного пространства Ввода/Вывода, обратившись к ядру командой ioperm, например, ioperm (BASE, range, 1);

Выполнить команду out для установки напряжения 0-5В на параллельном порту: например outb (1, BASE);

Подождать, пока приготовится кофе. Было бы неплохо, если бы это время вводилось в командной строке.

Выключить кофеварку: outb (0, BASE);

По окончании работы на параллельный порт должна быть подана команда: ioperm (BASE, range, 0);

Замените BASE = 0x3bc для /dev/lp0, 0x378 для /dev/lp1, и 0x278 для /dev/lp2, range=8.

Было бы здорово, если эта программа имела setuid, чтобы кофе могли пить все!



Симптомы передозировки


Воодушевление

Повышенная нервозность

Бессонница

Тахикардия или кардиоаритмия

Желудочно-кишечные возмущения

Беспокойство



Соединение с Internet


Если вы написали программу на C (см. выше), вы можете написать простенький CGI-скрипт для включения и выключения кофеварки. Неплохо было бы написать несколько познавательных страничек, объясняющих, как делать кофе и положить их на сервер apache ...



Ссылки


http://daisy.uwaterloo.ca/~alopez-o/caffaq.html

Это Internet Coffee-FAQ

http://lonestar.texas.net/~andrew/f_pc_.htm

Множество схем для ASCII, некоторые из них для параллельных портов.

http://shell.rmi.net/~hisys/parport.html

То, что вы хотели бы знать про параллельные порты, но боялись спросить.

http://sunsite.unc.edu/LDP/HOWTO/mini/IO-Port-Programming

Программирование портов Ввода/Вывода на популярной ОС Linux.

http://www.redhat.com:8080/HyperNews/get/khg.html

Как написать драйвер для своего устройства.

http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html

Страничка Tomi Engdahl. Обязательна для посещения всем, кто любит электронику.

http://www.yahoo.com/Computers_and_Internet/Internet/ Entertainment/Interesting_Devices_Connected_to_the_Net/Coffee_Machines/

Кофеварки on-line. К сожалению не протестированы.

http://www.cs.su.oz.au/~bob/coffee.html

Эта кофеварка предложит вам только cappuccino. Она должна быть доработана!

http://einstein.et.tudelft.nl/~janssen/

Горячий кофе из Голландии.

http://circe.chinalake.navy.mil/cgi-bin/spion/snapit.cgi

http://www.cl.cam.ac.uk/coffee/coffee.html

http://www.menet.umn.edu/coffeecam/



Если вы хотите сделать простую


Если вы хотите сделать простую схему, то можете использовать схему управления Motorola MOC301[012] с симистором SC141D. Преимущество этого метода в том, что не требуется дополнительного источника питания.

Схема для неиндуктивной нагрузки:



+5В | 180 180 2.2k +---/\/\/\----+-----+ +----/\/\/-+--/\/\/\---+-------> 120V | 1| |6 | | фаза | +=====+ | | MT1 | | MC | | +-+ | | 3032| | G | | Симистор | +=====+ | /| | \ 2| |4 | / +-+ 2N3904 |----+ | | | | MT2 / | +--------- | -------+ | V \ | | | | / | \ | | \ 43 .01нф --- 10k / | | / 500V --- \ | | | | / | +------+ | | | ноль | +--------+--+---o o--> 120V / нагрузка >-/\/\--| 2N3904 \ V | --- /// вы должны заменить резисторы соответственно для 220V.



Описание схемы:

MC3032 - это оптрон развязки симистора. Резистор на 180 Ом устанавливает напряжение на управляющем эмиттере оптрона. Если необходим другой ток (например 15мA) - измените сопротивление этого резистора.

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


Чужой опыт


Есть люди, которые пытаются убедить некоторых продавцов программного обеспечения и оборудования перейти на обслуживание пользователей Linux. Norman Jacobowitz, консультант работающий на SSC, Inc., который разрабатывает похожий проект (а может это мой - похожий), говорит о своих усилиях в этой области:

"SSC, Inc, издающее Linux Journal, поддерживает "список желаемых программ" на . Эта страница играет роль независимого консультанта, и эти данные используются менеджерами отдела маркетинга для того, чтобы ISV разрабатывало продукты для Linux. Это наиболее эффективный из действующих проектов поощрения разработки программного обеспечения для Linux; поэтому зайдите на сайт и проголосуйте за те программы, которые вам нужны."

Andrew Mayhew пытался убедить продавцов оборудования в том, что является хорошей идеей создание драйверов для Linux, или хотя бы выпуск подробного описания, по которому можно написать драйвер. Вот несколько его мыслей по этому поводу:

" Я бываю на конференциях. Наиболее часто в Networld-Interop, что в Атланте (ее проводит Atlanta Linux Expo). Там, на Interop, я подходил ко многим продавцам с двумя вопросами. Первое, я находился в качестве представителя ISP-компании, на которую работал, и искал программное обеспечение. Во-вторых, я искал тех, кто действительно поддерживает Linux, а если нет, то почему, и собирается ли компания сделать это или нет. Интересно заметить, что в огромном павильоне Novell было всего-лишь два небольших стенда, относящихся к Linux. В добавление можно сказать, что Cobalt Micro, совместно RedHat и Caldera, представлял там свой "тонкий" сервер."

"Большинство компаний, с которыми я имел дело, являются продавцами оборудования. Они до сих пор не могут получить прибыль от написания драйверов. Для них написание драйверов необходимо для того, чтобы люди могли пользоваться их устройствами. Мой обычный подход к одной из таких компаний - это расспросить о продукте в целом. чтобы они быстро рассказали о его месте на рынке и затем задать вопрос о драйверах. Если я от них слышу только о Windows 95, 98, и NT, я спрашиваю про другие платформы, объясняя, что у меня двойная платформа, и мне понадобится взаимозаменяемость между ними. При постановке вопроса о поддержке других платформ, я спокойно развиваю мысль о Linux, как одной из них. Я обнаружил, что представляя идею о драйвере под Linux, продавцы начинают чувствовать себя неудобно и хотят, как можно быстрее сменить тему разговора. Но если вы пробьете их "оборону", то у вас появится шанс в общих чертах объяснить им, что единственное, что им нужно сделать - это предоставить открытый доступ к спецификациям драйверов и поставить оборудование для разработчиков. Самый "непробиваемый" аргумент - это "мы разработали свои методы решения проблемы X и не хотим, чтобы это стало достоянием общественности". Преодолеть этот барьер можно, объяснив, что написание драйвера не дает каких-либо сведений о том, какие методы использованы при его производстве или проектировании. В заключении этого можно сказать о беспроводных и оптоволоконных сетях."

"Одна небольшая компания по-хозяйски подошла к решению этой проблемы - они нашли себе разработчика и подписали с ним договор NDA по документации на оборудование. По этому договору исходные тексты драйвера не могут быть открытыми до тех пор, пока в них не включена документация компании по оборудованию."

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



Commercial Port Advocacy mini-HOWTO


Doug Loss
dloss@seul.org


Перевод: Михаил Корепанов, ASPLinux

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



Искусство преодоления барьера "холодного приема"


Вы столкнетесь с явлением, которое в фанд-райзинге (fund-raising business) называется "холодный прием". Это означает, что "компания-цель" не будет знать, с кем имеет дело, и не будет готова к принятию вашего предложения. Считается, что если ответил 1% респондентов, то это нормально. Но вы должны сделать больше.

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

Первая вещь, которую вы должны сделать - это определить, с кем в компании вы будете иметь дело. Лучше всего найти какого-нибудь конкретного человека, чем общаться с определенным должностным лицом. В зависимости от размеров компании и ее структуры, вам лучше связаться с лицом, руководящим разработкой программ. Если это невозможно, то свяжитесь с руководством любой технической службы компании. Если и это невозможно, то изучите список работников компании (они обычно у всех есть на сервере в разделе "о компании"), выберите того, кто по вашему мнению может быть заинтересован в Linux и станет в компании развивать эту идею. Если вы не можете прибегнуть ни к одному из этих способов, попробуйте переговорить с шефом компании. В принципе, не повредит, если вы обратитесь не только к одному человеку в компании, а к нескольким, представляющим разные ветви в компании.

Ваш первый контакт должен происходить посредством e-mail. Во-первых, письмо должно быть отправлено лично человеку, а не по адресу компании, потому что оно не будет проходить через всевозможные фильтры и разные отделы. Во-вторых, по почте общение начинается на равных. Непосредственный контакт (первый) и упражнения в красноречии для этого не подходят, а в письме ваша цель будет более ясно изложена.

Цель вашего письма должна быть преуменьшена. Заявления типа "заработайте миллионы. Легко!" будут просто удалены, как ненужный спам. Попробуйте что-то вроде "Перспективный новый рынок для ваших продуктов," или "Незанятый рынок для ваших программ."


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

Это приводит к другому. Если вы все правильно сделали, то вы не последний раз обращаетесь к этой компании и вас запишут как внешнего источника информации по Linux. Если так, то не стоит терять такие контакты. Будьте предельно вежливы, сдержаны, правдивы и всегда готовы помочь, оставайтесь в стороне от внутренней политики компании.

Быть вежливым - означает отвечать на все послания, даже если вы их считаете глупыми. Помните, "мягкий ответ отвращает гнев." К тому же вы можете просто неправильно понять послание. Просьба о разъяснении цели предыдущего послания не повредит в таких случаях.

Быть терпеливым - означает разъяснять все спокойно и точно, а также отвечать столько раз сколько требуется. Ответ по еmail не означает разговора в онлайн, вы можете передохнуть, переформулировать, или просто успокоиться перед ответом на вопрос "Не означает ли переход на работу под Linux то, что мы будем работать задаром?".

Быть правдивым - означает точно отвечать на все вопросы и говорить "Я не знаю", когда это действительно так. Так или иначе, "Я не знаю" это только первая часть ответа, которую можно продолжить, "Но я выясню и свяжусь с вами".

Быть всегда готовым помочь - означает отвечать точно по поставленному вопросу и разъяснять ответ. Например, одна компания спросила меня, как и где они смогут опубликовать результаты своей работы, касающейся проектов под Linux. Я указал стандартные места (comp.os.linux.announce, Linux Weekly News, Freshmeat, Slashdot, Linux Journal). Затем я отослал вопрос в список рассылки seul-dev-apps. И там состоялась дискуссия по этому поводу lu-news system.



Быть в стороне от внутренней политики компании - означает держать дистанцию между вами и компанией. Как бы вы не были дружелюбны в своих посланиях, вы не должны вмешиваться в дела компании и пытаться воздействовать жесткими методами на нее. Вы не должны принуждать компанию к переходу на продукты под Linux. Вам просто нужно убедиться в том, что руководство знает все возможные варианты решения и по возможности помочь им найти верное.

Вы должны быть готовы ответить на вопрос "почему ни одна компания, присутствующая в их сегменте рынка до сих пор не начала выпускать подобные продукты", и какие преимущества дает Linux в таких областях, как мультимедиа. Возможно ли коммерческое применение таких приложений? Будет ли это эффективным вложением? Вы так же должны отметить, что переход на работу с графическими приложениями к Linux будет означать переход на работу с X Window System и значительно меньшую трудоемкость при переходе на Linux, чем на любую другую систему, использующую X, (Solaris, AIX, или HPUX).

Andrew Mayhew высказал мне эту точку зрения, и она не бессмысленна:

"Опираясь на свой опыт, могу сказать, что письмо в компанию может содержать упоминание о том, что я или мой клиент интересуется тем или иным продуктом компании, и это возымеет положительный эффект."


Источники


Здесь находится список похожих документов, которые я просмотрел перед тем, как написать этот. Они не отвечают на основные вопросы, которые подняты здесь, но их полезно прочитать, так как в них описано, как вести себя с компаниями, не имеющими отношения к Linux.

Linux Advocacy Project

Linux Advocacy mini-HOWTO

Why Linux?

Why Linux?

Why use Linux?

Politics

[No Title]

Advocating Linux

Linux FUD Factor

Linux Myth Dispeller

Linuxmanship

Four Phases of Linux Acceptance

To use, or not to use?

Linux Compared to Other OSs



Как выбрать компанию, к которой обратиться


Сначала вам надо определить, в каких областях программного обеспечения Linux наименее представлен. Я бы не стал убеждать руководство компании переделать свой сервер под Linux. Для этого есть множество программ. Я бы предпочел убедить компании перенести под Linux игры и обучающие программы в школах, так как их практически не существует (для образования, насколько я знаю, их вообще нет).

Затем вам нужно выбрать компании, которые представляют наибольший интерес. Я не могу это аргументировать, но вам лучше направить свои усилия не на грандов рынка, а на второстепенные компании, существующие в сегменте рынка, который вы выбрали. Для этой цели хорошо подойдут компании с устаревшими продуктами или программами, предназначенными для малоизвестных платформ. Они могут находится в стадии поиска нового рынка, так как не могут конкурировать на существующем. Я не уверен, что компании Disney или Davidson and Co. смогут так же быстро перенести на Linux свои продукты типа Soleil Software или Topologika. Если компания занимается продуктами как для Windows, так и для Macintosh, то она может с удовольствием выпустить продукты, поддерживающие другую ОС. Если вы смогли найти только компании, занимающиеся только Windows или только Macintosh, то я бы сначала посетил те, которые занимаются Mac, так как переход под Linux дал бы им возможность в большей степени расширить рынок (в процентном отношении), чем другим компаниям.



Мое стандартное послание в компанию


"Уважаемый Господин или Госпожа:"

"Извините, если я отослал письмо не по тому адресу в вашей организации. Не могли бы вы в этом случае переадресовать его нужному человеку? Не могли бы вы мне также сообщить, к кому обратиться с нижеследующей просьбой, и дать мне его или ее адрес для того, чтобы в дальнейшем я напрямую общался с этим человеком. Заранее благодарю вас."

" Я знаю, что у [вставьте название компании] имеется хороший набор обучающих программ как для Macintosh, так и для Windows. Но все же я бы хотел поговорить о незаслуженно забытой группе пользователей Linux. Также я хотел бы привлечь ваше внимание к простым средствам переноса программ с Windows и, в особенности, с Macintosh на Linux."

"Linux является наиболее прогрессивно развивающейся системой в мире. Просто невозможно проследить темпы ее роста, потому что она может быть бесплатно получена через сеть. Последняя попытка подсчитать количество пользователей производилась в начале 1998 года и была незакончена, когда цифра перевалила за 7 миллионов пользователей по всему миру. Она показала, что количество за год выросло почти на 100% . Взрыв распространения Linux возник, благодаря публикациям о нем и его общедоступности, и покрыл рынок объемом около 20 миллионов человек, который постоянно растет. Это больше. чем пользователей OS/2 по всему миру, и чуть больше, чем количество пользователей Macintosh. Причем эти пользователи могут быть вычтены из списка пользователей Windows и Macintosh, так как на большинстве компьютеров до установки Linux стояли Windows или MacOS."

"Если говорить о пользователях Linux, как о классе, то это в основном мужчины с техническим образованием после 20-ти лет. Первые два утверждения являются, как правило, верными, а что касается последнего, то Linux пользуются и тинэйджеры, и те, кому за 40 (мне, например, 46). Это является основным демографическим фактором потребителей на рынке образовательных программ. Обычно, эти люди имеют или скоро будут иметь высокооплачиваемую работу в технических областях, и только что обзавелись семьей. Как правило, пользователи Linux не особенно терпимы к ОС типа MacOS или Windows, и им не нравятся предложения о приобретении программ, предназначенных для этих ОС."

"По моим сведениям, обучающих программ для Linux просто не существует. Многие пользователи Linux вынуждены писать свои собственные программы, если они не могут найти на рынке аналогов, удовлетворяющих их потребности, и это, как вы понимаете, не обучающие программы. Это, возможно, происходит потому, что Linux впервые появился в 1991 году, и получил широкое распространение за последние 2-3 года. То есть, рынок полностью еще не заполнен."

"Это все больше становится заметным в нашем сообществе. У многих из нас подрастают дети, и появление обучающих программ стало насущной проблемой. Я надеюсь, что это только вопрос времени, и кто-то восполнит этот пробел."


" Какой путь на этот рынок является наиболее простым и выгодным? Разумеется, невозможно начать с того, чтобы взять исходные тексты и просто переписать процедуры ОС для работы под Linux. Это то, что сделали многие Macintosh ISV, когда захотели попасть на рынок Windows. Так или иначе, есть пути проще."

"Существуют программы-оболочки, как для программ Windows, так и для Macintosh, которые не позволяют их запускать под Linux без предварительного кардинального изменения. Для Windows существует библиотека TWIN, разработанная Willows Software . У меня нет опыта использования TWIN, но сайт Willows содержит информацию, в которой указано, какие процедуры Windows могут спокойно работать под Linux, а какие имеют серьезные отличия, и их надо переделывать. WINE Project () так же имеет Winelib - это похожий набор библиотек, которые Corel собирается использовать при переносе своих офисных приложений на Linux."

"Если вопрос касается программ для Macintosh, то Abacus Research & Development, Inc. (ARDI ) переписали солидную долю ОС Macintosh и набор процедур, и предоставляют эти средства двумя путями. Executor можно использовать, как эмулятор Macintosh, для конечных пользователей, а также, как средство переноса для Mac ISV. Executor подходит к Linux, DOS и Windows. Демо-версия Executor для Linux включена в наиболее популярный коммерческий дистрибутив Red Hat 5.1 Linux. Инженеры из компании ARDI хорошо разбираются как в Macintosh, так и в Linux, и могут определить, насколько трудоемким окажется процесс переноса на Linux вашего программного обеспечения для Macintosh. Во многих случаях это можно сделать, не изменяя ни единой строчки кода. Linux-версия программы, созданная таким способом, может размещаться на том же CD-ROM, что и ваши программы для Mac и Windows, это обеспечивает вам поддержку трех ОС на одном диске. Расходы на проникновение на этот огромный рынок невелики и гораздо ниже, чем затраты, которые несут некоторые компании при переходе с рынка Mac на рынок Windows и Mac."

"И в заключении, хотелось бы объяснить, что заставило меня написать это письмо. Причина - это мой подрастающий 6-тилетний сын. Я использую Linux, потому что выбрал наиболее доступную и отвечающую моим запросам систему. Если бы существовала хорошая обучающая программа для Linux, я бы с удовольствием ее приобрел. Я знаю, что я не одинок - я слышал в конференциях такую же озабоченность со стороны других родителей. Это тот рынок, который может купить ваш продукт. Пожалуйста, не подведите нас."


Напутствие


Если вы решили этим заняться, помните что вы действуете не в одиночестве и не по собственному почину, а как представитель всего сообщества. Я уверен, мы честнее Microsoft; Мне нравится думать о том, что мы менее самодовольны, чем Apple; я надеюсь, что мы более щедры на помощь другим пользователям, чем все остальные сообщества. Покажите эти качества компаниям, с которыми будете общаться и у вас появится хороший шанс достигнуть успеха.



О чем с ними разговаривать


Теперь хватит о том, каким способом вам разговаривать. Теперь о том, ЧТО говорить для того, чтобы убедить их перейти на работу с Linux? Здесь описано, что я делал.

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

Затем я объяснил, что даст компании присутствие на рынке программ для Linux.

Затем я выяснил, как существующую линию программ можно перевести под Linux. Надо сказать, что я при этом воспользовался технологией Abacus Research & Development Inc. (ARDI), называемой Executor, как оболочкой к программам для Macintosh потому, что это было самым простым выходом, а WINE

и TWIN library

library (как я понимаю, они сейчас могут работать вместе) являются средствами перевода программ под Linux, если не считать возможность простого перекомпилирования. К сожалению, я затер мое письмо в ARDI до того, как осознал, что их инженеры могли бы помочь этой компании. Вы потеряете доверие, если компания по вашему совету обратится к кому-нибудь вроде ARDI, а они ответят "мы не знаем, о чем вы говорите."

Так же существует Loki Software, которая переделывает коммерческие программы для использования под Linux. До сих пор они выпускали только игры, но, когда я поговорил с президентом Loki, он пришел к выводу, что они могут заняться и другими видами программ.

Далее следует стандартная копия моего письма, не копируйте его слово в слово; подкорректируйте его, в зависимости от обстоятельств, или напишите новое:



Почему я это написал?


Я прочел столько howto по популяризации Linux, сколько смог найти (я нашел их список в разделе источников в конце). Почти все они были адресованы для убежденных пользователей (корпоративных и персональных) и говорили о том, что Linux может удовлетворить все их ежедневные потребности. Это очень важно, но не было того, что я искал. Только Linux Advocacy Project вплотную подошел к подробному вопросу, но и он полностью не удовлетворил меня. Я хотел найти, то что помогло бы мне убедить фирмы, занимающиеся разработкой программного обеспечения для других платформ, начать разработку программ под Linux. И так как я не нашел ни одного такого howto, решил написать его сам.

В этом howto я расскажу, как найти подход к фирмам, создающим программное обеспечение, и какие аргументы заставят их повернуться в сторону Linux. Я не буду обсуждать случай, когда вы пытаетесь убедить руководство сделать их исходные тексты общедоступными. Хотя это хорошая идея, но, я думаю, что такие вещи делаются постепенно. Отстаивать создание программного обеспечения под другую ОС легче, потому что компанию трудно убедить "выбросить" разработанный продукт или радикально изменить наработанную систему разработки программ.



Исходящая почта (SMTP)


Передача электронной почты через сжатое и шифрованное SSH-соединение обеспечивает:

Уменьшение трафика сети

Безопасность (впрочем, это не имеет смысла, если далее почта идет по незащищенным сетям)

Аутентификация посылающего. Большинство почтовых серверов не принимают почту с других машин, предназначенную для внешней доставки (relay). Если вы посылаете почту через SSH-соединение, почтовый сервер (sendmail или MS-exchange) думает, что она посылается с локальной программы...

Если на почтовом сервере установлен доступ SSH, используйте следующую команду:

ssh -C -l имя почтовый_сервер -L2525:почтовый_сервер:25

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

ssh -C -l имя другой_сервер -L2525:почтовый_сервер:25

После этого вы можете настроить свою почтовую программу (или почтовый сервер: см. "smarthost") так, чтобы она посылала исходящую почту через localhost:2525.



Сжатие HTTP/FTP,...


Мой офис подключен к Интернет через ISDN на скорости 64Кбит, так что максимальная скорость передачи является около 7Кб/сек. Можно повысить скорость соединения, путем сжатия передаваемой информации: теперь, когда я скачиваю файлы, Netscape показывает скорость до 40Кб/сек (файлы журналов сжимаются в 15 раз). SSH - это утилита, предназначенная для обеспечения безопасного соединения через небезопасные сети, при помощи шифрования данных. Но, кроме того, SSH способна сжимать информацию и осуществлять переадресацию портов (аналогично rinetd или redir). Так что она вполне подходит для сжатия простых TCP/IP соединений. "Простых" \- значит, что открывается только одно TCP-соединение. FTP-соединения или соединения между M$-Outlook и MS-Exchange не являются "простыми", т.к. открывается несколько соединений одновременно. SSH использует алгоритм сжатия LempleZiv (LZ77), обеспечивая такую же компрессию, как и в winzip/pkzip. Для того, чтобы сжимать все HTTP-соединения с Интернет, мне необходимо запустить одну команду на своей машине:

ssh -l -C -L8080::80 -f sleep 10000

hostname> = машина моего провайдера, обеспечивающая доступ через SSH.

login ID> = мое имя входа на hostname>

=веб-прокси-сервер моего провайдера

Обозреватель настроен на работу через прокси-сервер localhost:8080. Портативный компьютер настроен на этот же порт моей машины. Соединения сжимаются и переназначаются реальному прокси-серверу сервером SSH. Инфраструктура выглядит примерно так:

64KBit ISDN Мой компьютер--------------------------------Компьютер (Unix/Linux/Win-NT) SSH-клиент сжато моего провайдера порт 8080 SSH-сервер, порт 22 | | | | | | |10МБит Ethernet |100МБит |не сжато |не сжато | | | | Мой второй компьютер WWW-прокси провайдера с Netscape,... порт 80 (портативный)



Сжатие TCP/IP-соединений при помощи ssh


Sebastian Schreiber
Schreib@SySS.de
Перевод: Павел Гашев, ASPLinux




Большинство людей принимают электронную почту с почтового сервера при помощи POP3. POP3 - это протокол со многими недостатками.

POP3 передает пароль, как обычный текст. (Хотя есть различные реализации SSL для POP/IMAP и аутентификация типа запрос/ответ, описанные в RFC-2095/2195).

POP3 - избыточный протокол: сначала клиент запрашивает сообщение, затем сервер посылает его. После этого клиент может дать серверу команды удаления принятых сообщений. Сервер подтверждает удаление. Далее сервер дает понять, что он готов к следующей команде. Таким образом, необходимо 4 команды, чтобы принять каждое письмо.

POP3 передает почту без сжатия, хотя она очень хорошо компрессируется (в 3.5 раза).

Возможно осуществить сжатие POP3, перенаправляя соединения с адреса localhost:110 через сжатое соединение к вашему провайдеру на порт POP3. Для этого необходимо в почтовой программе установить сервер входящей почты в localhost:110. Это безопасное и быстрое соединение, но оно все еще зависит от недостатков протокола POP3.

Имеет смысл заменить POP3 на более эффективный протокол. Идея заключается в том, чтобы перекачивать все содержимое почтового ящика, хранящегося на почтовом сервере, без какого-то ни было почтового протокола. SCP - хорошая утилита для выполнения этого. Вы можете скачать ваш почтовый ящик примерно так:

scp -C -l имя:/var/spool/mail/loginid /tmp/newmail

Но есть проблема: что произойдет, если во время передачи на сервер придет новая почта? Новая почта будет потеряна. Таким образом, лучше всего использовать следующие команды:

ssh -l имя почтовый_сервер -f mv /var/spool/mail/имя /tmp/имя_fetchme

scp -C -l имя:/tmp/my_;new_;mail /tmp/имя_fetchme

mv - это простая операция, мгновенно переносящая файл в другое место, так что у вас не будет проблем, если придет новая почта. Но если каталоги /tmp/ и /var/spool/mail находятся на разных дисках/разделах, у вас все-таки могут возникнуть некоторые трудности. Решение - это создать файл блокировки на сервере перед тем, как перекачивать почту: touch /var/spool/mail/имя.lock. Вы должны убрать его после того, как закончите перекачку. А еще лучше, переименовать почтовый ящик внутри этого же каталога:

ssh -l имя почтовый_сервер -f mv /var/spool/mail/имя /var/spool/mail/имя_fetchme

Затем обработайте полученный почтовый ящик /tmp/newmail, при помощи команд formail и procmail: formail -s procmail < /tmp/newmail