Запуск процесса внутри сетевого пространства имен, в котором виден только нужный IP-адрес, может привести к чему-то похожему. Например, предположил, что я хотел, чтобы localhost был доступен только для определенной программы.
Сначала я создаю пространство имен сети:
ip netns add limitednet
Пространства имен по умолчанию имеют петлевой интерфейс, так что теперь мне просто нужно поднять его:
sudo ip netns exec limitednet ip link set lo up
Теперь я могу запустить программу с помощью, ip netns exec limitednet
и она сможет видеть только петлевой интерфейс:
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
Если бы я хотел ограничить его адресом, отличным от localhost, я мог бы добавить другие интерфейсы в пространство имен, используя:
ip link set DEVICE_NAME netns NAMESPACE
Мне пришлось бы немного поэкспериментировать, чтобы понять, как добавить один IP-адрес в пространство имен в случае, если интерфейс может иметь более одного IP-адреса.
LWN статья о пространствах имен также полезно.