Дисклеймер

Внимание: в этом блоге могут описываться события, явления и факты при помощи ненормативной лексики.

Убедитесь, что Вы готовы к этому.


Показаны сообщения с ярлыком linux. Показать все сообщения
Показаны сообщения с ярлыком linux. Показать все сообщения

четверг, 9 февраля 2017 г.

How to block any non-VPN connections

Some people care about their internet privacy and some of them also use GNU/Linux distros. Most VPN apps for Windows have killswitch option, so if VPN suddenly disconnects, some applications or whole internet connection will be stopped.
However, there's no such option for Linux systems. But there's a beatiful thing called iptables, a very powerful firewall.

My setup is mostly automated (check the link to understand), so I have put this script in /etc/openvpn/ and named it iptables-update.sh

Here's the content:
#!/bin/bash

# CLEAR all previous iptables rules
iptables -F;

### List of the rules ###

# ALLOW loopback access
iptables -A INPUT -i lo -j ACCEPT; iptables -A OUTPUT -o lo -j ACCEPT;

# ALLOW connections within own network (e.g. to router)
iptables -A INPUT -s 192.168.1.1/16 -d 192.168.1.1/16 -j ACCEPT;  iptables -A OUTPUT -s 192.168.1.1/16 -d 192.168.1.1/16 -j ACCEPT;

# ALLOW eth+ and tun+ to communicate
iptables -A FORWARD -i eth+ -o tun+ -j ACCEPT; sudo iptables -A FORWARD -i tun+ -o eth+ -j ACCEPT; # ALLOW eth+ and tun+ to communicate

# Complicated stuff
iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE;

# DROP any eth+ outgoing packets with different destination than server IP
iptables -A OUTPUT -o eth+ ! -d $(grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /etc/openvpn/openvpn.conf) -j DROP;

# SAVE iptables rules
/etc/init.d/iptables save;
This script works perfectly for me with NordVPN setup. Last rule is the most crucial one - it takes server IP from /etc/openvpn/openvpn.conf and drops any packets with different destination to prevent leaks.

NOTE: make sure you have iptables starting at system boot.

It is reworked version of the information I found here.
And to make it automated, I put the following aliases examples in my ~/.bashrc:

alias de100="sudo /etc/init.d/openvpn stop; sudo /etc/init.d/iptables stop; sudo cp /etc/openvpn/de100.nordvpn.com.udp1194.ovpn /etc/openvpn/openvpn.conf; sudo /etc/openvpn/iptables-update.sh; sudo /etc/init.d/iptables start; sudo /etc/init.d/openvpn start"

alias de101="sudo /etc/init.d/openvpn stop; sudo /etc/init.d/iptables stop; sudo cp /etc/openvpn/de101.nordvpn.com.udp1194.ovpn /etc/openvpn/openvpn.conf; sudo /etc/openvpn/iptables-update.sh; sudo /etc/init.d/iptables start; sudo /etc/init.d/openvpn start"
Every time I change server with this alias, bash script automatically updates the rules.
As always, maybe not the most elegant way, but it's working fine :-)

How to setup NordVPN in a more convenient way

NordVPN allows you to connect to their VPN servers using multiple devices and there are many ways to connect (L2TP, PPTP, IKEv2, OpenVPN etc). One of the best way to connect is via OpenVPN, one of the most flexible and secure protocol.

NordVPN installation instructions for Linux systems can be found here, however NM Gui is laggy as hell and proposed command like method isn't the most convenient because it's not fully automated and requires a lot of typing to change servers and / or start and turn off service.

So here's my way. I don't claim it to be most elegant, but it works for me and is certainly more comfortable.

0. Assumptions.
You have:
  • active NordVPN subscription;
  • OpenVPN, ca-certificates and ZIP installed; 
1. Getting OVPN files. Download and extract .OVPN files the same way as stated in tutorial (steps 3-7).
cd /etc/openvpn/
sudo wget  https://nordvpn.com/api/files/zip
sudo unzip zip
sudo rm zip

2. Autologin. Create pass.txt file in /etc/openvpn/ directory containing your login and pass so it will look like this:
myemail@mail.com
mypassword123
1st line - login, 2nd line - password, make sure there are no extra symbols or spaces. You can make this file not readable for a unpriviledged user if you care about your NordVPN login and password and your environment isn't trusted.

Add a line to all extracted NordVPN files so they will get credentials from pass.txt and you won't have to type it manually. It's better to achieve with simple sed script:

sed -i 's/auth-user-pass/auth-user-pass pass.txt/' *.ovpn

3. Setup and start OpenVPN service. 

Now you need to copy content from certain .ovpn file to your openvpn.conf.
Let's say you want to connect to de101 server using UDP.

sudo cp /etc/openvpn/de101.nordvpn.com.udp1194.ovpn /etc/openvpn/openvpn.conf

After that you need to restart openvpn service so changes will apply:
sudo /etc/init.d/openvpn restart

The command above might be different for a certain Linux distros.
If everything is OK, you will be connected to de101 server.
In case if there are messages like this:
WARNING: openvpn has started, but is inactive
there's no reason to panic, it's totally OK.

4. Make sure OpenVPN daemon is started at the system boot.
It is different for every Linux distro and it's easy to find how to do that. If you're using Ubuntu chances are it will start automatically itself and you won't need to do anything at all.
For some distros like Gentoo however you will need to do:
sudo rc-update add openvpn default

5. Adding aliases.
Edit your ~/.bashrc to simply change servers using command-line aliases.

It's always better to type things like "de100" rather than typing manually a lot of letters.
So I just put things like this in my .bashrc.
For those who don't know what it is, just type this in command line:
cd ~
nano .bashrc
and add following lines after the existing content:

alias de100="sudo /etc/init.d/openvpn stop; sudo cp /etc/openvpn/de100.nordvpn.com.udp1194.ovpn /etc/openvpn/openvpn.conf; sudo /etc/init.d/openvpn start"

alias de101="sudo /etc/init.d/openvpn stop; sudo cp /etc/openvpn/de101.nordvpn.com.udp1194.ovpn /etc/openvpn/openvpn.conf; sudo /etc/init.d/openvpn start"
NOTE: it must be one single line for every alias in your .bashrc even if it looks like I pressed "enter" and broke it into 2 or 3 lines.

Those 2 lines above will add aliases to connect or reconnect to de100 and de101 servers.
And the list goes on -  just copy those lines change "de101" and "de100" to whatever you please from the server list to add more server-changing alieases for example:

alias nl11="sudo /etc/init.d/openvpn stop; sudo cp /etc/openvpn/nl11.nordvpn.com.udp1194.ovpn /etc/openvpn/openvpn.conf; sudo /etc/init.d/openvpn start"
Don't forget to control-O to save it. Changes will apply when you open a new tab in terminal.

After that you can just type de100 or nl11 (or whatever else you put in your .bashrc) in your shell and you will connect or reconnect to appropriate server.

If you're looking for more security and want to block any non-secured internet traffic, check this post.

суббота, 20 февраля 2016 г.

CS:GO и ошибка Could not find required OpenGL entry point 'glGetError'!

Решил, значит, зайти в Counter-Strike Global Offensive, чтобы посмотреть демо из Overwatch и причаститься к наказанию адептов WH, AIMbot и прочей нечисти, заодно и отдохнуть от работы.

Разумеется, перезагружаться в Windows для такой цели не стоит, поэтому спокойно запускаю Steam для Linux, жму на кнопку запуска,

и вот незадача - вылезает бессовестное окошко с заголовком:

Could not find required OpenGL entry point 'glGetError'! Either your video card is unsupported, or your OpenGL driver needs to be updated.


При попытке запустить скрипта CS:GO напрямую, получаю вот такое:

ivan@pc ~ $ /SteamLibrary/steamapps/common/Counter-Strike Global Offensive/csgo.sh
SDL video target is 'x11'
SDL failed to create GL compatibility profile (whichProfile=0!
PROBLEM: You appear to have OpenGL 0.0.0, but we need at least 2.0.0!
Could not find required OpenGL entry point 'glGetError'! Either your video card is unsupported, or your OpenGL driver needs to be updated
/SteamLibrary/steamapps/common/Counter-Strike Global Offensive/csgo.sh: line 57: 17727 Ошибка сегментирования                   ${DEBUGGER} "${GAMEROOT}"/${GAMEEXE} "$@
Что странно - другие установленные игры (Portal 2, The Long Dark) запускаются беспрекословно. В "Сведениях о системе" Steam (в разделе "Справка") указано, в частности:
Версия драйвера:  4.5.0 NVIDIA 361.28
Версия OpenGL: 4.5
Т.е. Steam-таки в курсе версии OpenGL.
Оказывается, разработчики Nvidia добавили GLVND в драйверах версии 361.28, что и приводит к такому сюрпризу, поскольку в CS:GO для Linux Valve тоже что-то намутили.

Следовательно, нужно как-то нивелировать это нововведение.
И одним из способов (самым простым) будет добавление в опции запуска игры (правый клик по игре в библиотеке Steam - Свойства - Установить параметры запуска) вот такую строку:

__GLVND_DISALLOW_PATCHING=1 %command%

После этого всё работает как ожидалось. Как всегда, способ, может и не самый изящный, но работает.

среда, 9 июля 2014 г.

Как я избавился от тиринга (KDE, Nvidia)

Многих интересует решение вопроса с тирингом (screen tearing) в ОС, основанных на ядре Linux. Что такое тиринг? Это когда "рвётся изображение". Это не беда какой-то отдельной аппаратной или программной платформы. Стоит отключить вертикальную синхронизацию в игре на Windows - и tearing тут как тут. 
У кого-то при использовании GNU/Linux его нет и не было, у кого-то периодически пропадает, некоторые его просто не замечают. Иногда тиринг пропадает при работе в полноэкранном режиме, при этом присутствуя в оконном.
Причины кроются в видеодрайверах, настройках менеджера окон, X-сервера и, возможно, в самом железе (имеется в виду не только видеокарта, но и монитор).
Не так давно у меня появился удивительно мерзкий тиринг, который натурально мешал смотреть видео, включая полноэкранные режимы, где тиринга у меня никогда не было.
И я решил, что хватит это терпеть и стал искать решения. Делюсь тем, что нашёл.

Вариант 1:
После многочасовых попыток решить проблему, на горизонте нарисовалось первое решение.
Для этого нужно внести изменения в файл /etc/X11/xorg.conf, добавив в секцию Screen строку:
Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
У меня получилось вот так:
Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection
Если blogger разобьёт выделенное жирным на 2 строки - не поддавайтесь на провокацию, всё выделенное жирным должно быть в Вашем xorg.conf одной строкой.
Кроме того, вместо nvidia-auto-select можно вручную вписать разрешение и частоту обновления. Например, вот так:
Option         "metamodes" "1920x1080_120 +0+0 { ForceFullCompositionPipeline = On }"

После этого нужно сохранить изменения в файле и перезапустить X-сервер. Но можно и "просто" перезагрузить компьютер (я так и делал).

Для полноты картины моих настроек:
  • в настройках Nvidia X Server в разделе OpenGL у меня отключён "Sync to VBlank";
  • в настройках эффектов KDE движок - OpenGL 3.1, графическая система Qt - растровая, предотвращение разрывов (Vsync) - полная перерисовка.
Совершенно нет уверенности в том, что сами по себе данные настройки повлияли в моём случае. Реально помогло лишь включение режима ForceFullCompositionPipeline, о чём написано выше. Тиринг пропал, его просто нет (или я его не вижу, что, в принципе, одно и то же). Стоит убрать строку из xorg.conf - и он возвращается независимо от того, какие опции Nvidia X Server или эффектов KDE.

На форумах devtalk.nvidia.com я слышал байки, что эта опция для решения проблемы screen tearing - ужасное решение, т.к. приведёт к страшной потере производительности. Возможно, у кого-то так и будет. Возможно, для какой-то версии драйверов это и так.

Но я на слово верить не захотел и проверил через Unigine Valley. Ключевые компоненты - i5-2500K @ 4.4 GHz и GTX 760.

С включенной опцией получил такой результат:
 
Unigine Valley - Тест с ForceFullCompositionPipeline = On
Текстом:
FPS: 35.0
Score: 1465
Min FPS: 22.5
Max FPS: 59.6
А вот результат того же бенчмарка с выключенной опцией:
 
Unigine Valley - Тест без ForceFullCompositionPipeline
 Текстом:
FPS: 35.1
Score: 1470
Min FPS: 21.5
Max FPS: 60.1
Возможно, для кого-то потеря 0.5 от максимального FPS и 0.1 от среднего - это страшно, но по моему скромному мнению, не только лишь все, мало кто может это заметить своими глазами.
Вроде бы всё достаточно понятно.

Вариант 2:
Создать файл /etc/profile.d/antitearing.sh
В который необходимо добавить строку 

export __GL_YIELD="USLEEP"
Сделать его исполняемым через 
chmod +x /etc/profile.d/antitearing.sh

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

Возможно, есть и более изящные решения, но я их не нашёл, поэтому делюсь тем, которое помогло в моём случае, вдруг поможет кому-то ещё устранить tearing.

P.S. если помогло (или не помогло), просьба указать об этом в комментариях, упомянув DE, драйвер и железо. А то заметка людьми читается, а вот есть ли результат у читателей - неизвестно :-(

вторник, 1 октября 2013 г.

Установка МФУ (принтер + сканер) EPSON L210 в (K)Ubuntu

Дано: принтер EPSON L210 (МФУ с СНПЧ) и ubuntu/kubuntu 12.04 LTS.
Задача: сделать так, чтобы принтер и сканер заработали.

Драйверы можно взять вот здесь: http://download.ebz.epson.net/dsc/search/01/search/searchModule (потребуется выполнить поиск по модели L210).
Нам нужны epson-inkjet-printer, iscan и iscan-data последних доступных версий.

Пробуем установить драйвер на принтер:
sudo dpkg -i epson-inkjet-printer-201207w_1.0.0-1lsb3.2_amd64.deb
Получаем:
Выбор ранее не выбранного пакета epson-inkjet-printer-201207w.
(Чтение базы данных ... на данный момент установлено 123593 файла и каталога.)
Распаковывается пакет epson-inkjet-printer-201207w (из файла epson-inkjet-printer-201207w_1.0.0-1lsb3.2_amd64.deb)...
dpkg: зависимости пакетов не позволяют настроить пакет epson-inkjet-printer-201207w:
 epson-inkjet-printer-201207w зависит от lsb (>= 3.2), однако:
  Пакет lsb не установлен.
dpkg: не удалось обработать параметр epson-inkjet-printer-201207w (--install):
 проблемы зависимостей -- оставляем не настроенным
При обработке следующих пакетов произошли ошибки:
 epson-inkjet-printer-201207w
Вот оно что. Ну хорошо, в таком случае,
sudo apt-get install lsb
Если установится сразу - хорошо. Но возможен и такой выхлоп:




 Чтение списков пакетов… Готово
Построение дерева зависимостей     
Чтение информации о состоянии… Готово
Возможно, для исправления этих ошибок вы захотите воспользоваться «apt-get -f install»:
Пакеты, имеющие неудовлетворённые зависимости:
 lsb : Зависит: lsb-core
       Зависит: lsb-graphics но он не будет установлен
       Зависит: lsb-cxx но он не будет установлен
       Зависит: lsb-desktop но он не будет установлен
       Зависит: lsb-printing но он не будет установлен
E: Неудовлетворённые зависимости. Попытайтесь выполнить «apt-get -f install», не указывая имени пакета, (или найдите другое решение).
Очевидно, что в таком случае сам apt рекомендует выполнить команду:
sudo apt-get -f install
Выполняем, а затем уже смело возвращаемся к первой команде:
sudo dpkg -i epson-inkjet-printer-201207w_1.0.0-1lsb3.2_amd64.deb
Как правило, проблем более не бывает (опыт установки на 5 системах). Ну а теперь дело за настройкой. Кому-то проще через панель настроек ОС, а наиболее универсальный метод - через веб-интерфейс CUPS.
Если кто (ещё) не знает, то этого можно добиться, перейдя в браузере по ссылке:
http://127.0.0.1:631/admin
 Ну и, собственно, картиночки (если какие вопросы возникнут) ниже: