LINUX.ORG.RU
ФорумAdmin

Изоляция сети VPN

 , , , ,


0

2

Подскажите, есть возможность изолировать сети на уровне пользователей linux?

Напримет мне по работе надо подключаться к разным VPN, при этом надо запускать некоторые автоматически при входе. Но жене эти VPN не нужны, да и нечего ей там делать. Как сделать так, что бы при входе моим пользователем они запускались и к ним не было доступа другим пользователям?



Последнее исправление: torm7 (всего исправлений: 2)
Ответ на: комментарий от t184256

Под добавить туда интернет ты же это имел в виду:

[root@nixos:~]# ip link add veth0 type veth peer name veth1
[root@nixos:~]# ip link set veth1 netns test
[root@nixos:~]# ip addr add 10.1.1.1/24 dev veth0
[root@nixos:~]# ip link set dev veth0 up
[root@nixos:~]# ip netns exec test ip addr add 10.1.1.2/24 dev veth1
[root@nixos:~]# ip netns exec test ip link set dev veth1 up

Ну так один конец veth0 будет дефолтном пространстве, а другой(veth1) в netns. Я не телепат, угадывать мысли нет умею.

torm7
() автор топика
Ответ на: комментарий от t184256

Ну запустил, с интернетом и т.п. а дальше то что?

[root@nixos:~]# ip netns add test
[root@nixos:~]# ip link add veth0 type veth peer name veth1
[root@nixos:~]# ip link set veth1 netns test
[root@nixos:~]# ip addr add 10.1.1.1/24 dev veth0
[root@nixos:~]# ip link set dev veth0 up
[root@nixos:~]# ip netns exec test ip addr add 10.1.1.2/24 dev veth1
[root@nixos:~]# ip netns exec test ip link set dev veth1 up
[root@nixos:~]# ip netns exec test ip route add default via 10.1.1.1 dev veth1
[root@nixos:~]# iptables -t nat -A POSTROUTING -s 10.1.1.0/255.255.255.0 -j MASQUERADE
[root@nixos:~]# ip netns exec test openvpn --suppress-timestamps --config /nix/store/1kvlqpicn4825vpy8m9l3r2ynv0h71jx-openvpn-config-mycfg

В дефолтном netns имею:

[root@nixos:~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp52s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 6c:24:08:e5:c6:c7 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
    link/ether 8c:f8:c5:41:91:64 brd ff:ff:ff:ff:ff:ff
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 86:0d:f7:fd:80:e8 brd ff:ff:ff:ff:ff:ff
5: ovs-sw0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 7e:e6:55:29:5d:4a brd ff:ff:ff:ff:ff:ff
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 02:42:1a:1d:16:2f brd ff:ff:ff:ff:ff:ff
10: veth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 1a:ca:26:a0:f7:b7 brd ff:ff:ff:ff:ff:ff link-netns test

В netns test имею:

[root@nixos:~]# ip netns exec test ip link show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 500
    link/none 
9: veth1@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether d2:44:15:1d:88:47 brd ff:ff:ff:ff:ff:ff link-netnsid 0

И чего дальше с этой бородой делать?

torm7
() автор топика
Ответ на: комментарий от t184256

Как его там юзать умник? Ты несколько комментариев назад не понимал откуда интерфейс в дефолтном netns берется юзатель.

torm7
() автор топика
Последнее исправление: torm7 (всего исправлений: 1)
Ответ на: комментарий от t184256

Если бы предполагалось что я всё это знаю и умею, то зачем бы мне на форуме спрашивать? Тем более мне нужен не только OpenVPN.

Я выше спрашивал как пользователя засунуть в этот netns, но ты решил сумничать и написать про процессы. По твоему наставлению туда засунули процесс, а что дальше с этим делать? Зачем ты хотел туда процесс засунуть?

torm7
() автор топика
Последнее исправление: torm7 (всего исправлений: 3)
Ответ на: комментарий от t184256

Попытаюсь ещё раз прочитать твои мысли. Под юзать tun0 в netns test, ты имел в виду примерно следующее:

  • ip netns exec test firefox
  • ip netns exec test git clone
  • ip netns exec test kmail

Если да, то это так себе решение. Надо весь сеанс пользователя туда засунуть. А если есть возможность на ходу этот сеанс переключить на другой netns, то вот и оно, универсальное решение, по изоляции любых vpn, с любым количеством пересекающихся маршрутов.

torm7
() автор топика
Последнее исправление: torm7 (всего исправлений: 1)
Ответ на: комментарий от torm7

Надо весь сеанс пользователя туда засунуть.

Мыслей не возникает как это сделать? Или вы только вопросы задаёте в ожидании, что вам готовую копипасту оформят ?

anc ★★★★★
()
Ответ на: комментарий от anc

Я не понял что вы ожидаете в ответ на ваш вопрос.

Ситуация в магазине:

Покупатель: Скажите у вас чай продается?
Продавец: Ну а вы сами как думаете, какие у вас мысли есть? Или вы ждете что я скажу вам да или нет? Нее сначала обойдите все отделы и посмотрите все полки.
Покупатель: ??? да ну нахер...
torm7
() автор топика
Последнее исправление: torm7 (всего исправлений: 2)
Ответ на: комментарий от torm7

А вообще весь этот топик странно выглядит. Все решения разложильсь на:

  • запуск vpn в netns <- - - было по умолчанию со старта топика
  • камасутру с роутингом

Причем столько пафоса от *****’ых посылателей на о боже мой читай доку/маны я давно не видел. Что самое завабное, так это то, что они по ощущениям сами не умеют того о чем говорят. Т.к. технически грамотному специалисту, знакомому с обсуждаемой областью, проще написать 3 строчки кода, чем разводить демогогию с facepalp и отсылками в Jobs

torm7
() автор топика
Последнее исправление: torm7 (всего исправлений: 1)
Ответ на: комментарий от anc

От этого комментария ваши ожидания понятнее не стали. Но задам вопрос ещё раз. Какой ответ вы ожидаете на ваш вопрос. Потому что я его реально не понял.

torm7
() автор топика
Последнее исправление: torm7 (всего исправлений: 3)
Ответ на: комментарий от anc

Для тех кто не в контексте и лень читать:

Надо весь сеанс пользователя туда засунуть.

Мыслей не возникает как это сделать? Или вы только вопросы задаёте в ожидании, что вам готовую копипасту оформят ?

Я не понял что вы ожидаете в ответ на ваш вопрос.

Ну вопросов таки было два.

Специально для вас уточню. Мне не понятно что вы хотите услышать на ваши два вопроса которые вы задали в ответ на мой вопрос.

И да, я на форумах задаю вопросы, для того что бы получить ответы. Это в теории должно сэкономить время на решение задачи, которую возможно уже кто то решал до этого и готов поделиться своим опытом. Не думал что это надо проговаривать отдельно.

torm7
() автор топика
Последнее исправление: torm7 (всего исправлений: 4)
Ответ на: комментарий от anc

Отправьте шел пользователя в отдельный ns.

Что под этим подразумевается? Это:

  • ip netns exec test bash

Если вы это подразумевали, то это не вариант, как я писал выше. Если что то другое, то раскройте свою мысль.

torm7
() автор топика
Ответ на: комментарий от anonymous

Он задал конкретный вопрос
Надо весь сеанс пользователя туда засунуть.
весь сеанс
весь

И? Не исключаю что я что-то упустил и не понимаю что такое «сеанс пользователя».

anc ★★★★★
()
Ответ на: комментарий от anc

Вот, это уже конструктивно. Под всем сеансом я подразумеваю все процессы рожденные после входа пользователя в систему:

[root@nixos:~]# systemctl status
           └─user.slice
             └─user-1000.slice
               ├─session-2.scope
               │ ├─2427 /nix/store/sddm-0.20.0/libexec/sddm-helper --socket /tmp/sddm-auth-85e471bb-d281-42fd-946a-372b6b00c77f --id 1 --start /nix/store/plasma-workspace-5.27.10/bin/st>
               │ ├─2455 /nix/store/6g15kzn8krpql4biysq2gbgkfx40ramp-kwallet-5.113.0-bin/bin/kwalletd5 --pam-login 13 14
               │ └─2460 /nix/store/l813z7s64anjxsy8q01l2z51q6fy2h8b-plasma-workspace-5.27.10/bin/startplasma-x11
               └─user@1000.service
                 ├─app.slice
                 │ ├─app-firefox-551b42a8d14e42e2bed245a9814a5585.scope
                 │ │ ├─7647 /nix/store/firefox-124.0/bin/.firefox-wrapped --name firefox
                 │ │ ├─7765 /nix/store/firefox-124.0/lib/firefox/firefox -contentproc -parentBuildID 20240311145044 -prefsLen 33786 -prefMapSize 238205 -appDir /nix/store/firefox-124.0/>
                 │ │ ├─7788 /nix/store/firefox-124.0/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 33927 -prefMapSize 238205 -jsInitLen 235212 -parentBuildID 20240311145044 -greomni /nix/store/xbr>
                 │ │ ├─7829 /nix/store/firefox-124.0/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 39313 -prefMapSize 238205 -jsInitLen 235212 -parentBuildID 20240311145044 -greomni /nix/store/xbr>
                 │ │ ├─7885 /nix/store/firefox-124.0/lib/firefox/firefox -contentproc -parentBuildID 20240311145044 -sandboxingKind 0 -prefsLen 39300 -prefMapSize 238205 -appDir /nix/store/xbraiidvpbda4lxqj3c5hi2lgqgjd>
                 │ │ ├─7929 /nix/store/firefox-124.0/lib/firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 32932 -prefMapSize 238205 -jsInitLen 235212 -parentBuildID 20240311145044 -greomni /nix/store/xbr>
                 │ │ ├─8009 /nix/store/firefox-124.0/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 33228 -prefMapSize 238205 -jsInitLen 235212 -parentBuildID 20240311145044 -greomni /nix/store/xbr>
                 │ │ ├─8050 /nix/store/firefox-124.0/lib/firefox/firefox -contentproc -childID 7 -isForBrowser -prefsLen 33228 -prefMapSize 238205 -jsInitLen 235212 -parentBuildID 20240311145044 -greomni /nix/store/xbr>
                 │ │ └─8094 /nix/store/firefox-124.0/lib/firefox/firefox -contentproc -childID 8 -isForBrowser -prefsLen 33228 -prefMapSize 238205 -jsInitLen 235212 -parentBuildID 20240311145044 -greomni /nix/store/xbr>
                 │ ├─app-kaccess@autostart.service
                 │ │ └─2900 /run/current-system/sw/bin/kaccess
                 │ ├─app-org.kde.kdeconnect.daemon@autostart.service
                 │ │ └─2886 /nix/store/kdeconnect-kde-23.08.5/libexec/kdeconnectd
                 │ ├─app-org.kde.konsole-4ac9a79afa964022a2460b1569c6f3d7.scope
                 │ │ ├─8135 /etc/profiles/per-user/rav/bin/konsole
                 │ │ ├─8164 /run/current-system/sw/bin/bash
                 │ │ ├─8189 systemctl status
                 │ │ └─8190 less
...

Надо туда засунуть все процессы в user@1000.service и всё, что запустится в этом сервисе после. «Не вариант» потому что ip netns exec test запускает новый процесс в этом нэймспэйсе, а надо засунуть существующие. И иметь возможность их переопределить с netns openvpn на netns wg и т.д.

torm7
() автор топика
Последнее исправление: torm7 (всего исправлений: 1)
Ответ на: комментарий от torm7

Народ, подскажите, только у меня проблема с добавлением процесса в неймспэйс? Проверка:

# Создать нэймспэйс
ip netns add test

# добавить существующий PID в нэймспэйс
ip netns attach test $PID
torm7
() автор топика
Ответ на: комментарий от anonymous

Даже не знаю как назвать то что он делает. Он берет inode идентификатор namespace из существующего процесса:

[rav@nixos:~]$ ls -la /proc/3616/ns/net 
lrwxrwxrwx 1 rav users 0 мар 26 21:08 /proc/3616/ns/net -> 'net:[4026531840]'

и после:

[root@nixos:~]# ip netns attach test 3616

присваевает этот идентификатор именованому netns:

[root@nixos:~]# stat -c %i /run/netns/test
4026531840

А не добавляет существующий процесс в netns. Как результат все процессы оказываются в test

torm7
() автор топика
Последнее исправление: torm7 (всего исправлений: 1)
Ответ на: комментарий от anonymous

Какой-то может механизм есть для этого типа краудсорсинга?

Я пока говорю не о патчах в апстрим ядра и/или util linux (или где там обвязка типа ip), но хочу чтоб мне сказали платно «почему это никому не нужно».

Ну правда, слабо верится что ни у кого не было желания двигать процессы. У опчика вот появилось, я и вспомнил тоже свои старые мечты.

anonymous
()
Ответ на: комментарий от anonymous

Я жопой ман читал (а код вообще не смотрел), там однозначно написано

ip netns attach NAME PID - create a new named network namespace

Другое дело, что это идиотизм и нелогично. Давайте уже вместо вонт фикс прямо скажем что ведро не умеет такого потому что не нужно, а потом через пару мажорных релизов выкатим как фичу, «хоть она и не нужна». Поехавшие.

anonymous
()
Ответ на: комментарий от anonymous

Я расскажу, почему у меня горит от этого: у меня тоже есть несколько туннелей и несколько процессов (не десктоп). Эти процессы хотелось бы НЕ ПЕРЕЗАПУСКАЯ двигать по неймспейсам.

Иногда можно сетевой интерфейс перекинуть из нс в другой, но хочется нормального решения.

инб4 кубик

anonymous
()
Ответ на: комментарий от torm7

Ну это ладно, все что писал выше - крик души, все равно линукс люблю, если без гуев.

Как вы объясните это (комментарий на который отвечаю)? Проблема ведь не в том, что оно не работает (точнее работает не так), проблема в том что за 10+ лет всем похер и никому это не надо. Спасибо опчику, а то я порой думал что я шиз и не понимаю нетспейсы совсем.

Бомбануло конечно - не то слово. Ну а модераторы типа жберта щас придут утром и не читая удалят, ведь он кубермейстер теперь стал.

anonymous
()