Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  немного о безопасности
  VPN (PoPToP)
  PortSentry
  sysctl
  vtund
  ipfwcount
  FreeBSD & DSA
  mpd – легко и просто!
  mpd + freeradius + mysql
  Бронированный FreeBSD
  sshit
  DSL-G804V и FreeBSD 6.2
  portaudit
  OpenVPN
  Bluetooth proximity monitor
  ESET NOD32
  GEOM-ELI
  stunnel для pop3,smtp
  NOD32 mirror
  mpd5 + ipfw-nat
  Openvpn 2 офиса
  Hotspot
  OpenVPN+авторизация
  termlog
  mpd5 + сжатие и шифрование
  ipsec_vpnc
  TOR Сервер
  Snort на FreeBSD
  Arpwatch
  Установка и настройка OpenVPN
  NOD32_mirror_v2
  Fail2ban
  IPSec
  Перенос OpenVPN сервера
  Wpa/WPA2-Radius+EAP-TLS/EAP-PEAP
  nod32 mirror script
  MAC + apache
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> Security —> vtund

Шифрованный туннель с помощью vtun

Автор: lissyara.


    Продолжая свои изыскания на тему, организации защищённых туннелей между сетями, нашёл ещё одну интересную программу - vtun. Тоже делает туннели, шифрует с помощью OpenSSL... Короче - годится. Надо сразу заметить, что у меня разные машины - на одной 4.11 FreeBSD x86, а на другой 6.0 AMD64 (что значения не имеет - прекрасно ставиться и работает на обоих).
   Исходные данные:
   111.111.111.111 - сервер (центральный офис) - внешний IP
   222.222.222.222 - филиал (клиент) - внешний IP
   192.168.20.254 - внутренний ип сервера
   192.168.30.254 - внутренний IP клиента (филиала)
Я не использую отдельную сеть внутри туннеля, и так пора переходить на динамическую маршрутизацию - в сети уже чёрт рога сломает, и лишняя сеть мне ни к чему, а использую те же IP что висят на внутренних интерфейсах сетей.
   Ставим:
/usr/ports/>make search name='VTUN'
Port:   bsdbktr_tvtune-0.02
Path:   /usr/ports/multimedia/bsdbktr_tvtune
Info:   A console Brooktree (bktr) TV tuner
Maint:  webmaster@topfx.com
B-deps:
R-deps:
WWW:    http://www.topfx.com

Port:   vtun-2.6_2
Path:   /usr/ports/net/vtun
Info:   Virtual Tunnels over TCP/IP networks with traffic shaping
Maint:  ports@FreeBSD.org
B-deps: autoconf-2.13.000227_5 lzo-1.08_2,1 m4-1.4.4 perl-5.8.8
R-deps: lzo-1.08_2,1
WWW:    http://vtun.sourceforge.net/

/usr/ports/>cd /usr/ports/net/vtun
/usr/ports/net/vtun/>make && make install && make clean

После установки топаем править конфиг:

/usr/ports/net/vtun/>cd /usr/local/etc/
/usr/local/etc/>ls | grep vtu
vtund.conf
vtund.conf.example
/usr/local/etc/>

В итоге, на сервере (в офисе) имеем /usr/local/etc/rc.d/vtund.conf:

# Файл конфигурации vtund - центральный офис


# Общие настройки
options {
  # Порт который слушаем
  port 5000;

  # "Источник" для логов
  syslog        daemon;

  # Пути к программам
  ppp           /usr/sbin/pppd; # pppd
  ifconfig      /sbin/ifconfig; # конфиг интерфейсов
  route         /sbin/route;    # роутинг
  firewall      /sbin/ipfw;     # фаерфолл
#  ip           /sbin/ip;       # а такого во фре не водится
}

# Дефолтовые опции для сессии
default {
  compress no;          # Компрессия (по дефолту - no)
  speed 0;              # скорость (0 - анлим)
}

# туннель к филиалу
ametist {
  passwd        my_password;    # пароль для установки соедиения
  type          tun;            # Тип соединения - туннель
  proto         tcp;            # Используемый протокол (UDP|TCP)
  compress      lzo:9;          # тип компрессии и уровень сжатия.
                                # 9 - максимум. И по ресурсам тоже :)
  encrypt       yes;            # Шифруется, или нет соединение
  keepalive     yes;            # Восстанавливать, или нет
                                # соедиение в случае обрыва

 # телодвижения предпринимаемые в случае удачного соединения
  up {
    # конфигурим интерфейс
    ifconfig "%% 192.168.20.254 192.168.30.254 netmask 255.255.255.0";
    # ставим MTU (можно было одной командой с предыдущей)
    ifconfig "%% mtu 1500";
    # роутинг - добавляем маршрут на удалённую сеть, предварительно
    # удалив его же - ибо были глюки по этому поводу - маршрут уже
    # есть, и новый не добавляется, а старый не пашет
    route "add 192.168.30.0/24 192.168.30.254";
  };

  # телодвижения когда гасим туннель
  down {
    # Гасим интерфейс
    ifconfig "%% down";
    # Грохаем запись в таблице маршрутизации (обычно, фря её сама
    # грохает, но лучше явно указать)
    route "delete 192.168.30.0";
  };
}

После чего добавляем строку в /etc/rc.conf, и запускаем сервер:
/usr/local/etc/rc.d/>ls | grep vtun
vtunclient.sh
vtund.sh
/usr/local/etc/rc.d/>
/usr/local/etc/rc.d/>echo 'vtund_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/>./vtund.sh start
Starting vtund.
/usr/local/etc/rc.d/>
/usr/local/etc/rc.d/>sockstat | grep vtun
root     vtund      86001 3  dgram  -> /var/run/logpriv
root     vtund      86001 4  tcp4   *:5000                *:*
/usr/local/etc/rc.d/>

Запустился. Надо заметить, что несмотря на рекомендованную конфигурацию с udp я поставил tcp - он даже при установке udp слушает tcp порт :) Баг, или мои кривые руки - не знаю. Поставил tcp - всё нормально. Не забываем добавить вверху файрволла примерно такие правила:

ipfw add allow ip from any to any via tun0
ipfw add allow tcp from 111.111.111.111 to 222.222.222.222 5000
ipfw add allow ip from 192.168.30.254 to 192.168.20.254 via ${LanIn}
ipfw add allow ip from 192.168.20.254 to 192.168.30.254 via ${LanIn}

Где ${LanIn} - внутренняя сетевуха.
После чего топаем на машину филиала, там устанавливать. Установка отличий не имеет, главное не забыть обновить порты. Конфиг получился такой /usr/local/etc/rc.d/vtund.conf:

# файл конфигурации vtund - филиал


# Общие настройки
options {
  # Порт который слушаем
  port 5000;

  # "Источник" для логов
  syslog        daemon;

  # Пути к программам
  ppp           /usr/sbin/pppd; # pppd
  ifconfig      /sbin/ifconfig; # конфиг интерфейсов
  route         /sbin/route;    # роутинг
  firewall      /sbin/ipfw;     # фаерфолл
# ip            /sbin/ip;       # а такого во фре не водится
}

# Дефолтовые опции для сессии
default {
  compress no;          # Компрессия (по дефолту - no)
  speed 0;              # скорость (0 - анлим)
}

# туннель к филиалу
ametist {
  passwd        my_password;    # пароль для установки соедиения
  type          tun;            # Тип соединения - туннель
  proto         tcp;            # Используемый протокол (UDP|TCP)
  compress      lzo:9;          # тип компрессии и уровень сжатия.
                                # 9 - максимум. И по ресурсам тоже :)
  encrypt       yes;            # Шифруется, или нет соединение
  keepalive     yes;            # Восстанавливать, или нет
                                # соедиение в случае обрыва

 # телодвижения предпринимаемые в случае удачного соединения
  up {
    # конфигурим интерфейс
    ifconfig "%% 192.168.30.254 192.168.20.254 netmask 255.255.255.0 up";
    # ставим MTU (можно было одной командой с предыдущей)
    ifconfig "%% mtu 1500";
    # роутинг - добавляем маршрут на удалённую сеть, предварительно
    # удалив его же - ибо были глюки по этому поводу - маршрут уже
    # есть, и новый не добавляется, а старый не пашет
    route "add 192.168.20.0/24 192.168.20.254";
  };

  # телодвижения когда гасим туннель
  down {
    # Гасим интерфейс
    ifconfig "%% down";
    # Грохаем запись в таблице маршрутизации (обычно, фря её сама
    # грохает, но лучше явно указать)
    route "delete 192.168.20.0";
  };
}

После рихтовки конфига, добавляем строки (первая про запуск клиента, а вторая представляет собой имя конфигурации и IP-адрес сервера) в /etc/rc.conf, и запускаем это хозяйство:

/usr/local/etc/rc.d/>echo 'vtunclient_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/>echo 'vtunclient_flags="ametist 111.111.111.111"' \
? >> /etc/rc.conf
/usr/local/etc/rc.d/>./vtunclient.sh start
Starting vtunclient.
/usr/local/etc/rc.d/>
/usr/local/etc/rc.d/>sockstat | grep vtun
root     vtund    36404    4 tcp4   222.222.222.222:4314      111.111.111.111:5000
root     vtund    36404    3 dgram  syslogd[117]:3
/usr/local/etc/rc.d/>

Добавляем в фаер правила (тока три, т.к. у меня этот сервер имеет право соединяться с кем угодно по tcp, значит про 5000 порт не надо.)

ipfw add allow ip from any to any via tun0
ipfw add allow ip from 192.168.30.254 to 192.168.20.254 via ${LanIn}
ipfw add allow ip from 192.168.20.254 to 192.168.30.254 via ${LanIn}

Где ${LanIn} - внутренняя сетевуха
После чего смотрим, появился ли интерфейс и пробуем пингануть удалённую сетку:
/usr/local/etc/rc.d/>ifconfig
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 192.168.30.254 --> 192.168.20.254 netmask 0xffffff00
Opened by PID 89903
/usr/local/etc/rc.d/>
/usr/local/etc/rc.d/>ping 192.168.20.1
PING 192.168.20.1 (192.168.20.1): 56 data bytes
64 bytes from 192.168.20.1: icmp_seq=0 ttl=127 time=134.485 ms
64 bytes from 192.168.20.1: icmp_seq=1 ttl=127 time=134.909 ms
64 bytes from 192.168.20.1: icmp_seq=2 ttl=127 time=135.900 ms
64 bytes from 192.168.20.1: icmp_seq=3 ttl=127 time=138.260 ms
64 bytes from 192.168.20.1: icmp_seq=4 ttl=127 time=133.772 ms
^C
--- 192.168.20.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 133.772/135.465/138.260/1.558 ms
/usr/local/etc/rc.d/>

Всё нормально. Бегает. Если интересует шифруется ли - то tcpdump -i _имя_интерфейса_ -lex вам поможет. Вначале на интерфейсе tun0, а потом на внешнем. На tun будет видно, что это icmp (при пингах), а на внешнем это уже будет Unknown :)

P.S. Косяк - если перезапустить сервер (например перезагрузка понадобилась), то клиенты отваливаются навсегда. Пришлось нарисовать такой скрипт на шелле:
#!/bin/sh

# Скрипт перезапуска клиента vtun, на случай падений

# где живут программы - переменные
ps="/bin/ps"
grep="/usr/bin/grep"
wc="/usr/bin/wc"

# если число "нагрепаных" туннелей меньше одного,
# то выполняем условие
if [ `${ps} -ax | ${grep} "vtun" | ${wc} -l` -lt 1 ]
    then
    # запускаем клиента
    /usr/local/etc/rc.d/vtunclient.sh start #> /dev/null 2>&1
    else
    # всё пучком, ничё не делаем
fi

exit

И запихать в планировщик (рутовый). Я поставил раз в минуту. Можно и реже.



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=14110.

размещено: 2006-03-29,
последнее обновление: 2006-03-29,
автор: lissyara

оценить статью:

Владимир?, 2006-04-25 в 15:31:12

А при таком туннеле, машины второго офиса смогут войти в домен первого?

Brunen, 2006-08-27 в 15:10:56

Приветствую, lissyara!

При попытке запустит команду /usr/local/etc/rc.d/vtunclient.sh start, FreeBSD 5.4 выдает
Starting vtunclient.
vtund[583]: syntax error line 5
vtund[583]: No hosts defined

В основном офисе FreeBSD 5.4 при запуске vtund.sh выдает, как и положено, Starting vtund. Демон vtund висит на сервере. В филиале, из-за этой ошибки - нет.

Brunen, 2006-08-27 в 16:40:23

Ошибка была в филиале vtund.conf: неправильно указал серые подсети.
А теперь, после установки соединения, возник такой вопрос: а клиенты(MSWinXPSP2) могут друг друга по пингу видеть?

Guimplen, 2006-12-14 в 18:39:01

НЕ работает скрипт поднятия тунеля после падения.
НЕ зависимо от того работает прога или нет он пишет что все ногмально и тунель стоит.

lissyara, 2006-12-14 в 20:33:41

У меня этот скрипт уже 10 месяцев работает.
Однако, присмотревшись, понял, что если машина шустрая (у меня - нет), он может и не работать. Надо в выборе процессов, до подсчёта, добавить ещё трубу:
| grep -v "grep"
=============
А вообще, собственной башкой думать неплохобы. Помогает в решении простейших проблем.

Константин, 2007-02-17 в 17:01:41

Хорошая статья.
все получилось.
а опыт использования openvpn у вас есть? очень хорошо вы пишите. очень понятно.

Константин, 2007-02-17 в 18:04:15

Вот только что то скрипт не работает у меня. объясните плиз подробней немножко про grep -v "grep". как всетаки написать скрипт.

lissyara, 2007-02-17 в 19:17:35

а думать-то как все не любят...
more tun0.sh
#!/bin/sh
# Скрипт перезапуска клиента vtun, на случай падений
# где живут программы
ps="/bin/ps"
grep="/usr/bin/grep"
wc="/usr/bin/wc"
# если число "нагрепаных" туннелей меньше одного,
# то выполняем условие
if [ `${ps} -ax | ${grep} "vtun" | ${wc} -l | grep -v grep` -lt 1 ]
then
       # запускаем клиента
       /usr/local/etc/rc.d/000.vtunclient.sh start #> /dev/null 2>&1
       # обновляем таблицы маршрутизации
       sleep 15
       /sbin/route delete 192.168.0.0/16 &
       sleep 2
       ping 192.168.8.254 >/dev/null &
       sleep 3
       kill -9 $!
       /sbin/route add 192.168.0.0/16 192.168.8.254
else
       # всё пучком, ничё не делаем
fi
exit;

Это с машины где оно стоит уже больше года...

Константин, 2007-02-17 в 21:30:12

Спасибо большое. Я не волшебник, я только учусь. освою.
еще раз спасибо за помощь.

Константин, 2007-02-19 в 14:57:23

все таки что то не так со скриптом.
запускается через 10 раз. то есть 10-15 раз не поднимит клиента 1 раз поднимет.

Константин, 2007-02-19 в 15:23:11

вообщем решил проблему в моем случаем.
добавил еще grep -v "grep"
строка условия выглядит так
if [ `${ps} -ax | ${grep} "vtun" | grep -v "grep" | ${wc} -l | grep -v "grep"` -lt 1 ]

Айзятуллен Рамиль, 2007-02-20 в 13:32:31

>P.S. Косяк - если перезапустить сервер (например >перезагрузка понадобилась), то клиенты отваливаются >навсегда. Пришлось нарисовать такой скрипт на шелле:
Столкнулся с этой проблемой.Все решается гораздо проще, скриптов писать не надо. Смотрим файл vtund.conf.example на предмет нахождения в нем Persist mode.
Persist mode. Reconnect to the server after connection termination. Used only by client.
На клиентской стороне в vtund.conf допишем
ametist {
persist yes;
...
...

kuzea, 2007-06-09 в 16:42:53

Oceni bolishoe spasibo
rabotaet cerez persist = yes bez scripta

kuzea, 2007-06-09 в 16:43:56

oshibocica v predydushem poste
persist yes;

Amadeus, 2008-09-22 в 12:59:38

Бальшее спасибо за статью, оч помогла

shark, 2009-06-17 в 0:17:48

а не проще было бы добавить в кроне
[code]*/1 * * * * root /usr/local/etc/rc.d/vtunclient.sh start[/code]?
у меня так пашет ... а раньше падения были

shark, 2009-06-17 в 0:21:41

t4# /usr/local/etc/rc.d/vtunclient.sh stop
Stopping vtunclient.
Waiting for PIDS: 2215.
t4# /usr/local/etc/rc.d/vtunclient.sh status
vtunclient is not running.
... где-то через минуту
t4# /usr/local/etc/rc.d/vtunclient.sh status
vtunclient is running as pid 3153.

girffe, 2009-07-23 в 8:02:39

Прописал persist yes; на стороне клиента, не помогло.
Версии клиента и сервера разные, в этом может быть косяк?

giraffe, 2009-07-23 в 9:43:33

Посмотрел example
Разобрался в чем косяк
Директивы
compress                                  
encrypt                  
keepalive  
 
игнорируются на стороне клиента.
Тупо комментируем их и добавляем
persist yes;
И наслаждаемся райской жизнью ))    

wao, 2009-11-04 в 17:46:58

Почему MTU выбран 1500 ?

Alexey, 2010-06-17 в 12:19:37

добавляем в крон
ee /etc/crontab
строчку
*/15    *       *       *       *       root    /bin/ps -ax | /usr/bin/grep -v "grep" | /usr/bin/grep -c "vtun" | /usr/bin/awk '{if ($1=0) print "/usr/local/etc/rc.d/vtunclient start"}' | /bin/sh


Итого раз в 15 минут будет проверятся канал перевожу для тех кто далёк

раз в мин мин | высветить все процессы | убрать из процессов GREP | считаем сколько процессов Vtun | далее (Кол-во строк Vtun =0) то запускаем печатаем /usr/local/etc/rc.d/vtunclient start | Выполнить


После этого канал не падает и скрипта писать не нужно !!!
----
Компьютерная барахолка oldcomp.ru

Егор, 2011-06-16 в 18:58:33

ого, 5 лет статье, а она ешё актуальна.
спасибо за статью, отлично пишите


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)

Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 4 чел.
За последние 30 мин было: 21 человек
За сегодня было
15 показов,
2 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

weeek - планировщик дел онлайн

Время генерации страницы 0.0481 секунд
Из них PHP: 40%; SQL: 60%; Число SQL-запросов: 77 шт.
Исходный размер: 143139; Сжатая: 25823