我正在使用 Linux 机器作为路由器:
该盒子有 2 个公共 IP 和本地 IP,我使用 natting 允许本地用户访问网络。
当本地用户访问网络时,源 natting 就在这里发生,通过公共接口的数据包是通过 OUTPUT 链还是通过 Forward 链进行检查?
对于已经建立的会话返回的数据包,同样的问题是通过 INPUT 还是前向链进行检查?
最后一件事:把我当作本地用户,数据包将会像这样
PC ---> LinuxBox 本地接口 ---> Linux Box 公共接口 ----> 外部世界。
当数据包返回时:
外部字 ---->公共接口 ---->本地接口----->电脑
如果我想在数据包从本地接口移动到 PC 时应用规则,我应该使用 FORWARD 链还是 OUTPUT 链?
你怎么认为 ??
答案1
任何数据包通过路由器在 FORWARD 链中处理。它们永远不会接触 INPUT 或 OUTPUT。
任何来自路由器本身的数据包都将由 OUTPUT 处理。切勿转发。
任何发往分配给路由器接口之一的地址的数据包都将由 INPUT 链处理。永远不会转发。
INPUT/OUTPUT 永远不会被 INPUT 处理的唯一(某种)例外是如果您应用任何目标 NAT(而不是源 NAT)规则,在这种情况下,最初发往路由器接口之一的地址的数据包的目标可能会更改为不是的目标,在这种情况下它会转到 FORWARD,因为数据包不再发往本地计算机上的地址。
答案2
从您的土地到公共网络的数据包在前向链中处理。对于反向传输的数据包也是如此。输入针对最终目的地是路由器本身(并且未被击中)的数据包,无论它们来自何处。输出针对源自路由器本身并发往外部世界(无论是 CAN 还是 WAN)的数据包
我不明白你的最后一个问题,但请记住你可以(并且应该)将 iptables 配置为有状态的,这样你就不必担心来自已建立会话的数据包,只需担心初始数据包。
答案3
输入:
互联网 -> 路由器 <- my_comp
输出:
互联网<-路由器->my_comp
向前:
互联网 <- 路由器 <- my_comp
互联网 -> 路由器 -> my_comp