其实这个问题是关于openwrt和 库瓦AP,但我想在其他linux发行版中也是一样的。
我有两个接口,一个“wan”和一个“wlan”接口。
默认情况下是否有任何过滤器限制哪些数据包从 wlan 接口转发到 wan?
特别是如果路由器上的 wlan 接口是 192.168.1.1,并且连接到此接口的某人在其计算机上输入 172.16.1.1 作为 IP。那么他的数据包是否会被转发?路由决策仅由目标 IP 决定还是受源 IP 影响?
我认为问题在于 172.16.1.1 机器的答案不会返回。 iptables 转发规则能否使接口表现得像交换机一样?
如果我想要转发 172.16.x,我可以在此物理接口上设置一个别名。还有别的办法吗?
默认库瓦防火墙脚本只是说
iptables -A FORWARD -i $WIFI -o $WAN -j ACCEPT
我禁用了伪装。
是否可以通过这种方式“分离”网络并依赖于此?有没有办法让某人使用非 192.168.1.x 地址转发他的数据包?
出现此问题的原因是,WAN 接口后面是 WLAN 用户无法访问的机器。这些机器依赖于源 IP 地址。
答案1
是的,默认情况下有一个过滤器:默认情况下根本不转发任何数据包。这显然已经被关闭了。
还有第二个可以启用的过滤器:反向路径过滤器。如果启用,进入接口的数据包会根据路由表检查其源地址,以确保响应会从同一接口发出。如果不是,则丢弃该数据包。这是在./proc/sys/net/ipv4/conf/{all,default,devname}/rp_filter
除此之外,默认情况下路由仅基于目标 IP 完成。
至于你的第三个问题...如果你有一台机器配置为 172.16.1.1/24,并尝试将其默认网关设置为 192.168.1.1,你可能会收到一个错误:默认网关不可访问(有没有通往它的路线)。如果您让它接受并使用它(例如,通过向其添加路由),那么它会将数据包发送到您的路由器。如果反向路径过滤器关闭,那么您的路由器将接受并路由数据包。任何回复都可能毫无用处:
他们甚至可能无法回到您的路由器。其他路由器知道将 192.168.1.0/24 的数据包发送到您的路由器,但不知道 172.16.1.0/24。假设您设置了路线来实现这一点,那么......
您的路由器不知道将 172.16.1.0/24 的数据包发送到哪里。实际上,它可能认为是这样,并将它们发送到默认网关。如果您在路由器上设置一条路线将它们发送回盒子......
那么它可能会起作用。
替代方法是将另一个 IP 地址添加到您的 WLAN 接口。路由器在其路由的每个子网上至少有一个 IP 地址是很正常的。您不需要别名接口来执行此操作,只需使用ip
:添加第二个 IP 即可ip addr add 172.16.1.254/24 dev wlan
。通常在单路由器子网上,第一个可用的 IP 是路由器,但这只是为了方便;这不是技术要求。
iptables
适用于流经该盒子的所有 IP 流量。这包括本地生成的流量和转发的流量。
您可以使用brctl
支持来实际桥接 wan 和 wlan(将它们变成交换机),但听起来您不想这样做。您可以使用ebtables
(not iptables
) 来过滤桥。