Conecte-se com o D-Bus em um namespace de rede

4

Estou usando namespaces de rede para capturar o tráfego de rede de um único processo. O namespace é conectado através do "host" através de um par veth e tem conectividade de rede através do NAT. Até agora, isso funciona para o tráfego IP e denominado soquetes de domínio Unix.

Um problema surge quando um programa precisa se comunicar com o barramento de sessão do D-Bus. O daemon D-Bus escuta em um soquete abstrato, conforme especificado com esta variável de ambiente:

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-jIB6oAy5ea,guid=04506c9a7f54e75c0b617a6c54e9b63a

Parece que o namespace abstrato do soquete do domínio Unix é diferente no namespace. Existe uma maneira de obter acesso a esta sessão do D-Bus do namespace da rede?

    
por Lekensteyn 15.02.2015 / 16:32

2 respostas

0

Não é possível conectar-se a um daemon do DBus escutando em um soquete Unix abstrato em um namespace de rede diferente. Esses endereços podem ser identificados em ss -x por meio de um endereço que contenha @ :

u_str  ESTAB      0      0      @/tmp/dbus-t00hzZWBDm 11204746              * 11210618           

Como solução alternativa, você pode criar um soquete não-abstrato Unix ou IP que faça proxy para o soquete Unix abstrato. Isso deve ser feito fora do namespace da rede. De dentro do namespace da rede, você pode se conectar a esse endereço. Por exemplo. assumindo o endereço do soquete abstrato acima, execute isso fora do namespace:

socat UNIX-LISTEN:/tmp/whatever,fork ABSTRACT-CONNECT:/tmp/dbus-t00hzZWBDm

Em seguida, a partir do namespace, você pode se conectar definindo essa variável de ambiente:

DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/whatever
    
por 08.10.2017 / 14:26
0

O namespace de rede do Linux abrange apenas recursos de rede, como pilhas IPv4 e IPv6, interfaces de rede, endereços IP, rotas IP, ... Mas os soquetes unix não pertencem aos espaços de nomes da rede. Sockets usam o sistema de arquivos como espaço de endereço , então eles estão relacionados, se você pode chamá-lo assim, para montar namespaces para acessá-los através do sistema de arquivos. No entanto, você pode passar soquetes unix por descritores de arquivos, mesmo quando não há pontos de montagem compartilhados disponíveis.

Em conseqüência, a comunicação DBus não se relaciona com os namespaces da rede Linux e não é afetada por ela. Portanto, não há como acessar o DBus a partir de um namespace de rede (porque isso não se aplica).

    
por 25.06.2018 / 23:21