我想将连接到我的 Wi-Fi 的访客隔离到 10.0.0.x 子网,同时允许他们访问互联网。OpenWrt 路由器的地址是 192.168.1.48(“wifi”接口的地址是 10.0.0.1),网关的地址是 192.168.1.254。我该如何设置 OpenWrt,以便访客通过我的网关访问互联网,但仍局限于 10. 子网?
我已在 OpenWrt wiki 上阅读了 guest-wlan 配方,但我不知道该怎么做。到目前为止,我已成功为提供 10.x 地址的访客设置了 DHCP 服务器。
我还注意到我可以从 10.x 网络中的笔记本电脑解析主机名。从 dnsmasq 日志中我可以看到它知道 192.168.1.254 处有一个名称服务器(因为它在 /etc/resolv.conf 中查找过,我猜)。但是数据包如何以及为何穿过防火墙?
我在 WRT54GL 上运行 Backfire 10.03.1。网关是 Linksys E4200。这是我目前的 OpenWrt 配置:
/etc/config/dhcp
配置“dnsmasq” 选项‘domainneeded’‘1’ 选项‘boguspriv’‘1’ 选项‘filterwin2k’‘0’ 选项‘localise_queries’‘1’ 选项‘rebind_protection’‘1’ 选项‘rebind_localhost’‘1’ 选项‘本地’‘/lan/’ 选项‘域’‘lan’ 选项‘expandhosts’‘1’ 选项‘nonegcache’‘0’ 选项‘权威’‘1’ 选项‘readethers’‘1’ 选项‘leasefile’‘/tmp/dhcp.leases’ 选项‘resolvfile’‘/tmp/resolv.conf.auto’ 配置‘dhcp’‘lan’ 选项‘接口’‘lan’ 选项‘忽略’‘1’ 配置‘dhcp’‘wan’ 选项‘接口’‘wan’ 选项‘忽略’‘1’ 配置‘dhcp’ 选项‘开始’‘100’ 选项‘租赁时间’‘12h’ 选项‘限制’‘150’ 选项‘接口’‘wifi’
/etc/config/网络
配置‘接口’‘环回’ 选项‘ifname’‘lo’ 选项‘proto’‘static’ 选项‘ipaddr’‘127.0.0.1’ 选项‘网络掩码’‘255.0.0.0’ 配置‘接口’‘lan’ 选项‘ifname’‘eth0.0’ 选项‘proto’‘static’ 选项‘网络掩码’‘255.255.255.0’ 选项‘ipaddr’‘192.168.1.48’ 选项‘网关’‘192.168.1.254’ 选项‘dns’‘192.168.1.254’ 配置“接口”“wan” 选项‘ifname’‘eth0.1’ 选项‘proto’‘dhcp’ 配置‘接口’‘wifi’ 选项‘proto’‘static’ 选项‘ipaddr’‘10.0.0.1’ 选项‘网络掩码’‘255.255.255.0’
/etc/config/无线
配置'wifi 设备''wl0' 选项‘类型’‘broadcom’ 选项‘频道’‘11’ 配置'wifi-iface' 选项‘设备’‘wl0’ 选项‘模式’‘ap’ 选项‘ssid’‘OpenWrt’ 选项‘加密’‘无’ 选项‘网络’‘wifi’
/etc/config/firewall(未更改默认值)
配置默认值 选项 syn_flood 1 选项输入 ACCEPT 选项输出 ACCEPT 选项转发 REJECT # 取消注释此行以禁用 ipv6 规则 # 选项 disable_ipv6 1 配置区域 选项名称 lan 选项网络‘lan’ 选项输入 ACCEPT 选项输出 ACCEPT 选项转发 REJECT 配置区域 选项名称 wan 选项网络‘wan’ 选项输入 REJECT 选项输出 ACCEPT 选项转发 REJECT 选项 masq 1 选项 mtu_fix 1 配置转发 选项 src lan 选项目标广域网 # 我们需要在端口 68 上接受 udp 数据包, # 参见 https://dev.openwrt.org/ticket/4108 配置规则 选项名称 Allow-DHCP-Renew 选项 src wan 选项协议 UDP 选项 dest_port 68 选项 目标 接受 选项系列 ipv4 # 允许 IPv4 ping 配置规则 选项名称 Allow-Ping 选项 src wan 选项协议 ICMP 选项 icmp_type echo-request 选项系列 ipv4 选项 目标 接受 # 允许 DHCPv6 回复 # 参见 https://dev.openwrt.org/ticket/10381 配置规则 选项名称 Allow-DHCPv6 选项 src wan 选项协议 UDP 选项 src_ip fe80::/10 选项 src_port 547 选项 dest_ip fe80::/10 选项 dest_port 546 选项系列 IPv6 选项 目标 接受 # 允许必要的传入 IPv6 ICMP 流量 配置规则 选项名称 Allow-ICMPv6-Input 选项 src wan 选项协议 ICMP 列表 icmp_type echo-请求 列表 icmp_type 目标不可达 列表 icmp_type 数据包太大 列表 icmp_type 超出时间 列表 icmp_type 坏头 列表 icmp_type 未知报头类型 列表 icmp_type 路由器请求 列表 icmp_type 邻居请求 选项限制 1000/秒 选项系列 IPv6 选项 目标 接受 # 允许必要的转发 IPv6 ICMP 流量 配置规则 选项名称 Allow-ICMPv6-Forward 选项 src wan 选项目标* 选项协议 ICMP 列表 icmp_type echo-请求 列表 icmp_type 目标不可达 列表 icmp_type 数据包太大 列表 icmp_type 超出时间 列表 icmp_type 坏头 列表 icmp_type 未知报头类型 选项限制 1000/秒 选项系列 IPv6 选项 目标 接受 # 包含用户自定义 iptables 规则的文件 配置包括 选项路径 /etc/firewall.user ### 示例配置部分 # 不允许特定 IP 访问 wan #配置规则 # 选项 src lan # 选项 src_ip 192.168.45.2 # 选项目标 wan # 选项 proto tcp # 选项目标 REJECT # 阻止 WAN 上的特定 mac #配置规则 # 选项目标 wan # 选项 src_mac 00:11:22:33:44:66 # 选项目标 REJECT # 阻止区域上的传入 ICMP 流量 #配置规则 # 选项 src lan # 选项协议 ICMP # 选项目标 DROP # 端口重定向将进入广域网的端口重定向到局域网 #配置重定向 # 选项 src wan # 选项 src_dport 80 # 选项目标局域网 # 选项目标 IP 192.168.16.235 # 选项目标端口 80 # 选项 proto tcp ### 完整配置部分 #配置规则 # 选项 src lan # 选项 src_ip 192.168.45.2 # 选项 src_mac 00:11:22:33:44:55 # 选项 src_port 80 # 选项目标 wan # 选项目标 IP 194.25.2.129 # 选项目标端口 120 # 选项 proto tcp # 选项目标 REJECT #配置重定向 # 选项 src lan # 选项 src_ip 192.168.45.2 # 选项 src_mac 00:11:22:33:44:55 # 选项 src_port 1024 # 选项 src_dport 80 # 选项目标 IP 194.25.2.129 # 选项目标端口 120 # 选项 proto tcp
我意识到这更像是一个一般的网络问题,而不是 OpenWrt 问题,但我认为我应该提到 OpenWrt。我稍微知道要实现这一点需要一些 iptables 黑魔法,但我不知道正确的咒语,所以我想寻求帮助。
提前致谢!
答案1
遇到过和你一样的情况,只是网关不同(Cisco RV042G)。但是,由于缺少功能,我的解决方案可能不适用于 E4200。如果使用其他方法可以实现,那我就不知道了。我为可能正在寻找类似解决方案的其他人添加了答案。
假设 10.0.0.0/24 是您的主网络,网关地址为 10.0.0.1,而 10.0.1.0/24 是访客网络。重现我的解决方案的步骤如下:
- 在网关上为访客创建不同的子网。网关必须支持此功能,因为它会创建多个 NAT 表以将互联网流量路由到适当的子网。
- 添加防火墙规则,用于阻止网关上从 10.0.1.0/24 到 10.0.0.0/24 的所有流量。
- 使用内核为 2.6+ 的 OpenWrt 版本。brcm-2.4 版本由于缺乏 ebtables 支持而无法使用。我使用了基于默认 brcm47xx 配置的配置的 12.06 版本。使用默认映像 opkg 无法工作,而我没有尝试 10.03。我建议使用 Debian 7 i386 进行 buildroot,因为它在 amd64 和各种随机编译错误上浪费了我很多时间。我认为您可以使用 ImageBuilder,但我没有尝试过。对于 ebtables,您需要以下软件包:ebtables、ebtables-utils、kmod-ebtables-ipv4。内核模块不会自动添加为依赖项,所以要小心。
- 如果网关不支持多个 DHCP 池,则 /etc/firewall.user 中的这些 ebtables 规则用于阻止来自网关的 DHCP 广播。RV042G 不支持。在 OpenWrt 论坛上找到它们,并将它们改编为 12.06,它使用 eth0.0 作为 lan VLAN 的接口名称。
ebtables -F
ebtables -A INPUT --接口 eth0.0 --协议 ipv4 --ip 协议 udp --ip 源端口 67:68 -j DROP
ebtables -A INPUT --接口 eth0.0 --协议 ipv4 --ip 协议 udp --ip 目标端口 67:68 -j DROP
ebtables -A FORWARD --接口 eth0.0 --协议 ipv4 --ip 协议 udp --ip 目标端口 67:68 -j DROP
ebtables -A FORWARD --接口 eth0.0 --协议 ipv4 --ip 协议 udp --ip 源端口 67:68 -j DROP
- 可选:配置辅助子网的 lan 接口。如果网关和 OpenWrt AP 都使用默认值(192.168.1.1),则需要更改地址。
配置接口局域网
期权类型桥梁
选项 ifname“eth0.0”
选项原型静态
选项 ipaddr 10.0.1.2
选项网络掩码 255.255.255.0
选项网关 10.0.1.1
选项 DNS “8.8.8.8 8.8.4.4”
- 告诉 DHCP 服务器要广播哪个网关,因为它通常会使用来自 LAN 接口配置的 ipaddr:
配置 dhcp 局域网
选项 lan 接口
选项开始 100
选项限制 100
选项租赁时间 1h
列表‘dhcp_option’‘3,10.0.1.1’
- 将无线配置为常规接入点。可选:加密(推荐)、客户端隔离(也推荐)。
我发现此设置只有一个问题:如果该网络的子网是“猜测的”,并且手动为无线接口配置网络,则访客仍然可以进入主网络。考虑到访客仍然可以看到来自主网络的 arp 广播,对于理解前面陈述的人来说,这并不难。我认为可以通过在 OpenWrt AP 上设置一些防火墙规则来解决这个问题,但我必须研究一下这部分。