Rozpoczęcie procesu w sieciowej przestrzeni nazw, która może zobaczyć tylko żądany adres IP, może osiągnąć coś podobnego. Na przykład, przypuszczalnie chciałem, aby localhost był dostępny tylko dla określonego programu.
Najpierw tworzę przestrzeń nazw sieci:
ip netns add limitednet
Przestrzenie nazw mają domyślnie interfejs sprzężenia zwrotnego, więc teraz muszę go tylko wywołać:
sudo ip netns exec limitednet ip link set lo up
Teraz mogę uruchomić program za pomocą ip netns exec limitednet
i będzie on mógł zobaczyć tylko interfejs pętli zwrotnej:
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
Gdybym chciał ograniczyć go do adresu innego niż localhost, mógłbym dodać inne interfejsy do przestrzeni nazw, używając:
ip link set DEVICE_NAME netns NAMESPACE
Musiałbym trochę więcej eksperymentować, aby dowiedzieć się, jak dodać pojedynczy adres IP do przestrzeni nazw w przypadku, gdy interfejs może mieć więcej niż jeden adres IP
Artykuł LWN na przestrzeni nazw jest również pomocne.