iptables:“--src-type LOCAL”究竟是什么意思?

bob*_*bby 8 networking linux firewall iptables localhost

iptables 手册页将其定义为“本地地址”,但这仅指 127 范围 (localhost) 还是也包括 10、169、192?

Let*_*gos 11

我相信 addr-type LOCAL 表示环回的答案是错误的,因为它只是部分答案并且极具误导性。本地是指在主机的接口之一上分配的任何 IP,包括环回。如果您说 LOCAL 只是 127.0.0.0/8(如 sasanet 所述),那么您会将其限制为回送接口,这显然是错误的。

此外,IP 甚至可以是可路由的和公共的。对于主机而言,这无关紧要,因为从它的角度来看,IP 将指代主机本身。如果您 curl 或 ping 到分配在其接口上的公共 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
Run Code Online (Sandbox Code Playgroud)

ip 路由显示表本地:

local 172.31.20.254 dev eth0 proto kernel scope host src 172.31.20.254
Run Code Online (Sandbox Code Playgroud)

(前面已经说过,ip是私有的还是公有的显然无关紧要,只要分配给网络接口即可)


inv*_*uck 5

术语“本地路由”意味着数据包将“本地”传送到您的主机,因为目的地已分配给您主机的接口之一。它不仅意味着localhost,如环回地址(也169.254/16“链接本地”地址)。

\n\n

Linux使用Netlink协议在内核空间和用户空间之间发送消息\xe2\x80\x94是Netlink家族中的一个NETLINK_ROUTE,可以用来接收路由更新、修改接口地址。例如, iproute2 中的ip-route命令使用此命令。

\n\n

查看iptables 的addrtype源代码,您将看到对 的引用linux/rtnetlink.h,它定义RTN_LOCAL为消息类型。手册rtnetlink(7)页描述RTN_LOCAL为:

\n\n
rtm_type          Route type\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\nRTN_LOCAL         a local interface route\n
Run Code Online (Sandbox Code Playgroud)\n\n

当你读到这些内容时,你会觉得这些都不是很清楚,而且我能找到的一些最好的参考资料是各种互联网资源,所以出现混乱是可以理解的。

\n


小智 3

这里有很好的解释:显式匹配

关于它的另一个讨论: https://www.linuxquestions.org/questions/linux-networking-3/wtf-addrtype-in ​​-iptables-manpage-746659/#post3638892

  • 所以答案是:“主机本身的地址......在 127.xxx 范围内”。 (2认同)