IP规则表查找似乎不起作用

时间:2014-08-26 20:28:17

标签: networking routing routes ip iptables

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

默认接口是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规则如下:编辑后编辑:

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规则查找不起作用。请帮助检查是否需要纠正任何规则。

2 个答案:

答案 0 :(得分:0)

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

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

尽管如此,如果您需要的是以下内容:

  1. 允许从wlan0net1的数据包转发和伪装。
  2. 限制net0的访问权限。
  3. 然后这应该足够了,不需要特殊的ip规则或ip路由:

    1. 将默认网关设置为192.168.172.3
    2. FORWARD ip表链的默认策略设置为DROP,并保留专门为wlan0& net1并添加一个额外的规则,用于转发相反方向的数据包,即从net1转换为wlan0

答案 1 :(得分:0)

我终于找到了解决方案。一部分是将子网添加到表而不仅仅是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

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