【问题标题】:IP rule table look up does not seem to workIP 规则表查找似乎不起作用
【发布时间】:2014-08-30 04:04:01
【问题描述】:

我有一个带有三个网络接口的系统。下面是我正在尝试设置的配置。 wlan0(它实际上是一个 WiFi AP 接口) - 其他设备通过此接口连接。 net1 - 面向互联网的接口,必须链接到 wlan0 才能为通过 wlan0 连接的设备提供互联网服务。 net0 - 面向受限互联网访问的接口,仅回答来自该子网内的请求的查询。

默认接口是 net0 及其网关。 ip route show 的输出如下所示:

default via 10.228.103.241 dev net0
10.228.103.240/30 dev net0 src 10.228.103.242

现在我想在表 7 中查找所有对 eth0 和 net1 的请求的路由规则。所以我创建了如下的 ip 规则: EDIT AFTER RESPONSE:

0:      from all lookup local
255:  from 8.8.0.0/16 lookup iTbl
256:  from 192.168.225.1 lookup iTbl
257:  from 192.168.172.2 lookup iTbl
32758:  from all lookup main
32767:  from all lookup default

8.8.0.0 用于名称服务器。它列为 iTbl 是因为我在 /etc/iproute2/rt_tables 中将 7 定义为 iTbl。

表 7 的 ip route show 如下所示:

default via 192.168.172.3 dev net1
8.8.0.0/16 via 192.168.172.3 dev net1
192.168.172.0/24 dev net1  src 192.168.172.2
192.168.225.0/24 dev wlan0  src 192.168.225.1

最后我的 iptables 看起来像这样:

iptables -nvL
Chain INPUT (policy ACCEPT 245 packets, 49904 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    3   180 ACCEPT     all  --  wlan0   *       0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 190 packets, 19182 bytes)
 pkts bytes target     prot opt in     out     source               destination

iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 22 packets, 2205 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 21 packets, 2145 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 91 packets, 7782 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 90 packets, 7226 bytes)
 pkts bytes target     prot opt in     out     source               destination
    2   616 MASQUERADE  all  --  *      net1  0.0.0.0/0            0.0.0.0/0

当我将设备连接到 wlan0 接口并尝试浏览互联网时,tcpdump 显示来自 wlan0 的所有请求似乎都通过 net0,实际上它必须通过 net1。我阅读了许多帖子和论坛。在尝试了不同的事情后,我无法解决问题。我无法理解哪里出了问题。从 tcpdump 和逻辑上看,似乎对表 7 的 ip 规则查找不起作用。请帮助检查是否需要更正任何规则。

【问题讨论】:

    标签: networking routing routes ip iptables


    【解决方案1】:

    我终于找到了解决办法。一部分是将子网添加到表中,而不仅仅是 IP,这是 Yoel 提供的建议。第二个是在 ip 规则列表中添加“to rule”。我的最终 IP 规则数据库如下所示:

    0:      from all lookup local
    255:    from 192.168.172.0/24 lookup iTbl
    256:    from 192.168.225.0/24 lookup iTbl
    257:    from 8.8.0.0/16 lookup iTbl
    258:    from all to 192.168.172.0/24 lookup iTbl
    259:    from all to 192.168.225.0/24 lookup iTbl
    260:    from all to 8.8.0.0/16 lookup iTbl
    32766:  from all lookup main
    32767:  from all lookup default
    

    可能所有这些都不是必需的,可以进行更多优化。但这行得通,所以我把它作为解决方案。

    【讨论】:

      【解决方案2】:

      main 的查找规则的优先级目前高于 iTbl。尝试降低其优先级或增加 iTbl 的优先级。

      此外,指定查找表所依据的源地址的规则应包含掩码,即192.168.225.1/24192.168.172.2/24

      不过,归根结底,如果您只需要以下内容:

      1. 允许从wlan0net1 的数据包转发和伪装。
      2. 限制对net0的访问。

      那么这就足够了,不需要特殊的 ip 规则或 ip 路由:

      1. 将默认网关设置为192.168.172.3
      2. FORWARD ip 表链的默认策略设置为DROP,保留您专门为wlan0net1 定义的特殊规则,并添加一条额外的规则用于反向转发数据包,即从net1 转为 wlan0

      【讨论】:

      • 感谢您的回复。我在发布后看到了这个问题,并在代码中更正了它。抱歉忘记更新帖子了。但是还是不行。
      • 感谢您的帮助。是的,这是问题之一。另一个是没有在 ip 规则中添加“to rule”。当我在两个接口上检查 tcpdump 时看到了这一点。我会提出对我有用的规则作为答案。
      • @Ashgang,这些新规则是不必要的,因为可以在主路由表中指定合适的路由条目。无论如何,我已经在我的回答中指定了一个简单的方法,可以实现你想要的。
      • 感谢您的意见。该建议看起来很优雅,但我需要的是,对于源自系统的任何请求,它必须通过 net0 及其网关。所以我想主表中的默认网关应该是net0的网关。来自 wlan0 的所有流量都必须通过 net1。这就是我尝试将 wlan0 和 net1 设置重定向到单独的表的原因。如果默认gw设置为net1的网关,并且所有其他流量都被丢弃,我相信来自系统的请求将被阻止,只有ip表规则指定的wlan0到net1才能工作。
      • @Ashgang,在这种情况下,只需将FORWARD ip 表链的默认策略设置为DROP,就像我的回答一样,这样来自或发往该系统的数据包不会t 受影响。此类数据包应由普通的main 路由表根据找到的最长前缀匹配进行路由。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2017-01-15
      • 2016-01-31
      • 1970-01-01
      相关资源
      最近更新 更多