Поиск файла по его временным атрибутам

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

Например

  • Найти все папки измененные с конца обеда вчерашнего дня
$> find . -newerct 'yesterday 14:00' -and -type d -print
  • Найти и удалить все файлы старше двух недель
$> find . -not -newerBt '2 week ago' -and -type f -unlink
  • Нужно найти все файлы, которые были созданы с трех часов ночи позавчерашнего до обеда вчерашнего дня
$> find . -newerBt '2 day ago 03:00' -and -not -newerBt 'yesterday 13:00' -and -type f -print

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

-Bmin n
Истина если разница между временем создания файла и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

-Bnewer file
Смотрите описание -newerBm.

-Btime n[smhdw]
Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем создания файла и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения информации о файле и временем начала поиска составляет n единиц времени. Пожалуйста обратитесь к описанию ключа -atime для получения информации о поддерживаемых единицах времени.

-amin n
Истина если разница между временем последнего доступа к файлу и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

-anewer file
Смотрите описание -neweram.

-atime n[smhdw]
Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем последнего доступа к файлу и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего доступа к файлу и временем начала поиска составляет точно n единиц времени. Возможные единицы времени:

  • s секунда
  • m минута (60 секунд)
  • h час (60 минут)
  • d день (24 часов)
  • w неделя (7 дней)

В аргументе ключа единицы времени можно комбинировать в произвольном порядке. Для примера «-atime -1h30m». Единицы времени используются только совместно с модификаторами «+» или «-».

-cmin n
Истина если разница между временем последнего изменения информации о файле и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

-cnewer file
Смотрите описание -newercm.

-ctime n[smhdw]
Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения информации о файле и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения информации о файле и временем начала поиска составляет n единиц времени. Пожалуйста обратитесь к описанию ключа -atime для получения информации о поддерживаемых единицах времени.

-mmin n
Истина если разница между временем последнего изменения файла и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

-mtime n[smhdw]
Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения файла и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения файла и временем начала поиска составляет n единиц времени. Пожалуйста обратитесь к описанию ключа -atime для получения информации о поддерживаемых единицах времени.

-newer file
-mnewer file

Истина если у текущего файла более позднее время изменения чем у указанного файла.

-newerXY file
Истина если у текущего файла более позднее время доступа (X=a), время создания (X=B) или время изменения (X=m) чем время доступа (Y=a), время создания (Y=B) или время изменения (Y=m) указанного файла (file). В дополнение, если Y=t то file трактуется как время, заданное в одном из описанных в cvs(1) форматов. Отметьте, что -newermm эквивалентен -newer.

Выдержка из man для cvs(1)
Поддерживается множество вариантов форматов для описания даты, в частности ISO и Интернет. В случае, если временная зона в дате не указана явным образом, она трактуется в местной временной зоне. Примеры допустимых форматов:

  • 1 month ago
  • 2 hours ago
  • 400000 seconds ago
  • last year
  • last Monday
  • yesterday
  • a fortnight ago
  • 3/31/92 10:00:07 PST
  • January 23, 1987 10:05pm
  • 22:00 GMT

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

Иногда бывает жизненно необходимо переименовать кучу файлов. Например заменить пробелы в названии файлов и директорий на нижний знак подчеркивания.
Сохраняем приведенный ниже скрипт в файл с именем mass-replace.sh

#!/bin/sh
 
# Определяем глубину вложенности директорий
depth=$((`find "$1" -type d -print | 
      sed -E 's/[^/]+//g' | 
      sort | tail -n 1 | 
      wc -c`+1));
# Макрос, переименовывающий файлы и директории
replacer='new="`dirname "{}"`/`basename "{}" | sed "s/ /_/g"`"; if [ "$new" != "{}" ]; then mv "{}" "$new"; fi;';
# Обходим все уровни вложенности
while [ $depth -ge 0 ];
do
    # Находим и заменяем
    find "$1" -depth $depth -and -name '* *' -print -exec sh -c "$replacer" ;
    # Меняем уровень вложенности
    depth=$(($depth-1));
done;

Сделаем файл исполняемым

$ chmod +x mass-replace.sh

В качестве аргумента скрипту передается путь до обрабатываемой директории

$ ./mass-replace.sh ~/Warez/Music

Восстановление root-пароля в MySQL

Сменить утерянный пароль достаточно просто и требуется проделать следующие шаги:
1. Остановить mysql-сервер

$> /usr/local/etc/rc.d/mysql-server stop

2. Запустить mysqld с опцией —skip-grant-tables

$> mysqld_safe --skip-grant-tables &

3. Соединиться с mysql-сервером

$> mysql -u root

4. Установить пароль root

mysql> USE mysql;
mysql> UPDATE USER SET password=PASSWORD('root_password') WHERE USER='root' AND host='localhost';
mysql> FLUSH privileges;
mysql> quit

5. Остановить сервер

$> killall mysqld_safe

6. Запустить сервер и проверить новый пароль.

Небольшой FAQ по iptables

Разрешаем производить только 4 коннекта к 22 порту в течении 60 секунд:

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP


Как удалить iptables правило по номеру

iptables -L INPUT --line-numbers
iptables -D INPUT номер
iptables -t nat -L POSTROUTING --line-numbers
iptables -t nat -D POSTROUTING номер


Как ограничить пропускную полосу для пакетов помеченных меткой через MARK

Сделать MARK, и загнать все такие трансферы в какой-либо класс шейпера. Т.е. если например помеченные пакеты — все их отнести к классу 1:51 где скорость ограничена от 32К до 64К:

tc filter add dev eth1 parent 1:0 protocol ip prio 100 handle 51 fw classid 1:51
tc class add dev eth1 parent 1:2 classid 1:51 htb rate 32Kbit ceil 64Kbit
tc qdisc add dev eth1 parent 1:51 handle 51 sfq perturb 10


Как запретить пользователям качать большие файлы
— Собираем поддержку connbytes в patch-o-matic.
— Добавляем правило в firewall, например:

iptables -A FORWARD --connbytes 100000 -j REJECT

— теперь все TCP сессии более 100 Кбайт будут «обрезаны», необходимо добавить исключения для протоколов типа ssh, обычные «долгоживущие» чаты и т.п.

Борьба с Kazaa и прочим вредным трафиком путем вырезания пакетов по маске

— собираем поддержку «string» в patch-o-matic.
— смотрим на протокол Kazaa, в заголовках содержится:

HTTP/1.0 503 Service Unavailable.Retry-After: 3..X-Kazaa-Username: BlazeTre

— добавляем в firewall строчку — iptables -A FORWARD -m string —string «X-Kazaa-» -j REJECT

Как в Linux перебросить соединение через NAT во внутреннюю сеть (1)

Первый путь — пробрасывание только порта:

1) iptables -t nat -A PREROUTING -p tcp -d EXT_R_IP --dport 10000 -j DNAT --to-destination LOCAL_IP:80
2) iptables -A FORWARD -i eth0 -d LOCAL_IP -p tcp --dport 22 -j ACCEPT

Второй вариант — выброс всей машины наружу (если есть свободные адреса):

1) ifconfig eth0:0 NEW_IP netmask NETMASK broadcast BROADCAST
2) route add NEW_IP gw GW netmask 0.0.0.0 metric 1 dev eth0:0
3) iptables -t nat -A PREROUTING -p tcp -d NEW_IP -j DNAT --to-destination LOCAL_IP
4) iptables -A FORWARD -i eth0 -d LOCAL_IP -j ACCEPT

Обозначения: EXT_R_IP — внешний IP роутера, LOCAL_IP — внутренний IP машины, которую хочешь выбросить NEW_IP — новый IP на который хочешь посадить машину, которая имеет локальный LOCAL_IP NETMASK, BROADCAST, GW — внешние netmask, broadcast и gateway


Пример настройки NAT с привязкой к IP под Linux

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -o eth0 -j SNAT --to-source 212.23.98.45

или (без привязки к IP)

ipchains -A forward -j MASQ -s 192.168.0.0/16 -d 0.0.0.0/0

или (через iproute2)

ip rule add from 10.0.1.0/24 nat 254.147.38.14

Другой способ трансляции адресов:<

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -j MASQUERADE


Как ограничить через iptables максимальное число одновременных соединений с одного IP.

# Максимум 10 одновременных соединений к 80 порту с одного IP
iptables -A INPUT-p tcp --dport 80 -m iplimit --iplimit-above 10 -j REJECT
# Блокируем на стадии SYN
iptables -I INPUT -p tcp --syn --dport 80 -j DROP -m iplimit --iplimit-above 10
# 20 соединений на сеть класса С
iptables -p tcp --dport 80 -m iplimit --iplimit-above 20 --iplimit-mask 24 -j REJECT


Как посмотреть статистику по PREROUTING цепочкам в iptables.
> Делаю: >

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.22.33:3128 &gt;

По iptables -L ничего не показывается.
Используйте:

iptables -t nat -L


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

iptables -A INPUT -m string --string "secret" -j LOG --log-level info --log-prefix "SECRET"
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --string "virus.exe"
# Block Code Red
iptables -I INPUT -j DROP -p tcp -m string --string "cmd.exe"
# Block Nimda
iptables -I INPUT -j DROP -p tcp -m string --string "root.exe"
iptables -I INPUT -j DROP -p tcp -m string --string "default.ida"


Как настроить NAT (транслятор адресов) для нормальной работы с FTP и ICQ в Linux
iptables:

modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_nat_irc

ipchains:

modprobe ip_masq_ftp
modprobe ip_masq_raudio
modprobe ip_masq_irc
modprobe ip_masq_icq


Можно ли отфильтровывать пакеты (вести лог) в зависимости от UID пользователя ?>
Для FreeBSD:

ipfw add count tcp from any to not 192.168.1.0/24 uid 231

uid user (или gid group) — под правило попадают все TCP или UDP пакеты посланный или принятые пользователем user (группой group).
В Linux в ядрах 2.4.x в iptables можно использовать модуль owner.

Ограничение трафика через iptables (1)

iptables --new-chain car
iptables --insert OUTPUT 1 -p tcp --destination-port 25 -o eth1 --jump car
iptables --append car -m limit --limit 20/sec --jump RETURN
iptables --append car --jump DROP

Источник

VPN на основе FreeBSD и vtun

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

Я буду использовать vtun, написаный Максимом Краснянским на основе пакета VPPP. Вы можете спросить, почему именно vtun. Ведь можно было использовать что-либо вроде PPP поверх SSH, IPSEC или GRE. Возможно, в ближайшее время я напишу о работе с IPSEC или OpenVPN. Главным достоинством vtun является простота в установке и настройке. Он поддерживает разнообразные типы туннелей IP, Ethernet, PPP, SLIP. В качестве туннеля можно использовать даже pipe. Для шифрования используется OpenSSl. Доступны алгоритмы blowfish с ключом в 128 бит или MD5 с ключом той же длины. Компрессия потока производится с помощью библиотек LZO или zlib. Следует отметить, что zlib работает только с tcp туннелями. Поддерживаются следующие операционные системы: Linux, Solaris, FreeBSD, NetBSD, OpenBSD и другие BSD клоны. В принципе, vtun должен работать на любой платформе, для которой есть универсальный драйвер tun/tap. Устройство tun используется для туннелирования IP фреймов, а tap для Ethernet фреймов. С помощью tun/tap пользовательские программы получают возможность самостоятельно обрабатывать IP пакеты. Для некоторых операционных систем необходимо перекомпилировать ядро с поддержкой tun/tap устройств. Vtun работает на основе клиент-серверной модели. Соответственно, для создания туннеля на одном из хостов демон vtun должен быть запущен как сервер, а на другом в роли клиента.

После запуска демон, выполняющий роль сервера, по умолчанию начинает слушать порт 5000. Если между клиентом и сервером находится брандмауэр, необходимо разрешить прохождение пакетов, адресованных на порт 5000. При попытке подсоединиться на этот порт происходит аутентификация клиента на основе пароля, записанного в конфигурационном файле /usr/local/etc/vtund.conf. Затем с помощью функции fork запускается еще один демон vtun, которому передается клиентское соединение. Новый демон будет существовать до тех пор, пока соединение не будет разорвано. В тоже время родительский демон продолжает ждать новых соединений. Это значит, что единственный демон может обслуживать множество одновременных подключений.

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

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

имя машины внутренняя подсеть внутренний интерфейс внешний интерфейс виртуальный интерфейс tun
офис vpn_office 192.168.30.0 192.168.30.251 ed0 80.80.20.2 ed1 192.168.0.2
филиал vpn_filial 192.168.20.0 192.168.20.251 ed0 80.80.20.1 xl0 192.168.0.1
магазин vpn_shop 192.168.40.0 192.168.40.251 wb0 80.80.20.3 fxp0 192.168.0.3

Схема соединения наших сетей выглядит так :

net_schema

А пока берем исходник библиотеки LZO. Если не удалось скачать, то берем дистрибутив здесь. Распаковываем и собираем.

# tar zxvf lzo-1.08.tar.gz
# cd lzo-1.08
# ./configure
# make
# make check
# make test
# make install

Скачиваем vtun. Конфигурируем его c указанием использовать библиотеку lzo.

# tar zxvf vtun-2.5.tar.gz
# cd vtun
# ./configure --with-lzo-headers=/usr/local/include/ --with-lzo-lib=/usr/local/lib

Случается, что команда ./configure завершается с ошибкой. Вероятнее всего это значит, что система не смогла обнаружить библиотеку lzo. Если Вам не удастся самостоятельно избавиться от этой ошибки, выполните команду:

# ./configure --disable-lzo

А затем, как положено, выполняем компиляцию и установку.

# make
# make install

Повторяем эти действия на каждой из трех машин. Если все прошло гладко, значит пришло время заняться конфигурированием каждой машины. В нашем случае машина vpn_office будет выполнять роль сервера, соответственно, vpn_filial и vpn_shop станут клиентами. Конфигурационный файл vtun находится в директории /usr/local/etc/vtund.conf.

Давайте посмотрим, из чего состоит конфигурационный файл хоста vpn_office.

options {
port 5000;                         # номер порта, используемого для соединения с клиентами
ifconfig /sbin/ifconfig;         # путь к программе ifconfig
route /sbin/route;              # путь к программе route
}
 
default {
compress lzo:9;               # если не удалось включить поддержку lzo, то  параметр должен принять значение compress no;
speed 0;                          # ограничения скорости соединения нет
}
 
# настройки, определенные в блоках options и default, относятся ко всем
# остальным блокам
 
filial {{                        # описываем клиента филиал
    pass secret;          # пароль соединения - слово secret
    type tun;               # тип IP туннеля tun
    proto udp;             # используется протокол UDP
    encr yes;              # включить шифрование
    keepalive yes;       # постоянно поддерживать соединение
 
# секция up описывает действия, выполняемые при удачном соединении
# конфигурируем виртуальный интерфейс с адресом 192.168.0.2
# и привязываем его к другому  виртуальному интерфейсу 192.168.0.1
# настраиваем маршрутизацию для сети 192.168.20.0/24 через интерфейс с адресом 192.168.0.1
 
up {
ifconfig "%% 192.168.0.2 192.168.0.1 netmask 255.255.255.255 mtu 1450 up";
route "add -net 192.168.20.0/24 192.168.0.1";
};
 
# секция down описывает действия, выполняемые при разрыве соединения
# удаляем виртуальный интерфейс tun
# разрушаем маршрутизацию для сети 192.168.20.0/24
 
down {
ifconfig "%% down";
route "delete 192.168.20.0";
};
}
 
shop {                      # описываем клиента магазин
    pass secret;         # пароль соединения - слово secret
    type tun;;             # тип IP туннеля
    proto udp;            # используется протокол UDP
    encr yes;             # включить шифрование
    keepalive yes;      # постоянно поддерживать соединение
 
# конфигурируем виртуальный интерфейс с адресом 192.168.0.2
# и привязываем его к другому виртуальному интерфейсу 192.168.0.3
# настраиваем маршрутизацию для сети 192.168.40.0/24 через интерфейс с адресом 192.168.0.3
 
up {
ifconfig "%% 192.168.0.2 192.168.0.3 netmask 255.255.255.255 mtu 1450 up";
route "add -net 192.168.40.0/24 192.168.0.3";
};
 
# описываем действия, выполняемые при разрыве соединения
# удаляем виртуальный интерфейс tun
# разрушаем маршрутизацию для сети 192.168.40.0/24
 
down {
ifconfig "%% down";
route "delete 192.168.40.0";
};
}

А вот это мы запишем в файл конфигурации хоста vpn_shop.

options {
port 5000;
ifconfig /sbin/ifconfig;
route /sbin/route;
}
 
default {
compress lzo:9;
speed 0;
}
 
shop {
    pass secret;
    type tun;
    proto udp;
    encr yes;
    keepalive yes;
 
up {
ifconfig "%% 192.168.0.3 192.168.0.2 netmask 255.255.255.255 mtu 1450 up";
route "add -net 192.168.30.0/24 192.168.0.2";
};
 
down {
ifconfig "%% down";
route "delete 192.168.30.0";
};
}

Ну и наконец, конфигурация хоста vpn_filial.

options {
port 5000;
ifconfig /sbin/ifconfig;
route /sbin/route;
}
 
default {
 
compress lzo:9;
speed 0;
}
 
filial {
    pass secret;
    type tun;
    proto udp;
    encr yes;
    keepalive yes;
 
up {
ifconfig "%% 192.168.0.1 192.168.0.2 netmask 255.255.255.255 mtu 1450 up";
route "add -net 192.168.30.0/24 192.168.0.2";
};
 
down {
ifconfig "%% down";
route "delete 192.168.30.0";
};
}

В связи с тем, что в файлах vtund.conf находится пароль соединения, доступ к ним должен иметь только пользователь root. После всех этих манипуляций можно запускать vtun. На машине vpn_office запускаем демон в режиме сервера.

vpn_office# vtund -s

На другой консоли смотрим на сообщения об ошибках.

vpn_office# tail -f /var/log/messages

Если ошибок не появилось, значит все у нас хорошо. Соответственно, на хостах vpn_shop и vpn_filial запускаем демоны в режиме клиента.

vpn_shop# vtund -p shop 80.80.20.2
vpn_filial# vtund -p filial 80.80.20.2

Снова ждем ошибок. Не дождавшись, смотрим, какие сетевые интерфейсы у нас подняты на каждой из машин. Больше всего нас интересуют интерфейсы vtun0 и vtun1. У Вас должны получиться примерно такие данные.

vpn_office# ifconfig -u
 
ed0: flags=8843 mtu 1500
	inet 192.168.30.251 netmask 0xffffff00 broadcast 192.168.30.255
	inet6 fe80::280:48ff:fedf:66f7%ed0 prefixlen 64 scopeid 0x1
	ether 00:80:48:df:66:f7
ed1: flags=8843 mtu 1500
	inet 80.80.20.2 netmask 0xffffff00 broadcast 80.80.20.255
	inet6 fe80::240:95ff:fe45:9ce2%ed1 prefixlen 64 scopeid 0x2
	ether 00:40:95:45:9c:e2
lo0: flags=8049 mtu 16384
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
	inet 127.0.0.1 netmask 0xff000000
tun0: flags=8051 mtu 1450
	inet6 fe80::280:48ff:fedf:66f7%tun0 prefixlen 64 scopeid 0x8
	inet 192.168.0.2 --> 192.168.0.3 netmask 0xffffffff
	Opened by PID 1143
tun1: flags=8051 mtu 1450
	inet6 fe80::280:48ff:fedf:66f7%tun1 prefixlen 64 scopeid 0x9
	inet 192.168.0.2 --> 192.168.0.1 netmask 0xffffffff
	Opened by PID 1150
 
vpn_shop# ifconfig -u
wb0: flags=8843 mtu 1500
	inet 192.168.40.251 netmask 0xffffff00 broadcast 192.168.40.255
	inet6 fe80::280:48ff:feb6:435f%wb0 prefixlen 64 scopeid 0x1
	ether 00:80:48:b6:43:5f
	media: Ethernet autoselect (100baseTX)
	status: active
fxp0: flags=8843 mtu 1500
	inet 80.80.20.3 netmask 0xffffff00 broadcast 80.80.20.255
	inet6 fe80::202:b3ff:fe65:f47%fxp0 prefixlen 64 scopeid 0x2
	ether 00:02:b3:65:0f:47
	media: Ethernet autoselect (100baseTX)
	status: active
lo0: flags=8049 mtu 16384
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
	inet 127.0.0.1 netmask 0xff000000
tun0: flags=8051 mtu 1450
	inet6 fe80::280:48ff:feb6:435f%tun0 prefixlen 64 scopeid 0x8
	inet 192.168.0.3 --> 192.168.0.2 netmask 0xffffffff
	Opened by PID 1101
 
vpn_filial#  ifconfig -u
ed0: flags=8843 mtu 1500
	inet 192.168.20.251 netmask 0xffffff00 broadcast 192.168.20.255
	inet6 fe80::280:48ff:fec7:c79b%ed0 prefixlen 64 scopeid 0x1
	ether 00:80:48:c7:c7:9b
xl0: flags=8843 mtu 1500
	options=3
	inet 80.80.20.1 netmask 0xffffff00 broadcast 80.80.20.255
	inet6 fe80::202:2eff:fef1:1726%xl0 prefixlen 64 scopeid 0x2
	ether 00:02:2e:f1:17:26
	media: Ethernet autoselect (100baseTX)
	status: active
lo0: flags=8049 mtu 16384
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
	inet 127.0.0.1 netmask 0xff000000
tun0: flags=8051 mtu 1450
	inet6 fe80::280:48ff:fec7:c79b%tun0 prefixlen 64 scopeid 0x8
	inet 192.168.0.1 --> 192.168.0.2 netmask 0xffffffff
	Opened by PID 20966

Теперь можно попробовать, как работает наша VPN. Выполним команду ping на хостах vpn_filial и vpn_shop.

vpn_filial#  ping 192.168.30.251
PING 192.168.30.251 (192.168.30.251): 56 data bytes
64 bytes from 192.168.30.251: icmp_seq=0 ttl=64 time=5.788 ms
64 bytes from 192.168.30.251: icmp_seq=1 ttl=64 time=5.724 ms
64 bytes from 192.168.30.251: icmp_seq=2 ttl=64 time=5.683 ms
64 bytes from 192.168.30.251: icmp_seq=3 ttl=64 time=5.685 ms
 
--- 192.168.30.251 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 5.683/5.720/5.788/0.043 ms 
 
vpn_shop# ping 192.168.30.251
PING 192.168.30.251 (192.168.30.251): 56 data bytes
64 bytes from 192.168.30.251: icmp_seq=0 ttl=64 time=6.092 ms
64 bytes from 192.168.30.251: icmp_seq=1 ttl=64 time=5.785 ms
64 bytes from 192.168.30.251: icmp_seq=2 ttl=64 time=5.851 ms
64 bytes from 192.168.30.251: icmp_seq=3 ttl=64 time=5.826 ms
 
--- 192.168.30.251 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 5.785/5.888/6.092/0.120 ms

Судя по всему, туннель работает как положено. Теперь давайте проверим, как работает шифрование. Нужно проверить, что и в каком виде передается по интерфейсам tun0 — 192.168.0.2 и fxp0 — 80.80.20.3. Давайте начнем прослушивание этих интерфейсов. В тоже время с машины vpn_shop начинаем пинговать интерфейс 192.168.40.251.

vpn_office# tcpdump -i tun0 -lenx
13:33:14.573619 AF 2 84: 192.168.0.2 > 192.168.40.251: icmp: echo request
			 4500 0054 0cc3 0000 4001 c398 c0a8 0002
			 c0a8 28fb 0800 edcc c904 0000 ede7 cc3d
			 9505 0700 0809 0a0b 0c0d 0e0f 1011 1213
			 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223
			 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233
			 3435 3637
13:33:14.573665 AF 2 84: 192.168.40.251 > 192.168.0.2: icmp: echo reply
			 4500 0054 1b3f 0000 4001 b51c c0a8 28fb
			 c0a8 0002 0000 f5cc c904 0000 ede7 cc3d
			 9505 0700 0809 0a0b 0c0d 0e0f 1011 1213
			 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223
			 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233
			 3435 3637
13:33:15.583143 AF 2 84: 192.168.0.2 > 192.168.40.251: icmp: echo request
			 4500 0054 0cc6 0000 4001 c395 c0a8 0002
			 c0a8 28fb 0800 42a6 c904 0100 eee7 cc3d
			 3e2c 0700 0809 0a0b 0c0d 0e0f 1011 1213
			 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223
			 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233
			 3435 3637
13:33:15.583194 AF 2 84: 192.168.40.251 > 192.168.0.2: icmp: echo reply
			 4500 0054 1b43 0000 4001 b518 c0a8 28fb
			 c0a8 0002 0000 4aa6 c904 0100 eee7 cc3d
			 3e2c 0700 0809 0a0b 0c0d 0e0f 1011 1213
			 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223
			 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233
			 3435 3637

На предыдущем листинге явно видно содержимое тестовых icmp пакетов. А теперь посмотрите, в каком виде эти пакеты путешествуют по небезопасной сети 80.80.20.0/24.

vpn_office# tcpdump -i fxp0 -lenx
13:33:14.573441 0:40:95:45:9c:e2 0:2:b3:65:f:47 0800 140: 80.80.20.2.5000 > 80.80.20.3.1035: udp 98
			 4500 007e 0cc4 0000 4011 a506 5050 1402
			 5050 1403 1388 040b 006a f9e2 0060 7db0
			 f6ef dd81 4638 917a 5a80 7f48 87d7 7bc9
			 459f 97f0 b95a 95cf 87b1 29ce b2d7 8f50
			 228e 6b8f eafb 1f5d ae9d 7518 2085 2da9
			 8c85
13:33:14.574798 0:2:b3:65:f:47 0:40:95:45:9c:e2 0800 140: 80.80.20.3.1035 > 80.80.20.2.5000: udp 98
			 4500 007e 1b40 0000 4011 968a 5050 1403
			 5050 1402 040b 1388 006a 998c 0060 7db0
			 f6ef dd81 4638 5390 c84e 886e 466d ffcd
			 df10 9010 5995 fcdd b315 92fb 6a1d 8f50
			 228e 6b8f eafb 1f5d ae9d 7518 2085 2da9
			 8c85
13:33:15.582910 0:40:95:45:9c:e2 0:2:b3:65:f:47 0800 140: 80.80.20.2.5000 > 80.80.20.3.1035: udp 98
			 4500 007e 0cc7 0000 4011 a503 5050 1402
			 5050 1403 1388 040b 006a 28fd 0060 7db0
			 f6ef dd81 4638 3048 4e92 e692 1c3d 5fa3
			 c2a6 bc50 8fa5 79d3 c0c2 6537 c74b 1e84
			 b95e c8f8 6048 3d3c 4f33 32a4 25a2 2da9
			 8c85
13:33:15.584332 0:2:b3:65:f:47 0:40:95:45:9c:e2 0800 140: 80.80.20.3.1035 > 80.80.20.2.5000: udp 98
			 4500 007e 1b44 0000 4011 9686 5050 1403
			 5050 1402 040b 1388 006a cd92 0060 7db0
			 f6ef dd81 4638 f41d cb55 f37d 1229 dbb6
			 14f7 14d1 08e3 a204 5045 74a0 7807 1e84
			 b95e c8f8 6048 3d3c 4f33 32a4 25a2 2da9
			 8c85

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