iptables 手册页将其定义为“本地地址”,但是这是否仅指 127 范围(localhost)还是也包括 10、169、192?
答案1
答案2
我认为 addr-type LOCAL 表示环回的答案是错误的,因为它只是部分答案,而且极具误导性。LOCAL 表示在主机的一个接口上分配的任何 IP,包括环回。如果您说 LOCAL 只是 127.0.0.0/8(如 sasanet 所述),那么您会将其限制为环回接口,这完全是错误的。
此外,IP 甚至可以是可路由的和公开的。对于主机来说,这无关紧要,因为从它的角度来看,IP 将引用主机本身。如果您对其接口上分配的公共 IP 执行 curl 或 ping 操作,它显然不会将数据包发送出去,而是在本地路由。示例:
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 路由显示表本地:
local 172.31.20.254 dev eth0 proto kernel scope host src 172.31.20.254
(如前所述,IP 是私有的还是公共的显然无关紧要,只要它被分配给网络接口即可)
答案3
“本地路由”这个术语意味着数据包将“本地”传送到您的主机,因为目的地被分配给了您的主机的一个接口。它确实不是仅表示localhost
,如环回地址(也不169.254/16
表示“链接本地”地址)。
Linux 使用 Netlink 协议在内核空间和用户空间之间发送消息,其中的一个 Netlink 家族是NETLINK_ROUTE
,它可以用来接收路由更新、修改接口地址、ETC。例如,ip 路由iproute2 的命令使用这个。
看看addrtype
源代码在 iptables 中,你会看到对linux/rtnetlink.h
,定义RTN_LOCAL
为消息类型。rtnetlink(7)
手册页描述RTN_LOCAL
如下:
rtm_type Route type
───────────────────────────────────────────────────────────
RTN_LOCAL a local interface route
当你读到这些内容时,你不会觉得这些内容很清楚,我能找到的一些最好的参考资料是各种各样的互联网来源,因此造成混乱也是可以理解的。
答案4
-m addr-type LOCAL
是127.0.0.0/8
-网络。