• Codeby web-security - Курс "Тестирование Веб-Приложений на проникновение с нуля" от команды codeby. Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

OpenVPN для отдельной программы.

nekto

Member
02.11.2017
17
48
#1
К написанию этой заметки натолкнула статья Настройка IPTables на разрыв соединения при отключении от VPN, хотя основной функционал, о котором хочу рассказать совершенно другой.

Многим ведь хотелось иметь следующую возможность: сидеть в интернете через обычное соеденение, а какой то софт (допустим Firefox, Burp Suite, sqlmap), паралельно работал через VPN-соединение.
Не многие знают, но в Linux это возможно, и называется это namespace.

Пространство имён
(от англ. namespaces) — это функция ядра Linux, позволяющая изолировать и виртуализировать глобальные системные ресурсы множества процессов. Примеры ресурсов, которые можно виртуализировать: ID процессов, имена хостов, ID пользователей, доступ к сетям, межпроцессное взаимодействие и файловые системы. Одной из общих целей пространств имён является поддержка реализации контейнеров — инструмента для виртуализации на уровне операционной системы (а также других целей), обеспечивающего группу процессов иллюзией того, что они являются единственными процессами в системе. Поэтому одной из главных целей пространства имён является поддержка контейнерезации в Linux
Namespace - тема обширная, кто хочет копать глубже - гугль в помощь.

Мы же займемся практикой. Тут на самом деле все просто, так как "все придумано до нас":

установка:
git clone https://github.com/slingamn/namespaced-openvpn

запуск:
cd namespaced-openvpn
sudo ./namespaced-openvpn --config openvpn-client.conf

где openvpn-client.conf - стандартный конфиг вашего openvpn соеденения

После этого в терминале, где мы запустили ./namespaced-openvpn сам OpenVPN нам скажет, что соединение установлено.
Открываем новый терминал, пишем ifconfig и... мы не видим соединения tun0...
Не видим, так как оно переместилось в контейнер, а наша система выходит в интернет как и раньше, без всяких vpn (она про него даже не знает).
Теперь в этом же, только что открытом терминале запускаем как есть (ничего не меняя):

sudo ip netns exec protected sudo -u $USER -i

тут protected - имя нашего контейнера по дефолту. Менять не надо.

тут же вводим ifconfig и видим только lo и tun интерфейсы

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

Ответы на предполагаемые вопросы:
- открыв несколько терминалов и введя их в контейнер protected, все эти терминалы будут использовать ваше VPN соединение
- дисковая система, процессы и все остальное для софта запущенного в контейнере и вне его - все остается общим. Разница лишь в сетевой подсистеме: у "обычной" системы своя, у контейнера своя, "они не видят" друг друга.
- если рвется соединение с VPN-сервером, то никакие данные из нашего контейнера наружу не вырвутся - просто пропадет линк из контейнера с сетью.
- не получилось запустить Palemoon в контейнере. Вернее запустить получилось, но в сеть он выходит не через VPN. Как, почему - не знаю.
- во избежании кучи открытых терминалов советую использовать terminator (во всяком случае мне нравится)
- вместо терминала, можно запускать сразу нужное приложение. Запуск Firefox в контейнере: sudo ip netns exec protected firefox -u $USER -i

P.S.: с чем не разобрался - это с dns-ами и resolv.conf
После запуска ./namespaced-openvpn --config openvpn-client.conf нужно в контейнере добавлять dns в /etc/resolv.conf, ибо он пуст. В Readme namespaced-openvpn про это что то сказано, но руки так и не дошли. Если кто разберется - озвучте плиз.
 
Последнее редактирование:
16.03.2018
3
1
#4
>> нужно в контейнере добавлять dns в /etc/resolv.conf,
dhcp-option DNS 8.8.8.8 (ну или какой там вам нужен) в конфиге клиента openvpn есть?
 
Последнее редактирование:
Симпатии: Понравилось nekto
Вверх Снизу