Настройка Shadowsocks
Большинство распространённых протоколов VPN, вроде OpenVPN можно заблокировать. Однако есть решение - технология Shadowsocks. Эта технология работает по принципу прокси, но с шифрованием. Она маскируется под https трафик, поэтому использование этого протокола сложно вычислить и заблокировать. В этой статье мы рассмотрим как выполняется настройка Shadowsocks Ubuntu
Прежде всего, обратите внимание, что для работы Shadowsocks, как собственно и для VPN вам понадобится сервер, в стране, где нужные вам сайты не заблокированы. Именно на этом сервере устанавливается сервер Shadowsocks. На вашем компьютере или телефоне устанавливается клиент, который подключается к этому серверу. Между вашим клиентом и сервером трафик будет зашифрован поэтому провайдер, не сможет понять какой сайт вы открываете, поэтому не заблокирует его. А уже на сервере запрос будет расшифрован и в открытом виде поступит на сайт.
Реализация shadowsocks на Си есть в официальных репозиториях Ubuntu. Вы можете установить её с помощью команды:
sudo apt install shadowsocks-libev
Конфигурационный файл shadowsocks находится по пути /etc/shadowsocks-libev/config.json и по умолчанию выглядит вот так:
{
"server":["::1", "127.0.0.1"],
"mode":"tcp_and_udp",
"server_port":8388,
"local_port":1080,
"password":"<Password>",
"timeout":86400,
"method":"chacha20-ietf-poly1305"
}
Вот что означают эти сроки:
server - IP адрес, на котором программа будет ожидать соединений, должно соответствовать внешнему IP адресу вашего сервера.
mode - указывает какой протокол соединение использовать - tcp, udp или оба.
server_port - порт сервера, который вы будете использовать для подключения, по умолчанию - 8388.
local_port - порт клиента, к которому будет подключаться браузер по протоколу SOCS5.
password - пароль, который будет использоваться клиентами для подключения.
method - метод шифрования, по умолчанию используется chacha20-ietf-poly1305.
Для начала работы с shadowsocks надо установить в поле server внешний IP адрес вашего сервера. Также в поле password, надо прописать пароль, который будет использоваться на клиенте для подключения к серверу. Всё остальное можно оставить по умолчанию. Также после внесения изменений в конфигурационный файл необходимо перезапустить сервис:
sudo systemctl restart shadowsocks-libev
На этом базовая настройка закончена, можно переходить к подключению. Если вы хотите запустить сервер для отладки, чтобы видеть всё, что происходит, можете остановить systemd службу и запустить его вручную:
/usr/bin/ss-server -c /etc/shadowsocks-libev/config.json
Для подключения вам понадобится клиент. В Linux можно использовать GUI клиент от Outline. Однако и его мы не будем рассматривать в этой статье. Мы поговорим про использование консольного клиента. Его можно получить установив тот же пакет, что и для сервера. Вы можете собрать его из исходников, как описано выше или установить из репозиториев дистрибутива:
sudo apt install shadowsocks-libev
После установки нужно отредактировать конфигурационный файл, так чтобы он был таким же как и на сервере. Например:
{
"server": "<remote_server_ip",
"mode":"tcp_and_udp",
"server_port":8388,
"local_port":1080,
"password":"<Password_from_remote_server_config>",
"timeout":86400, "method":"chacha20-ietf-poly1305"
}
После этого можно запустить клиент:
sudo ss-local -v -c /etc/shadowsocks-libev/config.json
Опция -v здесь означает максимально подробный вывод, а -c - указывает путь к конфигурационному файлу. Клиент запущен, но ваш трафик ещё не перенаправляется через тоннель. Для этого надо настроить подключение к прокси в вашем браузере. Клиент ожидает соединений от браузера на порту 1080 (по умолчанию).
Для настройки прокси в Firefox откройте Настройки. В разделе Основные пролистайте в самый низ и найдите Параметры сети, тут нажмите Настроить и в открывшемся окне введите адрес 127.0.0.1 и порт 1080. После этого Firefox будет использовать Shadowsocks для открытия сайтов. Если вы откроете сайт eth0.me, то увидите, что ваш IP адрес соответствует адресу сервера, на котором установлен Shadowsocks.
Обратите внимание, что многие провайдеры блокируют сайты по DNS, так что лучше в настройках своего роутера указать DNS Google - 8.8.8.8 или включить в браузере DNS over HTTPS.
Простая настройка WireGuard Linux
WireGuard - это новый, современный VPN сервис с открытым исходным кодом, который позиционирует себя как замену OpenVPN и использует современную криптографию. Он реализован в виде модуля ядра Linux. Изначально он поддерживал только Linux, но потом были разработаны приложения для Windows, MacOS и Android.
В установке нет ничего сложного, выполните такие команды:
sudo apt update
sudo apt install wireguard
Для того, чтобы пакеты перенаправлялись туда, куда надо, нужно разрешить перенаправление сетевых пакетов на уровне ядра. Для этого откройте файл /etc/sysctl.conf и добавьте в конец такие строки:
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
Затем необходимо выполнить команду sysctl -p чтобы система перечитала конфигурацию:
sysctl -p
Для сервера надо создать приватный и публичный ключ. Эти ключи, потом надо будет записать в конфигурационный файл сервера и клиента, сами файлы ключей вам не нужны, поэтому можете создавать их где хотите, например, в домашней папке:
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
Аналогичным образом создаём ключи для клиента. Команда та же:
wg genkey | sudo tee client_private.key | wg pubkey | sudo tee client_public.key
Наш конфигурационный файл сервера будет находится по пути /etc/wireguard/wg0.conf и будет выглядеть следующим образом:
[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 63665
PrivateKey = <server_private.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A
POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE [Peer]
PublicKey = <client_public.key>
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
Файл разделен на две секции:
Interface - настройка сервера;
Peer - настройка клиентов, которые могут подключаться к серверу, секций Peer может быть несколько.
В данном случае мы настраиваем сервер WireGuard для работы с IPv4 и IPv6 одновременно, вот, что значат основные параметры:
Address - адрес сервера в сети VPN;
ListenPort - порт, на котором будет ожидать подключения WireGuard;
PrivateKey - приватный ключ сервера, сгенерированный ранее;
PostUp - команда, которая выполняется после запуска сервера. В данном случае включается поддержка MASQUERADE для интерфейса enp0s8, а также разрешается прием пакетов на интерфейсе wg0. Сетевые интерфейсы вам придется заменить на свои.
PostDown - выполняется после завершения работы WireGuard, в данном случае удаляет все правила, добавленные в PostUp.
Секции Peer содержат настройки клиентов, которые могут подключится к серверу:
PublicKey - публичный ключ клиента, сгенерированный ранее;
AllowedIPs - IP адрес, который может взять клиент. Обратите внимание, маска для IPv4 должна быть 32.
Теперь можно переходить к созданию конфигурационного файла непосредственно для клиента.
Конфигурационный файл клиента будет выглядеть примерно так:
[Interface]
PrivateKey = <client_private.key>
Address = 10.66.66.2/24,fd42:42:42::2/64
DNS = 8.8.8.8,8.8.4.4
[Peer]
PublicKey = <server_public.key>
Endpoint = 192.168.56.101:63665
AllowedIPs = 0.0.0.0/0,::/0
Обратите внимание, что все ключи мы генерируем на сервере, а затем уже скидываем конфигурационный файл клиента на компьютер, который надо подключить к сети. Рассмотрим подробнее что за что отвечает:
PrivateKey - приватный ключ клиента, сгенерированный ранее;
Address - IP адрес интерфейса wg0 клиента;
DNS - серверы DNS, которые будут использоваться для разрешения доменных имён;
PublicKey - публичный ключ сервера, к которому надо подключится.
Endpoint - здесь надо указать IP адрес сервера, на котором установлен WireGuard и порт;
AllowedIPs - IP адреса, трафик с которых будет перенаправляться в сеть VPN, в данном примере выбраны все адреса.
После того, как вы внесли все изменения, скопируйте файл на компьютер клиента под именем /etc/wireguard/wg0.conf.
Для запуска сервера используйте такую команду:
sudo wg-quick up wg0
Аналогично можно использовать systemd:
sudo systemctl start wg-quick@wg0
С помощью systemd можно настроить автозагрузку интерфейса:
sudo systemctl enable wg-quick@wg0
Подключение клиента выполняется аналогично запуску сервера. Если WireGuard уже установлен, а конфигурационный файл клиента находится по пути /etc/wireguard/wg0.conf:
sudo wg-quick up wg0
Если у вас не получается установить WireGuard самому, вы можете попробовать скрипт автоматической установки.
Почему на Snapdragon так мало прошивок для SM-G9650, по сравнению с Exynos?
Существует несколько причин, по которым для смартфона SM-G9650 на базе Snapdragon доступно меньше прошивок, чем для его эквивалента на Exynos:
1. Ограниченная доступность: Модель SM-G9650 с Snapdragon официально продается в меньшем количестве регионов, чем версия Exynos. Это приводит к меньшей пользовательской базе и, следовательно, к меньшему интересу разработчиков прошивок к созданию ПО для неё.
2. Сложность разработки: Разработка прошивок для Snapdragon может быть более сложной, чем для Exynos. Это связано с архитектурными отличиями чипсетов и необходимостью адаптировать код прошивки к специфике Snapdragon.
3. Отсутствие поддержки производителя: Samsung, как правило, предоставляет меньше поддержки для моделей Snapdragon, чем для Exynos. Это означает, что разработчикам прошивок приходится полагаться на сторонние ресурсы и инструменты, что может затруднить процесс разработки.
4. Меньшее сообщество: Сообщество пользователей Snapdragon SM-G9650, как правило, меньше, чем сообщество Exynos. Это означает, что меньше людей тестируют и используют прошивки, что может привести к меньшей мотивации для разработчиков создавать новое ПО.
Несмотря на эти трудности, существует несколько активных сообществ разработчиков, которые создают прошивки для SM-G9650 на Snapdragon.
Вот несколько ресурсов, где можно найти прошивки для вашего устройства:
XDA Developers: https://www.xda-developers.com/
SamMobile: https://www.sammobile.com/
Важно отметить, что установка прошивок сопряжена с рисками. Перед установкой любой прошивки обязательно сделайте резервную копию данных устройства.
В целом, меньшее количество прошивок для SM-G9650 на Snapdragon обусловлено ограниченной доступностью устройства, сложностью разработки, отсутствием поддержки производителя и меньшим сообществом пользователей.
Однако, при наличии энтузиазма и желания, вы все же можете найти прошивки для вашего устройства и улучшить его функциональность.
А также вы сможете сами портировать прошивки и это не так и сложно, но это уже совсем для другого поста.
Ubuntu 24.04 и Nvidia-driver-390 на ядре 6.8
Есть умельцы или информация кто смог победить эту напасть?
Powershell на linux
Есть ли те кто использует powershell на линуксе?
С какими подводными камнями столкнулись?
Суть - моя компания очень активно избавляется от винды - а вот переписывать кучу автоматизаций с шелла на тот же питон - я не горю желанием.
Если совместимость неплохая - то скрипты сохраняться только потеряв виндозависимую часть
На reddit тоже спрашивал - но ценной информации ноль....
Проброс видеокарты в виртуальную машину. Небольшой UPD
Приветствую!
Сей UPD является продолжением статьи "Проброс видеокарты в виртуальную машину".
На полноценную публикацию для Хабра не тянет, но описанный ниже момент для кого-то может оказаться полезным.
Итак, краткие исходные данные таковы (полный расклад в статье по ссылке выше):
1) 2 видеокарты: "Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X]" (используется для ВМ с Win10) и "Park [Mobility Radeon HD 5430]" (используется для хост-системы);
2) "Radeon HD 5430" (старенькая видюха) воткнута в первый pcie-слот материнки, а "Lexa PRO" (железяка поновее) - во второй (кстати, в статье этот момент описан не совсем корректно);
Видеокарту "Radeon HD 5430" понадобилось перекинуть с хост-системы на ВМ, а "Lexa PRO" - на хост-систему.
Чтобы это сделать корректно, необходимо карту из первого слота явно отвязать от хост-системы. Небольшая сложность тут в том, что она идёт первой в очереди на инициализацию хост-системой.
Очерёдность инициализации выводится посредством получения содержимого procfs-файла "/proc/fb" (fb = framebuffer). Выглядеть это будет, например, так
0 efifb vga
1 amdgpudrmfb
Чтобы не использовать видеокарту в хост-системе для передачи в ВМ в статье было задействовано как изменение параметров ядра (grub) при загрузке, так и механизм подгружаемых модулей ядра (modprobe), т.е.
1) добавление параметров «intel_iommu=on iommu=on rd.driver.pre=pci-stub pci-stub.ids=1002:67ff,1002:aae0» (идентификаторы "Lexa PRO") в grub
и
2) «blacklist amdgpu» и «options pci-stub ids=1002:699f,1002:aae0» -> «/etc/modprobe.d/local.conf».
Т.к. первой хост-система (ОС AlmaLinux8) захватывала "Radeon HD 5430", то проблем в рамках описанной в статье конфигурации не было.
В случае же, когда есть необходимость в ВМ прокинуть карту, находящуюся в более приоритетном слоте, в параметры загрузки мы должны прописать явный запрет на захват целевой карты. Делается это посредством добавления подстроки "video=efifb:off" (подстрока "efifb" взята из вывода "cat /proc/fb") в параметр GRUB_CMDLINE_LINUX ("/etc/default/grub") и последущим исполнением команд grub2-mkconfig + dracut + перезагрузка.
Итого, файл "/etc/default/grub" должен иметь примерно такой вид.
1002:68e1,1002:aa68 - идентификаторы "Radeon HD 5430"
В файле «/etc/modprobe.d/local.conf» также меняем идентификаторы, но не отправляем в блэк-лист драйвер "radeon", т.к. оный необходим ОС при загрузке. В общем, файл "local.conf" должен содержать только одну строку - "options pci-stub ids=1002:68e1,1002:aa68".
Хорошо разбираетесь в звездах и юморе?
Тогда этот вызов для вас! Мы зашифровали звездных капитанов команд нового юмористического шоу, ваша задача — угадать, кто возглавил каждую из них.
Переходите по ссылке и проверьте свою юмористическую интуицию!
Ставим SD web UI на Linux
Давно витала в голове мысль вынести эксперименты с нейросетями на отдельный компьютер, и тут подвернулась редкая удача. Попал мне в руки интересный девайс, а именно Nvidia Tesla A2 аж на 16 гб видео памяти.
Значит хватит отлынивать, тем более привалили майские выходные, короче «нейросерверу» быть! А для повседневных задач собрать компактный, тихий системничек в microATX формате. Но, это потом…
Так как это всё-таки сервер нужна серверная ОС. Качаем Ubuntu 24.04
Ставим.
Подробно на этом останавливаться не буду, сейчас установка Linux проста до безобразия, отмечу только два момента. Ставил в минималке и под /home примонтирован отдельный, быстрый ssd - > за подробной инструкцией в интернет, там есть.
Далее, далее, далее... Готово.
Подключаемся по SSH
Дабы протестировать карточку установим Stable Diffusion WebUI от AUTOMATIC1111
Здесь начинается полезное для общественности. Поехали!
Обновляемся
sudo apt update
sudo apt upgrade
Устанавливаем необходимое
sudo apt install git bc google-perftools screen nano
Ставим драйвер Nvidia
sudo apt install libnvidia-common-535 libnvidia-gl-535 nvidia-driver-535
Ребутимся
sudo reboot
Проверяем GPU
nvidia-smi
Есть контакт
Для корректной работы SD нам потребуется Python версии 3.10 (на момент написания)
Ставим пакет пакетов: sudo apt install build-essential gdb lcov pkg-config libbz2-dev libffi-dev libgdbm-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev lzma lzma-dev tk-dev uuid-dev zlib1g-dev libgdbm-compat-dev (это список пакетов, вводится в одну строку)
Идем на python.org и ищем что у них есть из свежих тридесятых питонов, ага! Есть 3.10.14 Копируем ссылку возвращаемся в консоль
Скачиваем
Распаковываем
tar -xzf Python-3.10.14.tgz
Заходим в директорию
cd Python-3.10.14
Собираем интерпретатор в .local пользователя, займет какое то время (разверните консоль во весь экран и почувствуйте себя кулхацкером)
./configure --prefix=$HOME/.local --enable-optimizations
make -j4
make install
Возвращаемся в папку пользователя
cd ~
Проверяем все ли хорошо
~/.local/bin/python3.10 --version
~/.local/bin/pip3.10 --version
Всё норм
Скачиваем WebUI
Переходим в созданную директорию
cd stable-diffusion-webui
Создаём окружение Python
~/.local/bin/python3.10 -m venv venv
Запускаем
./webui.sh
Ждём загрузки библиотек и базовых моделей и вуаля!
Работает
Осталось продумать систему охлаждения и подобрать параметры
Моя доволен!