Добрый день.
Есть идея запустить браузер в отдельном VRF, чтобы он шел на вышестоящий роутер где тоже есть VRF и интерфейсы в данном VRF идут через VPN.
Ну тоесть я хочу чтобы у меня в системе было запущено два браузера, один работал как обычно а второй имел по сути дефолт роут в VPN.
Столкнулся с тем что
flame@linux-pc:~$ ip vrf exec vrf32 google-chrome
Failed to load BPF prog: 'Operation not permitted'
Пошел гуглить про bpf и capabilities, нашел тему Запуск процесса в VRF без привилегий root
Из нее понял что вроде бы как достаточно только cap_bpf. Но это не помогло, выдал еще несколько.
сделал вот так:
root@linux-pc:~# getcap /opt/google/chrome/google-chrome
/opt/google/chrome/google-chrome cap_net_raw,cap_sys_admin,cap_bpf=ep
root@linux-pc:~# getcap /opt/google/chrome/chrome
/opt/google/chrome/chrome cap_net_raw,cap_sys_admin,cap_bpf=ep
Установил kernel.unprivileged_bpf_disabled в 0 (по дефолту было 2)
flame@linux-pc:~$ sysctl kernel.unprivileged_bpf_disabled
kernel.unprivileged_bpf_disabled = 0
всё равно получаю ту же ошибку:
flame@linux-pc:~$ ip vrf exec vrf32 google-chrome
Failed to load BPF prog: 'Operation not permitted'
выдал те же capabilites для ping:
root@linux-pc:~# getcap /usr/bin/ping
/usr/bin/ping cap_net_raw,cap_sys_admin,cap_bpf=ep
flame@linux-pc:~$ ip vrf exec vrf32 ping 10.32.32.1
Failed to load BPF prog: 'Operation not permitted'
Из под рута пинг работает:
root@linux-pc:~# ip vrf exec vrf32 ping 10.32.32.1
PING 10.32.32.1 (10.32.32.1) 56(84) bytes of data.
64 bytes from 10.32.32.1: icmp_seq=1 ttl=64 time=0.470 ms
64 bytes from 10.32.32.1: icmp_seq=2 ttl=64 time=0.448 ms
^C
--- 10.32.32.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1015ms
rtt min/avg/max/mdev = 0.448/0.459/0.470/0.011 ms
root@linux-pc:~# ip vrf exec vrf32 ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=273 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=131 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 131.457/202.363/273.270/70.906 ms
вобщем понимаю что чего то не хватает но не понимаю чего :)
как можно реализовать такое?
И еще вопрос насколько опасно это может быть, если выдавать браузеру такие capabilities?
ОС Debian stable
root@linux-pc:~# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
root@linux-pc:~# uname -a
Linux linux-pc 6.1.0-28-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.119-1 (2024-11-22) x86_64 GNU/Linux