Блог о Gentoo и около-линуксовым штукам

14 декабря 2017 г.

OpenVPN на Debian 9. Шпаргалка.

5:44 Опубликовал Дмитрий Исаенко , Нет комментариев
Шпаргалка по быстрому разворачиванию OpenVPN на Debian (испытано на версии Debian 9).
Просто копируем это дело в файл, исключая подсвеченное желтым, и выполняем через source ./file .
Для начала, серверная часть. У меня возникли проблемы со стандартным EasyRSA, поэтому использую версию из апстрима.

Серверная часть:

# apt-get install openvpn
# cd /etc/openvpn
# wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.3/EasyRSA-3.0.3.tgz
# tar zxvf EasyRSA-3.0.3.tgz 
# rm EasyRSA-3.0.3.tgz
# cd EasyRSA-3.0.3/
# vim vars
if [ -z "$EASYRSA_CALLER" ]; then
        echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2
        echo "This is no longer necessary and is disallowed. See the section called" >&2
        echo "'How to use this file' near the top comments for more details." >&2
        return 1
fi
set_var EASYRSA "$PWD"
set_var EASYRSA_DN      "cn_only"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_CA_EXPIRE       36500               # истекает через 100 лет
set_var EASYRSA_CERT_EXPIRE     36500               # истекает через 100 лет
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-1.0.cnf"  
set_var EASYRSA_REQ_CN          "srv"               # ДОЛЖНО БЫТЬ УНИКАЛЬНЫМ
set_var EASYRSA_DIGEST          "sha256"
set_var EASYRSA_BATCH           "1"                 # не безопастно. Убдеитесь, что оно вам надо
# ./easyrsa init-pki
# ./easyrsa build-ca nopass
# ./easyrsa gen-dh
# ./easyrsa  build-server-full server nopass        # Возможны ошибки. Нужно обратить внимание
# cp ./pki/ca.crt ../server/
# cp ./pki/dh.pem ../server/
# cp ./pki/issued/server.crt ../server/
# cp ./pki/private/ ../server/
# cp ./pki/private/server.key ../server/
# vim /etc/openvpn/server.conf
local 192.168.1.55       # установим локальный адрес для прослушивания входящих соединений на этом интерфейсе. См. 'ip a'
port 1194
proto udp
dev tun                 # используем tun вместо tap
cipher AES-256-CBC      # на ваше усмотрение
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
server 10.0.0.0 255.255.255.0
push 'route 0.0.0.0 255.255.255.0'
push 'dhcp-option DNS 8.8.8.8'  # учитываем специфику Andoid
push 'redirect-gateway'         # установите 'def1' или 'local def1' если нужно
client-to-client
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
mute 10
# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# sysctl -p
# iptables -A INPUT -p UDP --dport 1194 -j ACCEPT           # разрешаем входящие соединения на порт 1194 с любого интерфейса
# iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT              # разрешаем обмен трафиком между подсетями
# iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT              # разрешаем обмен трафиком между подсетями
# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE # используем маскарадинг
# iptables-save > /etc/iptables.up.rules
# vim /etc/network/if-pre-up.d/iptables
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
# chmod +x /etc/network/if-pre-up.d/iptables
# systemctl start openvpn@server
# systemctl enable openvpn@server
Сервер настроен. Но нет ни одного ключа для клиентов. Тут два варианта — делать всё ручками или воспользоваться готовым скриптом.

Вариант "всё ручками":

# cd /etc/openvpn/EasyRSA-3.0.3/
# ./easyrsa build-client-full client1 nopass            # где client1 имя клиентских файлов
# cp pki/private/client1.key /home/user/
# cp pki/issued/client1.crt /home/user/
# cp pki/ca.crt /home/user/
# vim /home/user/client1.ovpn                           # дальше на ваше усмотрение
client
tls-client
dev tun
proto udp
remote hostname.org.ru 1194
cipher AES-256-CBC
resolv-retry infinite
nobind
ca ca.crt
cert android.crt
key android.key
persist-tun
persist-key
verb 3

Вариант "всё готовым скриптом"

# cd /etc/openvpn/EasyRSA-3.0.3/
Идём качать последнюю версию ovpnWrapper: https://github.com/developersu/ovpnWrapper/releases
Качаем его и распаковываем в эту директорию.
Далее идём читать инструкцию сюда: https://developersu.blogspot.ru/2017/12/ovpnwrapper.html

Готово!
Если сервер OpenVPN находится за NAT, то будет приятным дополнением влепить правила на гейтвее (роутере, как правило):
# route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.55
Тут надо заменить последнее на адрес OpenVPN сервера. Ну и порт к нему прокинуть тоже не помешает - 1194 ;)
Позже, если не забуду, напишу заметку как сохранить это правило на OpenWRT роутере, чтобы не слетело после перезагрузки.

На этом всё =)
Пользуйтесь!

ovpnWrapper

5:07 Опубликовал Дмитрий Исаенко , , , Нет комментариев
При использовании OpenVPN удобнее всего выдавать пользователю один файл со всеми настройками, ключами и необходимыми сертификатами. К счастью, их легко встроить в файл .ovpn. 
Итак встраивать, как известно, нужно:
ca.crt
client.crt
client.key
Не плохо было бы автоматизировать процесс. Для этого и написан ovpnWrapper. Это достаточно простой скрипт на python для генерирования и/или агрегирования всех необходимых файлов в один. (Ссылка в конце.)
Используется он в паре с easyrsa3 (семантика более ранних версий не поддерживается). Его нужно поместить в ту же папку, что и easyrsa и немного настроить.

Рассмотрим поближе.
В первой строке необходимо указать путь до интерпретатора python 3. 
#!/usr/bin/python3.5
Далее нам интересна строка, где мы указываем путь до папки, в которой хотим хранить сгенерированные файлы .ovpn.
ovpnFolder = os.environ['HOME']+"/ovpn/"
Как видно, по-умолчанию она указывает на папку ovpn/ в домашней директории.
Исправим serverCA, который определяет полный путь к файлу ca.crt
serverCA = '/etc/openvpn/server/ca.crt'
И последнее, но не по значимости, head. Тут указываются все предопределённые настройки.
head = "\
client                                     \n\
tls-client                                 \n\
dev tun                                    \n\
proto udp                                  \n\
remote your.host.name.located.here.! 1194  \n\
cipher AES-256-CBC                         \n\
resolv-retry infinite                      \n\
nobind                                     \n\
persist-tun                                \n\
persist-key                                \n\
verb 3                                     \n\                                                                                                                                                                                          
" 
Теперь меняем права файлику:
# chmod +x ovpnWrapper.sh
И запускаем, передавая в качестве единственного параметра имя для файлов-сертификата, ключа и сгенерированного .ovpn.
# ./ovpnWrapper.sh client42
Он проверит, не существует ли уже сгенерированных ключа+сертификата клиента, и если нет, то создаст их. Если есть — просто создаст .ovpn файл в указанной выше директории.
Всё что требуется, читать вывод скрипта (Будьте бдительны: английский).
Вообще у меня easyrsa на каком-то этапе ругался на openssl-1.1.0f но всё что нужно генерировал.

На этом всё. Приложение качать отсюда: https://github.com/developersu/ovpnWrapper/releases/

24 ноября 2017 г.

Сайт-заглушка на OpenWRT

1:34 Опубликовал Дмитрий Исаенко Нет комментариев
Вообще, при помощи предустановленного uhttpd на OpenWRT можно показывать какие-то сайты внешнему миру, а не только интрасети. Работает это в виде «скорее не работает, чем работает». Легко валится при попытке скачать что-то больше сотни-другой килобайт.
Но всё же, "proof-of-concept", товарищи.


Итак, для начала зайдём в настройки uhttpd:
# vi /etc/config/uhttpd

config uhttpd 'userspace'
        list listen_http '0.0.0.0:81'
        list listen_http '[::]:81'
        option home '/mnt/sda1/www'
Как видите, в данном примере файл index.html должен располагаться в директории /mnt/sda1/www. Порт, на котором буду прослушиваться соединения — 81.

Теперь идём в GUI luci:
Сеть -> Межсетевой экран -> Traffic Rules -> 
И добавляем следующее.
 Всё. Теперь надо перезапустить сервер или просто перезагрузить маршрутизатор.

6 октября 2017 г.

Про сабвуфер в Dell Vostro 5470

14:26 Опубликовал Дмитрий Исаенко , Нет комментариев
Итак, проблема в том, что в linux он просто не работает. Исправить это - можно и нужно.

Для начала убедимся, что у нас в ядре включена опция CONFIG_SND_HDA_RECONFIG.

Symbol: SND_HDA_RECONFIG [=y]    
  Type  : boolean           
  Prompt: Allow dynamic codec reconfiguration       
   Location:   
     -> Device Drivers     
       -> Sound card support (SOUND [=y])          
         -> Advanced Linux Sound Architecture (SND [=m])       
  (1)       -> HD-Audio     
  Defined at sound/pci/hda/Kconfig:49 
  Depends on: SOUND [=y] && !M68K && !UML && SND [=m] && SND_HDA [=m]     
  Selected by: SND_HDA_PATCH_LOADER [=n] && SOUND [=y] && !M68K && !UML && SND [=m] && SND_HDA [=m]
Теперь поставим пакет alsa-tools:
# emerge alsa-tools 
Из него нам понадобиться hdajackretask. Запускаем его и выбираем Realtek ALC290. Далее жмём "Show unconnected pins" и находим 0x17.
Теперь выбираем "Override" и выставляем "Internal Speaker (LFE)"

В конце жмём "Install boot override" и "Apply now". Проверяем, перезагружаемся и проверяем. Тебер саб должен работать.

3 сентября 2017 г.

О особенностях работы WiFi 5Ghz (AC) на Archer C7 v.2

2:01 Опубликовал Дмитрий Исаенко Нет комментариев
Есть в TP-Link Archer C7 v.2 особые нюансы работы с WiFi. Точнее сказать, постоянные проблемы в OpenWRT. Мне понадобилось где-то пару лет, чтобы всё заработало как надо. Но обо всём по-порядку.

Проблема: соединение на 5Ghz постоянно обрывается.

Изучение dmesg не слишком помогло. В общем, чтобы этого не было, надо добавить в /etc/config/wireless, в категорию wlan0 (радио модуль AC) строку
option disassoc_low_ack '0'
Теперь соединение перестанет постоянно рваться.

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

Будто сеть не поднимается после перезагрузки, хотя в dmesg всё ок, в luci всё включено и работает. Если ещё раз перезагрузиться, то это иногда помогает и всё работает. Тут дело в том, что некоторые устройства (смартфоны там, планшеты) не видят каналов повыше. Ну вот на 36-48 работают нормально, а если сеть поднялась, например, на 136 то всё. Сети будто и нет.
Тут всё просто - в настройках меняем канал с 'auto' на '48' или какой другой свободный пониже. Сохраняем, применяем и всё снова работает.

Ниже пример типичного конфиг-файла.
# cat /etc/config/wireless 

config wifi-device 'radio0'
        option type 'mac80211'
        option hwmode '11a'
        option path 'pci0000:01/0000:01:00.0'
        option country 'US'
        option htmode 'VHT80'
        option channel '48'
        option txpower '23'

config wifi-iface
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid 'My AC'
        option encryption 'psk2'
        option key 'пароль'
        option disassoc_low_ack '0'

config wifi-device 'radio1'
        option type 'mac80211'
        option channel '11'
        option hwmode '11g'
        option path 'platform/qca955x_wmac'
        option country 'RU'
        option txpower '20'

config wifi-iface
        option device 'radio1'
        option network 'lan'
        option mode 'ap'
        option ssid 'My BGN'
        option encryption 'psk2'
        option key 'пароль'

config wifi-iface
        option device 'radio1'
        option mode 'ap'
        option ssid 'For PSP'
        option encryption 'psk'
        option macfilter 'allow'
        list maclist '00:1D:D9:A4:60:04'
        option key 'пароль'
        option network 'lan'
На этом всё.

1 сентября 2017 г.

Русификация Raspbian

2:02 Опубликовал Дмитрий Исаенко Нет комментариев
В Raspbian после установки нет русского языка и не отображаются кириллические символы в консольном шрифте. Несмотря на это, в системе есть все необходимые инструмены для устранения этой проблемы. Сегодня мы этим и займёмся, благо делается это достаточно просто.

Для начала зайдём в raspi-config и настроем нужную локаль:
# raspi-config
→ 4 Localisation Options Set up language and regional settings to match your location
→ I1 Change Locale        Set up language and regional settings to match your location
→ [*] ru_RU.UTF-8 UTF-8 
→ ru_RU.UTF-8
Теперь настроим шрифт консоли:
# dpkg-reconfigure console-setup
→ UTF-8
→ . комбинированный - латинский; славянская и не славянская кириллица 
→ TerminusBold
→ 8x16  
Если в списке нет Terminus, установим его:
# aptitude install console-terminus
Теперь настроим раскладку клавиатуры. Делать это нужно в двух файлах сразу, иначе вы столкнётесь с проблемой, что в GUI переключение раскладки не работает:
# nano /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE 

# Consult the keyboard(5) manual page. 

XKBMODEL="pc105" 
XKBLAYOUT="us,ru" 
XKBVARIANT="," 
XKBOPTIONS="grp:alt_shift_toggle,compose:rwin,terminate:ctrl_alt_bksp,grp_led:scroll" 

BACKSPACE="guess"
# nano /home/pi/.config/lxkeymap.cfg 
[Global] 
layout = us, ru 
variant =  
option = grp:alt_shift_toggle,compose:rwin,terminate:ctrl_alt_bksp,grp_led:scroll 
Теперь установим индикатор раскладки на панель. Для этого добавим в конец файла следующие строки:
# nano /home/pi/.config/lxpanel/LXDE-pi/panels/panel

...

Plugin { 
 type=xkb 
 Config { 
   Model=pc105 
   LayoutList=us,ru 
   VariantsList=, 
   ToggleOpt=grp:alt_shift_toggle 
 } 
} 
На этом всё.

29 августа 2017 г.

OpenArena dedicated server @ Gentoo + Raspberry Pi

23:31 Опубликовал Дмитрий Исаенко , , Нет комментариев
Как делать сервер на коленке за 5 секунд.

Gentoo

Сначала ставим игрулю:
emerge games-fps/openarena 
Открываем порты на свой ПК:


Создаём конфиг:
$vim ~/.openarena/baseoa/oa1.cfg
sets sv_hostname "developer.su dedicated server"
sets sv_maxclients 10
//sv_master1 "dpmaster.deathmask.net"
seta sv_maxPing 150
seta sv_minPing 0
sv_pure 1
seta sv_maxRate 25000
sets sv_fps 25
sets sv_allowdownload 1

//sv_privateClients "2" // slots substracted from sv_maxclients
//sv_privatePassword " "

seta capturelimit 8
seta timelimit 15
seta fraglimit 35

seta bot_minplayers 3
//seta g_spskill 3.0

//set rconPassword "" // for remote ingame servercontrol

seta g_motd "Have fun"
seta g_quadfactor 3
seta g_inactivity 0
seta g_allowvote 1

//If you want to use unlagged functionality (since 0.7.6)
g_delagHitscan 1

//You might want to count pushing players over the side of a map as kills. In that case: 
seta g_awardPushing 1

//Special modes since 0.7.6:
//g_instantgib 1
//g_rockets 1
//g_vampire 0.25 //25%
//g_regen 5 //5 health per sec.

//Gametypes
// 0 = Free For All
// 1 = Tourney
// 3 = Team Deathmatch
// 4 = Capture The Flag
// 8 = Elimination
// 9 = CTF Elimination
// 10 = Last Man Standing
// 11 = Double Domination
// 12 = Domination
seta g_gametype 0

set d1 "map aggressor; set nextmap vstr d2"
set d2 "map oa_dm1; set nextmap vstr d3"
set d3 "map oa_dm2; set nextmap vstr d4"
set d4 "map oa_dm3; set nextmap vstr d5"
set d5 "map oa_dm4; set nextmap vstr d6"
set d6 "map kaos2; set nextmap vstr d7"
set d7 "map oa_dm5; set nextmap vstr d8"
set d8 "map oa_rpg3dm2;set nextmap vstr d9"
set d9 "map oa_shouse; set nextmap vstr d1"
wait
vstr d1 // start loop at d1

Запускаем всё это дело
$ openarena-ded +exec oa1.cfg
И потом жмём Enter. Без этого не сработает.

Raspberry Pi (Raspbian) 

Сначала ставим необходимые пакеты:
# aptitude install openarena-oacmp1 openarena-server
Важно установить не только сервер, но и карты (oacmp1). Все остальные зависимости подтянуться автоматически.

Далее копируем вышеприведенный конфиг сюда:
# vim /etc/openarena-server/server.cfg
Запускаем
# systemctl start openarena-server
Добавляем в автозагрузку:
# systemctl enable openarena-server