Addrtype

--match addrtype [options]

--match可以简写为-m。常用的options

  • [!] --src-type <type>

    源地址类型,前面加!表示“源地址不是<type>类型”

  • [!] --dst-type <type>

    目的地址类型,前面加!表示“目的地址不是<type>类型”

type的值有LOCALMULTICAST

示例

  • 源地址为LOCAL类型

$ iptables -t nat -A PREROUTING -m addrtype --src-type LOCAL -j TARGET
  • 目的地址为LOCAL类型

$ iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j TARGET

实际场景

场景一:kubernetes之nodeport

在k8s中,我们有时候会用NodePort的方法对外暴露一个服务。也就是说我们可以通过主机的IP加端口来访问这个服务。这个IP有很多,命令ip addr看到的都可以用。比如

那么我们可以在本机上通过127.0.0.1:port192.168.1.103:port172.17.0.1:port来访问这个服务;在其他主机上可以通过192.168.1.103:port来访问这个服务。

在访问IP:Port时,由于最终要转换到Pod的IP与Pod的Port,也就是说,当从外面访问本机的包到达时,要先进入一条链判断是否做DNAT,而这条链就是KUBE-NODEPORTS,当然目地地址不是本机就不需要进入KUBE-NODEPORTS链了。所以k8s会在KUBE-SERVICES链中加入这样一条规则:

这个LOCAL就是上面ip addr显示的IP地址的集合

我们可以查看这条规则:

场景二:calico

to be continued

Last updated

Was this helpful?