Комментарии 30
рассказывал в телеграмме бывшему другу и коллеге
Судя по всему у друга что-то не срослось, раз стал бывшим.
Штука интересная, но применимость на практике стремится к нулю.
Мне проще поднять N vpn-соединений и банальной машрутизацией разрулить трафик.
Пара строчек ip r намного проще этого монстра.
Мне проще поднять N vpn-соединений и банальной машрутизацией разрулить трафик.
Пара строчек ip r намного проще этого монстра.
Где монстр-то?
Все в юните и живет само по себе.
На практике все настраивается один раз и работает.
Но у каждого свой путь, ваш тоже имеет право на жизнь, я предложил готовое решение для желающих.
Все в юните и живет само по себе.
На практике все настраивается один раз и работает.
Но у каждого свой путь, ваш тоже имеет право на жизнь, я предложил готовое решение для желающих.
Юнит на 15 строк ExecStart в моём понимании есть монстр. Более того, чтобы кто-то со стороны попытался понять логику всего этого дела и отлаживать его в случае неработоспособности… Я бы снёс нафиг, «не дожидаясь перитонитов».
Если уж на то пошло, уж лучше поднять прокси-серверы вместо vpn, и указать в приложениях эти прокси. Обслуживать на порядок проще будет.
Если уж на то пошло, уж лучше поднять прокси-серверы вместо vpn, и указать в приложениях эти прокси. Обслуживать на порядок проще будет.
Маршрутизацией не разрулить трафик конкретного приложения.
Согласен, если задачу ставить именно так. Но я с трудом могу представить, когда может возникнуть такая необходимость.
Элементарно. Нужно что бы вся система ходила напрямую через провайдера, а торрент-клиент или браузер ходил через VPN. Или нужно, что бы только Steam ходил через VPN(что бы Steam видел регион отличный от того где ты), а вся система ходила, напрямую. Десктопных кейсов я могу придумать три десятка.
Торрент-клиенты и браузеры умеют через прокси ходить, а настроить socks-прокси намного проще.
В случае со стимом действительно имеет место быть.
Кстати, подобная технология уже была описана 2 года назад: https://habrahabr.ru/post/123140.
В случае со стимом действительно имеет место быть.
Кстати, подобная технология уже была описана 2 года назад: https://habrahabr.ru/post/123140.
Да, торрент-клиенты и браузеры могут, но ими софт не ограничивается. Простой пример: подключение к сети клиента. Мне не нужно, что бы что-то еще ходило в его сеть, мне нужно, что бы туда ходило одно конкретное приложение.
Просто отключить переназначение шлюза по умолчанию для VPN и всё. Лично меня так три VPN-подключения висят.
Дело не в шлюзах по умолчанию, у меня тоже висит три VPN'а без default gw, дело в том, что можно пускать куда-то отдельное приложение. Помимо Steam это полезно для некоторых онлайн-игр, где бывает рестрикт по региону(да, запускать игры под wine — дурное занятие, но часто для того что бы поиграть не хочется ребутиться в систему для игр, да и под системой для игр подобное невозможно).
Вооот, потихоньку удаётся вытянуть примеры задач.
Я ничего не имею против network namespace, просто я приверженец принципа KISS.
То есть, к примеру, запихивать браузер в такую обёртку — это как из пушки по воробьям. Но если приложение по-другому никак не ограничить, тогда ладно.
BTW виндовые игрушки можно в VirtualBox запускать с openvpn. Тяжеловато, но просто реализовать.
Я ничего не имею против network namespace, просто я приверженец принципа KISS.
То есть, к примеру, запихивать браузер в такую обёртку — это как из пушки по воробьям. Но если приложение по-другому никак не ограничить, тогда ладно.
BTW виндовые игрушки можно в VirtualBox запускать с openvpn. Тяжеловато, но просто реализовать.
Отлично, спасибо за quickstart! Я всё думал, как бы так красиво разрулить трафик, почему-то namespaces в голову не приходили.
Можно по идее и IPSEC так запустить.
Как вариант, чтобы не использовать sudo, есть возможность использовать http://man7.org/linux/man-pages/man7/capabilities.7.html
Примерно так:
Еще нужно не забыть добавить ~/bin/ в переменную PATH до основных директорий и ограничить к ней доступ.
Примерно так:
cp /bin/ip ~/bin
sudo setcap CAP_SYS_ADMIN=eip ~/bin/ip
~/bin/ip netns exec vpn id
Еще нужно не забыть добавить ~/bin/ в переменную PATH до основных директорий и ограничить к ней доступ.
О, как раз недавно задавался таким вопросом. Спасибо за статью!
Спасибо, как раз есть необходимость в этом
Совсем не обязательно настраивать интернет внутри неймспейса, не нужно даже запускать OpenVPN внутри него, достаточно установить VPN-соединение обычным образом и перенести tun-интерфейс внутрь нового неймспейса. Этот способ примечателен тем, что в случае разъединения VPN, трафик приложений внутри неймспейса не пойдет через обычный интернет.
А можно подробнее почему PrivateNetwork= и JoinsNamespaceOf= с PrivateTmp= не будут работать как нам надо? Заодно и создание/настройку сети для неймспейса оформить через networkd (используя .network, .netdev, .link файлы)? В чем там проблема?
C PrivateTmp= посмотрите по ссылке на LOR, это не моя информация, там есть объяснение:
«Note that using this setting will disconnect propagation of mounts from the service to the host (propagation in the opposite direction continues to work). This means that this setting may not be used for services which shall be able to install mount points in the main mount namespace»
Если предложите решение с networkd, то с радостью посмотрю, пишите на гитхабе, я для того и сделал репозиторий, что бы можно было смотреть и править, если что.
«Note that using this setting will disconnect propagation of mounts from the service to the host (propagation in the opposite direction continues to work). This means that this setting may not be used for services which shall be able to install mount points in the main mount namespace»
Если предложите решение с networkd, то с радостью посмотрю, пишите на гитхабе, я для того и сделал репозиторий, что бы можно было смотреть и править, если что.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Запуск отдельных приложений через OpenVPN без контейнеров и виртуализации