Архив метки: How to

Команда parted в Linux

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

В этой статье мы разберем как выполнять основные операции, которые мы привыкли делать в Gparted, такие как разметка диска, удаление и создание раздела, в терминале, а поможет в этом команда parted Linux. Сначала рассмотрим саму команду parted.

Читать

rtorrent – терминальный торрент для Linux

Сегодня в статье рассмотрим небольшую утилиту rtorrent – терминальный торрент клиент для Linux систем. Использовать я буду Ubuntu Server 20.04 LTS. И так давайте начнем.

Читать

Что такое Ad Hoc в Wi-Fi сети, для чего нужен и как настроить на Windows 10, 7 и XP?

Всем привет! Ad hoc – это режим беспроводной сети, которая не имеет постоянной структуры и строится «на лету», благодаря сопряжению пары устройств. Такой режим еще называют IBSS (Independent Basic Service Set) или P2P «точка-точка». Чтобы его реализовать, достаточно, чтобы оба устройства были снабжены Wi-Fi адаптерами, а в операционной системе, через которую с ними можно взаимодействовать, были установлены драйвера. Читать

Как увеличить время сессий SSH на Linux

Как увеличить время сессий SSH на Linux. Сегодня в статье поговорим о настройке увеличения время вашей сессии SSH на операционных системах Linux.

В качестве примера я буду использовать Ubuntu Server, но вся инструкция подойдет и для остальных дистрибутивов Linux. Читать

Rsync – синхронизация директорий в Linux

 

Сегодня рассмотрим примеры синхронизации директорий в операционных системах Linux с помощью распространенной утилиты Rsync.

 

Rsync – утилита для копирования и синхронизации файлов и директорий в Linux системах. Используется для синхронизации директорий как на локальном сервере, так и для синхронизации директорий с локального на удаленный и наоборот. Rsync позволяет копировать ваши данные между серверами внутри защищенного SSH соединения. Так же, rsync, поддерживает сжатие данных на лету, что повышает производительность системы. Чтобы исключить потерю информации при отправке файлов, rsync сначала копирует всю передаваемую информацию во временный файл.

 

Опции Rsync

Давайте кратко рассмотрим опции rsync. В данной статье перечислены не все опции. Для более подробной информации смотрите мануал данной утилиты при помощи команды man rsync:

  • -v – Выводить информацию о копировании файла;
  • -q – Минимум информации;
  • -c – Копировать только измененные файлы;
  • -a – Сохранять все атрибуты оригинальных файлов;
  • -R – Относительные имена пути;
  • -b – Создание резервной копии;
  • -u – Не перезаписывать файлы, которые являются более новыми на приемном конце;
  • -l – Копировать символьные ссылки;
  • -L – Копировать содержимое ссылок;
  • -H – Копировать жесткие ссылки;
  • -p – Сохранять права для файлов;
  • –partial – сохранять частично переданные файлы;
  • -g – Сохранять группу;
  • –no-group – Не сохранять группу;
  • -o – Сохранить владельца;
  • –no-owner – Не сохранять владельца;
  • -t – Сохранять время модификации;
  • -x – Работать только в этой файловой системе;
  • -e – Использовать другой транспорт, например, ssh;
  • -z – Сжимать файлы перед передачей;
  • –delete – Удалять файлы которых нет в источнике;
  • –exclude – Исключить файлы по шаблону;
  • -r – Перебирать директории рекурсивно;
  • –no-recursive – Отключить рекурсию;
  • –no-links – Отключить копирование символических ссылок;
  • -P – Выводить прогресс копирования файла;
  • –stat – Показать статистику передачи;
  • –version – Версия утилиты;
  • –inplace – Обновление файлов назначения налету;
  • –existing – Пропустить создание файлов (включая каталоги), которые еще не существуют в месте назначения;
  • –ignore-existing – Пропустить обновление файлов, которые существуют в месте назначения.
  • –temp-dir – Указываем директорию для временных файлов

 

Синхронизация директорий только на локальном сервере

Давайте синхронизируем две директории между собой, но только на локальном сервере. Директории конечно же должны существовать. Допустим у нас имеется директория /home/user/download и директория /home/user/install. Для их синхронизации давайте наберем следующую команду:

rsync -r /home/user/download/ /home/user/install/  --temp-dir=/tmp --no-owner --no-group

Тут мы синхронизируем директорию download с директорий install, также указываем куда размещать временные файлы и отказываемся от переноса владельца и группы у копируемых файлов.

Тоже самое, но без создания temp файла.

 

rsync -r /home/user/download/ /home/user/install/  --temp-dir=/tmp --no-owner --no-group --inplace

 

    • –inplace – в этом случае rsync не будет создавать при копировании новый файл и затем им замещать старый, а сразу начнет перезапись старого файла. Такой алгоритм не сможет сохранить целостность файла в случае сбоя соединения между компьютерами, за исключением использования совместно с параметром --backup. Этот параметр полезен в случае копирования файлов на одном компьютере или при копировании больших файлов таких как видео.

 

Синхронизируем файлы c Облаком cloud.mail.ru

 

Вот пример синхронизации двух каталогов. Один каталог локальный /home/local/foto – в нем удобно работать по сети. Второй каталог /home/CloudDisk/ подключен по технологии WebDAV.

Вот тут и тут уже писал про настройку облака от mail.ru на Debian системах.

 

rsync -zvraP --delete /home/local/foto/ /home/CloudDisk/  --temp-dir=/tmp

 

  • -z – Сжимаем содержимое при копировании;
  • -v – Информация о копировании;
  • -r – рекурсивно перебираем все директории;
  • -a – Cохранить все атрибуты файла;
  • -P – показывает прогресс копирования;
  • –delete – удаляет файлы из облака, которых нет в директории /home/local/foto;
  • –temp-dir=/tmp – директория для tmp файлов;

 

Данная команда пригодится если вам надо синхронизировать неизменяющиеся данные, например фотографии или видео.

Если же у вас данные в файлах меняются, например как в Word документах (имя файла остается прежним, а его размер меняется), то для их синхронизации необходимо набрать вот такую команду:

rsync -zvarcP --delete /home/local/doc/ /home/CloudDisk/doc/ --modify-window=0 --size-only

 

    • -c – Копировать только изменившиеся файлы в директории /home/local/doc/;

 

Если после копирования хотите еще оптимизировать фотографии, то вам сюда.

Настройка синхронизации с удаленным сервером при помощи rsync

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

 

Сегодня версия rsync использует протокол SSH для передачи файлов по-умолчанию. Однако вы можете использовать и демон rsyncd. Для этого клиент rsync должен быть установлен на удаленном компьютере, и его демон добавлен в автозагрузку:

 

sudo systemctl enable rsyncd

 

 

Конфигурационный файл rsync — /etc/rsyncd.conf. В этом файле можно настроить параметры rsync и настройки для синхронизации для разных ресурсов.

 

Для синхронизации через демона rsync адрес удаленного сервера указывается так rsync://:

rsync -zvarP /var/www/site/ rsync://IP_сервера/backup/

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

rsync -az /var/www/site/package.zip ваш_user@IP_сервера:/backup/

После запуска команды, удаленный сервер запросит пароль пользователя (если включена авторизация по паролю). Для автоматической авторизации нужно настроить доступ по SSH ключу.

 

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

Скопируем директорию с локального сервера на удаленный:

 

rsync -zvraP /var/www/site/ ваш_user@IP_сервера:/backup/

 

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

 

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

 

Так же вы можете синхронизировать файлы и с удаленного сервера на локальный, команда для этого немного изменится:

 

rsync -zvraP ваш_user@IP_сервера:/backup/ /backup/

 

Для принудительного использования SSH протокола, а также если вы изменили порт для SSH или для авторизации требуется указать явно где расположен сертификат SSL, команды будут выглядеть следующим образом.

 

Принудительное использование протокола SSH

 

Подключение по стандартному порту:

 

rsync -zvraPe ssh ваш_user@IP_сервера:/backup/ /backup/

 

Если удаленный SSH сервер имеет отличный от стандартного порт:

 

rsync -zvrae "ssh -p 2222" ваш_user@IP_сервера:/backup/ /backup/

 

Если надо явно указать порт и ключ:

 

rsync -zvrae "ssh -p 2222 -i ~/.ssh/id_rsa" ваш_user@IP_сервера:/backup/ /backup/

 

Синхронизация с использованием опций исключений

 

Также очень удобный опции --include и --exclude, с помощью этих опций, можно делать исключения по копированию директорий или файлов:

 

rsync -zvra --exclude=administrator/ /var/www/site ваш_user@IP_сервера:/backup/

 

В данном случае мы исключили директорию “administrator” при копировании на удаленный сервер.

 

rsync -zvra --include='*.php' --exclude='*' /var/www/site/administrator/ ваш_user@IP_сервера:/backup/

 

Добавлением опции --include мы смогли задать фильтр по файлам, скопировали только файлы с расширением “*.php“.

 

Вывод

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

Установка WireGuard на Ubuntu/Debian

Сегодня в статье приведу пример по установке и настройке VPN сервера WireGuard для операционных систем Ubuntu и Debian. Также данная статья будет справедлива и для всех производных систем данного типа.

WireGuard – это современная высокопроизводительная VPN для Linux,Windows, MacOS. Главной функцией WireGuard является обеспечение безопасного соединения между сторонами через сетевой интерфейс, зашифрованный с помощью аутентификации по открытому ключу. Это означает, что, в отличие от большинства виртуальных частных сетей, WireGuard не применяет топологию, что позволяет создавать различные конфигурации путем изменения конфигураций окружающей сети. Эта модель предлагает большую производительность и гибкость.

Сейчас WireGuard готовится к включению в состав ядра Linux. Если быть точнее, то он появится в ядре версии 5.6, он даже получил похвалу от Линус Торвальдса и в американском сенате.

Специалисты проверили скорость работы WireGuard и выяснили, что он способен обойти большинство протоколов шифрования в том числе широко известный протокол OpenVPN.

Причина, которая объясняет высокую скорость работы WireGuard, это применение быстрого и современного алгоритма шифрования, благодаря которому скорость передачи данных очень высока.

Кроме того, данный протокол очень похож на https, что позволяет обманывать системы анализа трафика DPI, установленные у Вашего провайдера и обходить эти блокировки по сигнатурам.

Установка и настройка при помощи скрипта

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

Первым шагом подготовим нашу систему:

sudo -su
apt update && apt upgrade -y
apt install curl

Далее скачиваем скрипт.

curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh

Делаем его исполняемым:

chmod +x wireguard-install.sh

Запускаем установку и настройку WireGuard

./wireguard-install.sh

Установка WireGuard на Ubuntu

Установку нашего VPN WireGuard я буду производить на сервере под управлением операционной системы Ubuntu/Debian. И так поехали.

Ubuntu 18.04

Для начала надо добавить официальный репозиторий в систему:

sudo add-apt-repository ppa:wireguard/wireguard
  • Обновляем индексы
sudo apt update
  • Устанавливаем wireguard
sudo apt install -y wireguard wireguard-dkms iptables resolvconf qrencode

Ubuntu 20.04/22.04

Так как пакет входит в официальный репозиторий, то необходимо набрать всего лишь данные команды:

  • Обновляем индексы
sudo apt update
  • Устанавливаем wireguard
sudo apt install -y wireguard wireguard-dkms iptables resolvconf qrencode

Установка WireGuard на Debian

Для того чтобы установить WireGuard на Debian с начало необходимо авторизоваться под root пользователем:

sudo su

Далее набираем следующее:

echo "deb http://deb.debian.org/debian buster-backports main" >/etc/apt/sources.list.d/backports.list
apt update
apt install -y iptables resolvconf qrencode
apt install -y -t buster-backports wireguard

Для остальных операционных систем можете посмотреть официальную страничку инсталляции.

Также установите заголовки для вашего ядра, если вы еще этого не сделали:

apt-get install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//')

Настройка VPN WireGuard на серверной части

Давайте теперь настроим наш высокопроизводительный VPN на сервере wireguard. Для этого создадим файл конфигурации и необходимые ключи шифрования. Все действия выполняем из под root.

sudo su
(umask 077 && printf "[Interface]nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/wg-server-publickey.key
  • Первая команда записывает исходное содержимое конфигурационного файла в /etc/wireguard/wg0.conf. Значение umask в суб-оболочке позволяет создать файл с ограниченными разрешениями, не затрагивая обычную среду.
  • Вторая команда генерирует закрытый ключ с помощью команды wg и записывает ее непосредственно в конфигурационный файл с ограниченным доступом. Затем ключ передается обратно команде wg pubkey, чтобы получить связанный с ним открытый ключ, который записывается в /etc/wireguard/wg-sever-publickey.key.

Следующим шагом нам необходимо включить форвардинг пакетов через наш сервер, для этого открываем следующий файл:

sudo nano /etc/sysctl.conf

И уберем знак комментария # со строки:

net.ipv4.ip_forward=1

Применим изменения

sudo sysctl -p

Далее отрываем файл на редактирования и вносим необходимую информацию о нашей VPN сети.

sudo nano /etc/wireguard/wg0.conf

Конфигурационный файл vpn wireguard

Внутри, в разделе [Interface], вы должны увидеть свой сгенерированный закрытый ключ. Этот раздел содержит конфигурацию для локальной стороны соединения.

В разделе Interface нужно также определить IP-адрес VPN, который будет использовать этот узел, и порт, который он будет прослушивать для соединений с одноранговыми узлами.

Давайте добавим в него следующие строки ListenPort, SaveConfig и Address:

[Interface]
PrivateKey = приватный_ключ_сервера
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.1/24 
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
  • ListenPort – указываем свободный порт который будет прослушивать наш сервис wg-quick (VPN WireGuard)
  • SaveConfig – имеет значение true, чтобы сервис wg-quick мог автоматически сохранять свою активную конфигурацию в этом файле при завершении работы.
  • Address – это наш IP-адрес и маска сети
  • PostUP и PostDown – запускают необходимые правило для iptables

Пробуем поднять нашу сеть скриптом wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

В системах с systemd вместо этого можно использовать следующую запись:

sudo systemctl start wg-quick@wg0.service

Если systemd ругается, то сперва необходимо включить сервис следующей командой:

sudo systemctl enable wg-quick@wg0.service

Настройка VPN WireGuard на клиентской машине

В качестве клиента у меня будет выступать ноутбук с операционной системой Ubuntu Desktop 18.04 LTS

Все действия выполняем из под пользователя root.

sudo su
add-apt-repository ppa:wireguard/wireguard 
apt install wireguard -y

Для Ubuntu 20.04 необходимо повторить тоже самое, что и при установке на серверную часть. (см. Выше)

Далее создаем конфигурационный файл и генерируем ключи:

(umask 077 && printf "[Interface]nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/wg-server-publickey.key

Открываем наш конфигурационный файл и вносим изменения.

sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = приватный_ключ_клиента
ListenPort = 5555
Address = 10.0.0.2/32 

Создайте раздел под названием [Peer] после раздела [Interface].

[Peer]
PublicKey = Публичный_ключ_сервера
AllowedIPs = 10.0.0.0/24
Endpoint = IP-адрес_сервера:5555
PersistentKeepalive = 10
  • PublicKey – укажите значение открытого ключа сервера. Вы можете найти это значение, набрав на сервере команду: wg
  • AllowedIPs – указывает на пропуск трафика через VPN. В данном случае будет проходить через VPN только трафик сети 10.0.0.0/24. Весть остальной трафик пойдет через вашего провайдер. Для заворота всего трафика через VPN указываем значение 0.0.0.0/0
  • PersistentKeepalive – время в секундах для постоянной проверки доступности ресурса.

Запускаем сервис на Ubuntu:

 sudo systemctl start wg-quick@wg0.service 

Запускаем сервис на Debian:

sudo wg-quick up /etc/wireguard/wg0.conf

Peer на стороне сервера

На сервере также необходимо добавить информацию о клиенте. Иначе ваш туннель VPN не откроется. Для этого возвращаемся на сервер и останавливаем службу wireguard:

sudo systemctl stop wg-quick@wg0.service

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

sudo nano /etc/wireguard/wg0.conf

И вносим информацию о клиенте.

[Peer]
PublicKey = публичный_ключ_клиента
AllowedIPs = 10.0.0.5/32
PersistentKeepalive = 10
  • PublicKey – ключ клиента можно посмотреть на клиентской машине при помощи команды wg.
  • AllowedIPs – указывает на IP клиента. Обязательно с маской 32

Запускаем наш сервис:

 sudo systemctl start wg-quick@wg0.service 

Пробуем пропинговать клиента.

ping 10.0.0.2
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.916 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.545 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.647 ms

Со стороны клиента также должен проходить пинг до сервера.

ping 10.0.0.1
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=2.40 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.646 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.555 ms

Хотя статья получилась большой, но все настраивается очень быстро.

Тонкая настройка параметров WireGuard на примере Proxmox

  • /usr/lib/sysctl.d/10-pve-ct-inotify-limits.conf
    fs.inotify.max_queued_events = 8388608
    fs.inotify.max_user_instances = 65536
    fs.inotify.max_user_watches = 4194304
    vm.max_map_count = 262144
    net.ipv4.neigh.default.gc_thresh3 = 8192
    net.ipv6.neigh.default.gc_thresh3 = 8192
    kernel.keys.maxkeys = 2000
  • /usr/lib/sysctl.d/10-pve.conf
    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0
    net.bridge.bridge-nf-filter-vlan-tagged = 0
    net.ipv4.igmp_link_local_mcast_reports = 0
    fs.aio-max-nr = 1048576
  • /usr/lib/sysctl.d/50-pid-max.conf
    kernel.pid_max = 4194304
  • /etc/sysctl.d/99-sysctl.conf
    net.ipv4.ip_forward = 1
  • /usr/lib/sysctl.d/protect-links.conf
    fs.protected_fifos = 1
    fs.protected_hardlinks = 1
    fs.protected_regular = 2
    fs.protected_symlinks = 1
  • /usr/lib/sysctl.d/pve-firewall.conf
    net.ipv4.conf.all.rp_filter = 2
  • /etc/sysctl.d/wg.conf
    net.ipv4.ip_forward = 1
    net.ipv6.conf.all.forwarding = 1
  • /etc/sysctl.conf
    net.ipv4.ip_forward = 1