Короткая история: то, как вы сделали это правильно (согласно вашему комментарию к вопросу).
Длинная история: в Linux сетевое «устройство» называется foo:bar
псевдонимом «foo», используемым, когда нам нужно назначить несколько сетевых настроек для интерфейса «foo», например, чтобы он отвечал на несколько подсетей на одном проводе.
Это грязный способ сделать это, и несовместимо с загрузкой. Для IPv6 все адреса, назначенные интерфейсу eth0, перечислены вместе под записью eth0. Есть более современный способ сделать это (с помощью ip addr
команды).
Интерфейсы псевдонимов можно обнаружить, поскольку :
в их именах есть двоеточие , слева от двоеточия - существующее имя интерфейса, а раздел интерфейса, когда вы это делаете ifconfig
, очень короткий. Также HWaddr
должен быть идентичным интерфейсу родительского интерфейса. Они также не будут перечислены в /proc/net/dev
. Если бы вы сказали ip addr
, eth0:0
будет отображаться как второй адрес интерфейса eth0
. (найдите строку с отступом, начинающуюся с inet
)
Псевдонимы и их родители имеют много общих настроек и полей, поскольку они имеют общий физический уровень. Ядро не рассматривает их как полностью отдельные интерфейсы. Например, трафик отображается на родительском интерфейсе, а не на псевдониме. Возможно, вы заметили, что псевдоним даже не имеет счетчиков пакетов / байтов!
Если вам нужно перехватить трафик, брандмауэр и т. Д. На интерфейсе псевдонима, вы должны использовать вместо него его родитель. Поскольку единственное отличие псевдонима от его родителя - это настройки IPv4, единственный способ сопоставить трафик с псевдонимом - использовать эти настройки IP. С помощью iptables
вы сопоставляете IPv4-адрес псевдонима так же, как в комментарии к своему ответу.