Linux: Existe uma maneira prática de executar um programa ligando-o ao endereço IP escolhido?

10

No FreeBSD 4.9 foi muito fácil de realizar com apenas um único comando como

jail [-u username]  path hostname ip-number command

se o caminho fosse / você tivesse executado apenas o mesmo programa como de costume, mas toda a comunicação de rede estava restrita a usar apenas o endereço IP fornecido como a origem. Às vezes é muito útil.

Agora, no Linux, há o LXC, que é muito parecido com o jail (ou zonas do Solaris) do FreeBSD - você consegue pensar em uma maneira semelhante de executar um programa?

    
por poige 13.09.2014 / 21:45

1 resposta

11

Iniciando o processo dentro de um namespace de rede que só pode ver o desejado Endereço IP pode realizar algo semelhante. Por exemplo, supostamente eu só queria localhost disponível para um programa particular.

Primeiro, eu crio o namespace da rede:

ip netns add limitednet

Os namespaces têm uma interface de loopback por padrão, então, próximo, eu preciso trazê-la para cima:

sudo ip netns exec limitednet ip link set lo up

Agora, posso executar um programa usando ip netns exec limitednet e ele só poderá ver a interface de loopback:

sudo ip netns exec limitednet ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

Se eu quisesse limitá-lo a um endereço diferente de localhost, eu poderia adicionar outras interfaces no namespace usando:

ip link set DEVICE_NAME netns NAMESPACE

Eu teria que experimentar um pouco mais para descobrir como adicionar um único endereço IP em um namespace no caso em que uma interface pode ter mais de um endereço IP

O artigo do LWN sobre namespaces também é útil.

    
por 13.09.2014 / 22:34