Настройка DNS-сервера PDNSD

Дата: 26.11.2015Метки: ,

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

С помощью PDNSD мы сможем одновременно отправлять запросы на два различных DNSсервера. Запросы, которые не относятся к внутрисетевым ресурсам будут переадресовываться на Google DNS.

Для локального DNS-сервера, мы будем использовать быстрый и легкий в настройке PDNSD. Кроме простого кэширования, умеет разделять запросы по условию, одновременно отправлять их на несколько DNS-серверов и отдавать клиенту первый вернувшийся ответ.

Установка и настройка PDNSD

Установим PDNSD командой в терминале:

apt-get install pdnsd

В процессе необходимо будет выбрать один из шаблонов настроек, выбираем пункт «Manual».

Открываем файл:

nano /etc/default/pdnsd

Настраиваем параметры запуска PDNSD, для этого нужно изменить значение параметра START_DAEMON как указано в примере ниже:

START_DAEMON=yes

Открываем конфиг PDNSD:

nano /etc/pdnsd.conf

Добавим в него следующие параметры:

global {
        perm_cache=10240;                             // Максимальный размер кэша в килобайтах
        cache_dir="/var/cache/pdnsd";                 // Директория кэша записей DNS                           
        server_ip = 0.0.0.0;                          // Слушать запросы на всех сетевых интерфейсах
        status_ctl = on;                              // Разрешить утилиты pdnsd-ctl для управления кэшем
        min_ttl=15m;                                  // Минимальное время жизни записи в кэше
        max_ttl=1w;                                   // Максимальное время жизни записи в кэше
        timeout=10;                                   // Тайм-аут DNS-запроса
        par_queries=2;                                // Количество одновременно опрашиваемых DNS-серверов
}
// DNS-отвечающий за локальные ресурсы
server {
        label = ".localdomain";                      // Метка секции server
        ip = 10.0.1.2, 10.0.1.3;                     // Адреса локальных DNS
        timeout = 10;                                // Тайм-аут DNS-запроса
        uptest = query;                              // Метод проверки доступности сервера
        interval = 10m;                              // Интервал для теста доступности сервера
        ping_timeout = 300;                          // Тайм-аут для теста ping
}
// Google DNS
server {
        label = "recurse";
        root_server=on;
        randomize_servers = on;
        ip = 8.8.8.8, 8.8.8.4, 77.88.8.8, 77.88.8.1; // Метка секции server
        timeout = 10;                                // Тайм-аут DNS-запроса
        uptest = query;                              // Метод проверки доступности сервера
        interval = 10m;                              // Интервал для теста доступности сервера
        ping_timeout = 300;                          // Тайм-аут для теста ping
        exclude = .localdomain;                      // Исключить запросы по доменному имени
        policy = included;                           // Включающие/исключающие списки для секции server
        preset = off;                                // Состояние удаленного сервера после запуска
}

Чтобы PDNSD слушал запросы на всех интерфейсах, необходимо установить значение параметра server_ip равным 0.0.0.0. Как вариант можно указать имя или ip отдельного интерфейса.

Управление сервером PDNSD

Проверить статус DNS-сервера выполните команду:

pdnsd-ctl status

Чтобы очистить кэш PDNSD:

pdnsd-ctl empty-cache

Открыть доступ к DNS в iptables

Добавьте в iptables правила:

# Открываем DNS для всех пользователей
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT

# Ограничиваем доступ по MAC
iptables -A INPUT -i eth0 -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

Настройка шлюза на Debian

Дата: 24.11.2015Метки:

В данной статье я расскажу о настройке шлюза на Debian для раздачи интернета в небольшой локальной сети. Для получения доступа к интернет, на сервере используется OpenVPN подключение. Затем используя NAT, сервер отдает интернет для других компьютеров в локальной сети.

Настройка сетевого интерфейса

Для начала настроим сетевой интерфейс eth0:

auto eth0
iface eth0 inet static
address 10.0.1.2
netmask 255.255.255.0
post-up route add -net 10.0.2.0 netmask 255.255.255.0 eth0
post-up route add -net 10.0.3.0 netmask 255.255.255.0 eth0

При необходимости прописываем статические маршруты для локальной сети.

В содержимое файла:

# nano resolv.conf

Необходимо добавить адреса DNS-серверов:

nameserver 8.8.8.8
nameserver 8.8.4.4

Настройка подключения OpenVPN

Выполним установку и настройку клиента OpenVPN.

# apt-get install openvpn

Переходим в каталог указанный ниже, копируем в него сертификаты и ключи:

# cd /etc/openvpn

Создаем файл с настройками clent.conf, в моем случае я использовал следующие параметры:

client
dev tun
proto tcp
remote 90.90.90.90 1194
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
auth SHA512
tls-auth ta.key 1
cipher BF-CBC
comp-lzo adaptive
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
mute 20
route 0.0.0.0 0.0.0.0

Несмотря на то, что на сервере прописан параметр:

push "redirect-gateway def1"

После подключения к серверу OpenVPN, никаких изменений в таблице маршрутизации не происходило. Для того чтобы после подключения клиента OpenVPN в Debian изменялся маршрут по умолчанию, необходимо добавит в clent.conf следующий параметр:

route 0.0.0.0 0.0.0.0

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

Настройка NAT

Включаем на сервере поддержку IP forwarding, для этого откройте файл:

# nano /etc/sysctl.conf

И раскомментируйте в нем следующую строку:

#net.ipv4.ip_forward=1

Чтобы изменения вступили в силу, необходимо загрузим переменные ядра:

# sysctl -p

Далее настраиваем NAT в iptables. По очереди в консоли выполните следующие команды:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT                        # Разрешить форвардинг для всей подсети
iptables -A FORWARD -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT # Или ограничить по MAC
iptables -P FORWARD DROP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Сохраняем правила в файл:

# iptables-save > /etc/iptables.conf

Чтобы правила автоматически применялись при загрузке Debian, необходимо их прописать в rc.local:

# nano /etc/rc.local

Добавьте в него команду ниже:

iptables-restore < /etc/iptables.conf

Теперь, если прописать адрес 10.0.1.2 в качестве шлюза, на компьютере должен появится интернет.

Настройка правил iptables

После того как мы настроили все основные параметры, добавим в iptables правила для безопасности сервера:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 6 -j ACCEPT
iptables -I INPUT -m mac --mac-source 3E:D7:88:A6:66:8E -j ACCEPT                   # Открыть все порты
iptables -I INPUT -p tcp --dport 22 -m mac --mac-source 48:5B:39:AE:6D:7D -j ACCEPT # Открыть порт SSH

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Сохраняем правила в файл:

# iptables-save > /etc/iptables.conf

Авторизация прокси по NTLM в Linux

Дата: 23.11.2015Метки:

В корпоративной среде основанной на продуктах Microsoft, достаточно часто можно встретить использование прокси-сервера встроенного в ISA Server/Forefront TMG. Как правило, авторизация пользователей на таком прокси производится c помощью NTLM.

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

Для этого мы будем использовать cntlm — небольшой, быстрый промежуточный HTTP-прокси, который возьмет функцию NTLM аутентификации на себя. Его задача пропускать через себя запросы от программ к прокси-серверу.

Установка cntlm

Чтобы установить cntlm в Debian/Ubuntu выполните следующую команду:

# apt-get install cntlm

Для установки cntlm в CentOS/RHEL необходимо подключить репозиторий Epel. После чего выполнить команду:

# yum -y install cntlm

Настройка cntlm

Откройте конфигурационный файл:

# nano /etc/cntlm.conf

Установите имя пользователя, домен, адрес и порт прокси-сервера, локальный интерфейс и порт на котором cntlm будет принимать входящие соединения:

Username        user
Domain          domain.net
Proxy           192.168.1.1:8080
Listen          127.0.0.1:3128

Запускаем cntlm:

# cntlm -c /etc/cntlm.conf

Выясним какой тип авторизации использует наш прокси-сервер:

# cntlm -c /etc/cntlm.conf -M http://ya.ru
Password:
Config profile  1/4... OK (HTTP code: 200)
----------------------------[ Profile  0 ]------
Auth            NTLMv2
PassNTLMv2      C9ACE7FB80841EB5B94D1C4E10D7DB5B
------------------------------------------------

Теперь когда мы знаем тип используемой аутентификации и хеш нашего пароля. Необходимо добавить в сntlm.conf следующие параметры:

Username        user
Domain          domain.net
Proxy           192.168.1.1:8080
Listen          127.0.0.1:3128
Auth NTLM
PassNTLMv2      C9ACE7FB80841EB5B94D1C4E10D7DB5B

Для использования cntlm в качестве локального прокси в Linux, нужно настроить переменные окружения http_proxy, https_proxy, ftp_proxy:

# export {http,https,ftp}_proxy="http://127.0.0.1:3128/"

Чтобы отключить прокси, выполните команду:

# unset {http,https,ftp}_proxy

Настройка OpenVPN через покси

Достаточно часто приходится работать в условиях ограниченного доступа к сети интернет. Область применения HTTP/HTTPS прокси достаточно узкая и используется в основном для работы браузера и прочих поддерживающих подключение через прокси программ.

Как один из способов получить полноценный доступ к сети, я могу предложить настроить OpenVPN через прокси. Сам по себе сервер OpenVPN прекрасно работает через прокси. Вам потребуется всего лишь на стороне сервера изменить некоторые настройки.

Подробнее о установке и настройке OpenVPN вы можете прочитать в отдельной статье. Отмечу, что для работы клиента через прокси, OpenVPN должен принимать соединения на 80 или 443 порту. А для передачи данных должен использоваться протокол TCP. За данные функции отвечают следующие настройки:

port 443
proto tcp

Аналогичные настройки необходимо произвести на стороне клиента.

Если вы используете клиент OpenVPN в Windows, то его GUI поддерживает настройку соединения через прокси. В случае запуска клиента на Linux или в режиме службы, необходимо прописать адрес прокси и данные для авторизации в конфигурационном файле OpenVPN.

OpenVPN поддерживает соединения через HTTP прокси-сервер, со следующими режимами аутентификации:

  • Без проверки подлинности
  • Обычная проверка подлинности
  • NTLM аутентификация

Предположим, что наш HTTP прокси расположен в локальной сети по адресу 192.168.1.1 и принимает соединения на 8080 порту. В этом случае, необходим добавить в конфигурационный файл клиента OpenVPN следующие настройки:

# Без проверки подлинности
http-proxy 192.168.1.1 8080

# Обычная проверка подлинности
http-proxy 192.168.1.1 8080 stdin basic

# NTLM аутентификация
http-proxy 192.168.1.1 8080 stdin ntlm

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

http-proxy 192.168.1.1 8080 proxy-auth.txt ntlm

Содержимое файла proxy-auth.txt:

username
password

Настройка OpenVPN в Debian

Рассмотрим процесс установки OpenVPN на примере дистрибутива Debian 8.2. Задача состоит том, чтобы использовать сервер на базе OpenVPN в качестве шлюза для выхода в интернет. В результате мы получаем белый ip, можем обойти ограничения провайдера и дополнительно сжать и зашифровать весть трафик, который идет через сервер.

Я выбрал OpenVPN благодаря его надёжности и безопасности. По сравнению с аналогичными туннельными протоколами, OpenVPN абсолютно не прихотлив к способу доступа к сети интернет. При необходимости, клиент OpenVPN можно настроить даже через HTTP прокси-сервер.

Установка сервера OpenVPN

Для работы OpenVPN необходима поддержка TUN/TAP интерфейса на сервере. Как правило, с этим не должно возникнуть проблем при использовании физической машины или виртуализации KVM.

А вот в случае использования OpenVZ, необходимо активировать поддержку TUN/TAP в настройках контейнера. Чтобы проверить, что система поддерживает TUN-интерфейс, необходимо выполнить команду:

# ls -l /dev/net/tun
crw-rw-rw- 1 root root 10, 200 Nov 19 23:02 /dev/net/tun

Установим OpenVPN на сервере:

# apt-get install openvpn

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

# mkdir /etc/openvpn/easy-rsa/

Копируем в нее утилиты и конфиги для работы с ключами:

# cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Переходим в директорию:

# cd /etc/openvpn/easy-rsa/

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

# nano vars

Меняем следующие строки на свои значения:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"

После правки vars необходимо инициировать переменные:

# source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

Очищаем каталог keys/server от старых сертификатов и ключей:

# ./clean-all

Создаем корневой сертификат:

# ./build-ca

В квадратных скобках указаны значения по умолчанию, которые были заданы в файле vars. Если вы хотите оставить значения без изменений, нужно просто нажимать клавишу «Ввод».

Далее генерируем сертификаты сервера и клиента:

# ./build-key-server server
# ./build-key client1
# ./build-key client2

Для каждого клиента нужно сгенерировать отдельные ключи.

Генерируем ключ Диффи — Хеллмана:

# ./build-dh

Cоздаем ключ для tls-аутификации:

# openvpn --genkey --secret keys/ta.key

Все сгенерированные сертификаты и ключи находятся в директории:

/etc/openvpn/easy-rsa/keys/

Копируем сертификаты и ключи сервера в директорию OpenVPN:

# cd keys
# cp server.crt server.key ca.crt dh2048.pem ta.key /etc/openvpn/

Для настройки клиента OpenVPN, необходимо скопировать ключи и сертификаты из списка ниже:

client1.crt
client1.key
ca.crt
ta.key

На этом этапе установка OpenVPN закончена. Теперь выполним настройку сервера OpenVPN.

Настройка сервера OpenVPN

Копируем и распаковываем пример конфигурационного файла в содержимое директории OpenVPN:

# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
# gzip -d /etc/openvpn/server.conf.gz

В зависимости от наших потребностей, изменяем настройки сервера OpenVPN:

nano /etc/openvpn/server.conf

Пример настройки OpenVPN:

local 90.90.90.90                    # Внешний ip сервера, указываем если на машине несколько адресов.
port 1194                            # Порт на котором будет принимать соединения сервер OpenVPN.
proto tcp                            # Для лучшего быстродействия рекомендуется указать udp.
                                     # Если вы используете прокси, необходимо указать tcp.
dev tun                              # Интерфейс туннеля
ca ca.crt                            # Путь к корневому сертификату
cert server.crt                      # Путь к сертификату сервера
key server.key                       # Путь к ключу сервера
dh dh1024.pem                        # Путь к ключу Диффи - Хеллмана
server 10.8.0.0 255.255.255.0        # Пул DHCP виртуальной сети OpenVPN. Работает только с TLS-клиентами в режиме tun.
ifconfig-pool-persist ipp.txt        # Запоминать динамически выданные адреса.
;client-config-dir ccd               # Директория для клиентских конфигов
;push "route 10.0.1.1 255.255.255.0" # Передаем маршрут клиенту (сеть-клиента).
push "redirect-gateway def1"         # Установить шлюзом по умолчанию удаленный сервер.
;push "dhcp-option DNS 8.8.8.8"      # Передаем DNS клиенту.
;client-to-client                    # Если нужно, чтобы клиенты видели друг друга.
keepalive 10 120                     # Каждые 10 секунд посылать ping, перезапустить туннель если сервер не отвечает в течении 120 секунд.
tls-server                           # Включаем TLS
auth SHA512                          # Для аутентификации используются ключи SHA512
tls-auth ta.key 0                    # Путь к ключу TLS
cipher BF-CBC                        # Метод шифрования
comp-lzo adaptive                    # Включить сжатие
user nobody                          # Права, с которыми будет работать OpenVPN.
group nogroup
persist-key                          # Не перечитывать файлы ключей при перезапуске туннеля.
persist-tun                          # Оставить без изменения устройства tun/tap при перезапуске OpenVPN.
status openvpn-status.log            # Лог с информацией о текущих соединениях.
log /var/log/openvpn.log             # Путь к лог-файлу.
verb 3                               # Уровень детализации лога.
mute                                 # В лог будет записываться до 10 сообщений из одной категории.

Создадим директорию для клиентских настроек:

mkdir /etc/openvpn/ccd

После завершения настройки OpenVPN, перезагружаем сервер:

reboot

В случае успешного запуска OpenVPN в системе должен появится новый tun0 интерфейс:

# ifconfig
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Это означает, что OpenVPN сервер запущен. В случае проблем с запуском OpenVPN, используем лог-файл:

# nano /var/log/openvpn.log

Настройки маршрутизации для клиентов OpenVPN

После подключения клиента к серверу OpenVPN, шлюз будет изменен на IP виртуальной сети сервера. Если клиент OpenVPN находится в локальной сети, вам необходимо дополнительно настроить маршрутизацию для доступа к ресурсам внутри сети. Для этого создаем файл в каталоге ccd с тем же именем ключа клиента:

# nano /etc/openvpn/ccd/client1

Добавим в файл следующие параметры:

push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.1"

Первая строка добавляет маршрут в локальную сеть клиента. Вторая строка задает DNS-сервер, который будет использоваться после подключения.

Включаем NAT на OpenVPN сервере

Чтобы использовать OpenVPN для выхода в интернет, на сервере необходимо задать правило для маршрутизации трафика из сети OpenVPN в локальную сеть или сеть интернет-провайдера.

Включаем поддержку IP forwarding, открываем в файл:

# nano /etc/sysctl.conf

В котором необходимо раскомментировать строку:

#net.ipv4.ip_forward=1

Загрузим переменные ядра:

# sysctl -p

Прописываем правила iptables. Нужно разрешить клиентам из подсети 10.8.0.0/24 доступ в интернет, разрешить принимать пакеты из интернета и пропустить трафик клиентов через NAT.

# iptables -A FORWARD -i tun0 -j ACCEPT
# iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Замените eth0 на имя своего внешнего интерфейса. Следует отметить, правило MASQUERADE создает нагрузку на процессор. Поэтому, предпочтительнее использовать SNAT:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source ВНЕШНИЙ_IP

Сохраним и добавим правила в автозагрузку:

# iptables-save > /etc/iptables.conf
# echo "iptables-restore < /etc/iptables.conf" >> /etc/rc.local

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

Если OpenVPN не установлен, для установки клиента в Debian или Ubuntu необходимо выполнить команду:

# apt-get install openvpn

Копируем на компьютер клиента ключи и сертификаты из списка ниже:

client1.crt
client1.key
ca.crt
ta.key

Переносим ключи и сертификаты в директорию OpenVPN:

/etc/openvpn/

Копируем и распаковываем пример конфигурационного файла в содержимое директории OpenVPN:

# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/

Открываем файл в текстовом редакторе:

nano /etc/openvpn/client.conf

Добавим в содержимое файла следующие параметры:

client
dev tun
proto tcp
remote 90.90.90.90 1194                        # Адрес и порт сервера OpenVPN
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
auth SHA512
cipher BF-CBC
comp-lzo adaptive
;log /var/log/openvpn.log
;status /var/log/openvpn-status.log
verb 3
mute 20
;route 192.168.1.0 255.255.0.0                 # Можно прописать маршрут в локальную сеть, если это не сделано на сервере.

Для Windows необходимо положить файл client.ovpn в папку:

C:\Program Files\OpenVPN\config\

Опции протокола, шифрования и сжатия у клиента и сервера должны быть одинаковые. При необходимости вы можете настроить OpenVPN через прокси. На этом настройка OpenVPN в Debian закончена, теперь пора проверить его работоспособность. Перезапустим OpenVPN:

service openvpn restart

Пингуем 10.8.0.1, если пинг проходит, значит все хорошо.

PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 64 bytes from 10.8.0.1: icmp_req=1 ttl=64 time=30 ms

Cменить пароль root

Дата: 19.11.2015Метки:

Чтобы сменить пароль root для операционной системы CentOS/Fedora/Debian, необходимо в терминале выполнить команду:

# passwd root

После чего дважды новый пароль.

Время ответа сайта

Дата: 24.10.2015Метки:

В данной записи я расскажу как можно проверить время ответа сайта с помощью консольной утилиты curl. Используя curl мы отправим HTTP-запрос к нашему серверу, затем автоматически будет собрана статистика по каждому этапу подключения. Нам останется только вывести результат с помощью простой команды.

Время ответа сайта с помощью Сurl

Чтобы просмотреть время ответа сайта с помощью curl, запустите команду ниже:

curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nAppCon time:\t%{time_appconnect}\nRedirect time:\t%{time_redirect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\nTotal time:\t%{time_total}\n' -o /dev/null https://codebeer.ru

Для более точных данных, замеры выполнялись непосредственно на стороне VPS. Время ответа сайта:

Lookup time:    0.061
Connect time:   0.061
AppCon time:    0.080
Redirect time:  0.000
PreXfer time:   0.081
StartXfer time: 0.095

Total time:     0.096

Описание параметров curl, используемых для расчета времени ответа сайта в данном примере:

    • time_namelookup — время, затраченное на преобразование доменного имени в IP-адрес;
    • time_connect — время, затраченное на подключение к серверу по протоколу TCP;
    • time_appconnect — время, затраченное на подключение к серверу по протоколу SSL;
    • time_redirect — время, затраченное на все редиректы;
    • time_pretransfer — время, затраченное на  подготовку обмена данными;
    • time_starttransfer — суммарное время, необходимое для выполнения всех действий, вплоть до начала передачи первого байта данных.

Символические ссылки в Linux

Дата: 20.10.2015Метки:

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

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

Жесткая ссылка – это запись, которая указывает на дескриптор inode. Жесткие ссылки можно создавать только для файлов и только в пределах одной файловой системы. Перемещение или изменении имени исходного файла, не оказывает влияния на работоспособность жесткой ссылки.

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

Создание жесткой ссылки в Linux

Чтобы создать жесткую ссылку в Linux, используется команда ln:

# Синтаксис команды
ln -s <цель> <ссылка>
# Создать жесткую ссылку в Linux
ln /home/file /link

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

Создание символической ссылки в Linux

Чтобы создать символическую ссылку в Linux, вместе с командой ln, необходимо использовать параметр -s:

# Синтаксис команды
ln -s <цель> <ссылка>
# Создать символическую ссылку в Linux
ln -s /home/file /link
ln -s /home/dir /home/link

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

История команд Linux

Дата: 19.10.2015Метки:

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

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

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

История команд Linux

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

# показать всю историю команд
history
# вывести 25 последних команд
history 25
# выполнить команду по номеру из списка
!20

История команд Linux хранится в файле ~/.bash_history. Размер файла ограничен списком из 500 выполненных команд, которые затираются по мере заполнения файла.

Чтобы увеличить количество команд в истории, необходимо добавить в файл ~/.bashrc следующие настройки:

HISTSIZE=1000
HISTFILESIZE=1000

Как вы уже успели заметить, история команд Linux не учитывает дату и время выполнения команды. Чтобы добавить дату к списку команд, добавьте в конец ~/.bashrc следующую строку:

export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S '

Применить настройки без перезапуска:

bash

Очистить историю команд Linux

Случаются ситуации, когда необходимо очистить историю команд Linux. Например, некоторые команды могут содержать пароли в открытом для просмотра виде. Выполните одну из команд ниже для полного или частичного удаления истории Bash:

# очистить всю историю команд
history -cw
# удалить строку из истории команд
history -dw 25
# очистить историю команд для текущей сессии
history -r
# не сохранять команду в истории <пробел><команда>
root@debian:~$ wget --user user --password pass http://codebeer.ru/

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

set +o history

Если вы передумаете, история команд Linux включается также легко, просто выполните команду:

set -o history

Оптимизация SSD в Linux VPS

Дата: 18.10.2015Метки:

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

Паравиртуальный драйвер Virtio для SSD

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

Если ваша панель управления KVM VPS позволяет изменять драйвер виртуализации диска, то для улучшения быстродействия дисковой системы, рекомендуется переключить режим работы диска с IDE на Virtio.

Редактирование fstab

Начнем с параметров монтирования разделов в Linux. Для этого необходимо отредактировать файл /etc/fstab, который состоит из набора файловых систем. Для монтирования каждого раздела или диска в файле используется отдельная строка.

Структура файла fstab выглядит следующим образом:

  • filesystem — физическое размещения файловой системы, можно указать имя файла устройства, его метку или UUID.
  • dir — точка монтирования файловой системы.
  • type — тип файловой системы.
  • options — параметры монтирования файловой системы.
  • dump — используется утилитой dump для управления процессом создания резервных копий. Возможные значения: 0 или 1. Если указано число 1, dump создаст резервную копию.
  • pass — используется программой fsck для проверки целостности файловой системы. Возможные значения: 0, 1 или 2. Значение 1 используют для корневой файловой системы. Значение 2 имеет меньший приоритет, его используют для других разделов. Значение 0 отключает проверку fsck.

По умолчанию файл fstab в Debian выглядит следующим образом:

# <file system>                              <dir>    <type>    <options>           <dump>    <pass>
UUID=ed47f65f-2336-41e7-ad06-a03d75c4c503    /        ext4      errors=remount-ro   0         1

Где UUID это идентификатор нашего SSD, который смонтирован в корень и отформатирован в файловой системе EXT4. В качестве параметра используется опция errors=remount-ro.

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

Отключить время доступа к файлам и каталогам

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

Отключить барьеры

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

В итоге файл fstab должен выглядеть следующим образом:

# <file system>                              <dir>    <type>    <options>                                         <dump>    <pass>
UUID=ed47f65f-2336-41e7-ad06-a03d75c4c503    /        ext4      noatime,nodiratime,barrier=0,errors=remount-ro    0         1

Чтобы принять изменения необходимо выполнить команду ниже:

mount -o remount rw,errors=remount-ro,noatime,nodiratime,barrier=0 /

Настройка параметров ядра Linux для SSD

Для улучшения производительности системы, рекомендуется снизить интенсивность обращения к SWAP. Чтобы снизить минимальный процент свободной памяти, при которой будет происходить запись страниц в SWAP, необходимо установить значение параметра vm.swappiness=10.

echo 'vm.swappiness=5' >> /etc/sysctl.conf
# Применить настройки
sysctl -p

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

echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
# Применить настройки
sysctl -p

Для того чтобы проверить, что система правильно определила ваш SSD, необходимо выполнить команду:

cat /sys/block/vda/queue/rotational
0

Где vda имя вашего диска в системе. Для просмотра списка устройств используйте команду df. Значение равное 0, служит подтверждением того, что система определила тип используемого диска как SSD. В противном случае, необходимо установить значение вручную:

echo 0 > /sys/block/sda/queue/rotational
echo "echo 0 > /sys/block/sda/queue/rotational" >> /etc/rc.local

В ядре Linux имеется несколько типов планировщиков, которые выполняют функции управления дисковым пространством, расстановки приоритетов и обработки запросов в реальном времени. Рекомендуемым планировщиком для работы с SSD является Noop. Он хорошо подходит для работы с флеш-памятью благодаря использованию минимальных задержек для запросов к дисковому пространству.

echo noop > /sys/block/vda/queue/scheduler
echo "echo noop > /sys/block/vda/queue/scheduler" >> /etc/rc.local

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

echo 0 > /sys/block/vda/queue/rotational
echo "echo 0 > /sys/block/vda/queue/rotational" >> /etc/rc.local

Последняя параметр rq_affinity. Может принимать значение равное 1 принуждает обработку операций на том же процессоре, где они были сгенерированы. Это может повысить эффективность кэширования данных. Для гостевых систем KVM рекомендуется установить значение равное 0, чтобы разрешить обработку операций на любом процессоре.

echo 0 > /sys/block/sda/queue/rq_affinity
echo "echo 0 > /sys/block/sda/queue/rq_affinity" >> /etc/rc.local