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

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

@webware

t.me/webware

Многим ведь хотелось иметь следующую возможность: сидеть в интернете через обычное соеденение, а какой то софт (допустим 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 про это что то сказано, но руки так и не дошли. Если кто разберется - озвучте плиз.

Источник codeby.net

Report Page