Страница руководства iptables определяет его как «локальный адрес», но относится ли это только к диапазону 127 (localhost) или также включает 10, 169, 192?
Я считаю, что ответ о том, что addr-type LOCAL означает обратную петлю, неверен, потому что это только частичный ответ и крайне вводит в заблуждение. ЛОКАЛЬНЫЙ означает ЛЮБОЙ IP-адрес, назначенный на одном из интерфейсов хоста, включая петлевой. Если вы скажете, что LOCAL - это просто 127.0.0.0/8 (как заявил sasanet), вы ограничите его интерфейсом loopback, что совершенно неверно.
Более того, IP может быть даже маршрутизируемым и публичным. Для хоста это не имеет значения, потому что с его точки зрения этот IP будет относиться к самому хосту. Если вы скручиваете или пингуете общедоступный IP-адрес, назначенный на одном из его интерфейсов, он, очевидно, не будет отправлять пакет, он будет маршрутизировать его локально. пример:
IP-адрес показать dev eth0:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 0a:e7:8b:89:d5:f4 brd ff:ff:ff:ff:ff:ff
inet 172.31.20.254/20 brd 172.31.31.255 scope global dynamic eth0
valid_lft 3110sec preferred_lft 3110sec
ip route show table local:
local 172.31.20.254 dev eth0 proto kernel scope host src 172.31.20.254
(как уже было сказано, очевидно, не имеет значения, является ли IP частным или публичным, если он назначен сетевому интерфейсу)
Здесь довольно хорошее объяснение: http://security.maruhn.com/iptables-tutorial/x6330.html
Еще одно обсуждение этого: http://www.linuxquestions.org/questions/linux-networking-3/wtf-addrtype-in-iptables-manpage-746659/
Терминология «локальный маршрут» означает, что пакеты будут доставлены «локально» на ваш хост, поскольку пункт назначения назначен одному из интерфейсов вашего хоста. Оно делает не только значит localhost
, как в адресах обратной связи (ни 169.254/16
как в "ссылка-местная" адреса).
Linux использует протокол Netlink для отправки сообщений между пространством ядра и пространством пользователя - одним из семейств Netlink в нем является NETLINK_ROUTE
, который можно использовать для получения обновлений маршрутизации, изменения адресов интерфейсов, и т.д. Например, IP-маршрут команда из iproute2 использует это.
Глядя на addrtype
исходный код iptables вы увидите ссылки на linux/rtnetlink.h
, что определяет RTN_LOCAL
как тип сообщения. В rtnetlink(7)
страница руководства описывает RTN_LOCAL
так как:
rtm_type Route type
───────────────────────────────────────────────────────────
RTN_LOCAL a local interface route
Когда вы читаете об этом, кажется, что все это не совсем понятно, и некоторые из лучших ссылок, которые я могу найти, это Разное Интернет источники, так что понятно, почему возникает путаница.
-m addr-type LOCAL
это 127.0.0.0/8
-сеть.